본문 바로가기

분류 전체보기

glibc 2.26 tcache 동작 분석 및 exploit (how2heap) tcache 이번에 코드게이트 준비하다가 우연히 tcache dup 문제를 풀게 됐는데 한글 문서가 별로 없는것 같아서 glibc 분석 내용을 정리한다. tcache(thread local caching)은 malloc과 free의 호출 횟수를 줄여 속도를 높이기 위해 고안되었다고 한다. 캐싱 작업을 통해 fastbin, unsortedbin 등등..이 불릴 일 없이 빠르게 처리하는 것 같다.. tcache 구조체xxxxxxxxxxtypedef struct tcache_entry{ struct tcache_entry *next;} tcache_entry;​/* There is one of these for each thread, which contains the per-thread cache (hence.. 더보기
pwnable.tw calc 보호되어 있는 글입니다. 더보기
pwnable.tw silver bullet 보호되어 있는 글입니다. 더보기
pwnable.tw hacknote 보호되어 있는 글입니다. 더보기
got_overwrite stack_smashing_detected got_overwrite 이번에 got_overwrite를 하면서 알게 된 사실인데.got.plt 주소 간격을 보면 64비트 기준으로 8바이트씩 매우 빡빡하게 차있는 것을 볼 수 있다.여기서 만약 strcpy에 맨 뒤에 NULL byte를 포함시키는 cin과 같은 함수로 got_overwrite를 통하여 p64(0x8)을 보내면? 위와 같이 strcpy의 got는 성공적으로 overwrite됐지만 그 다음에 있는 got가 NULL로 1바이트 덮여버린다.이 경우 나는 해당 함수의 canary가 변조되어 stack_smashing_detected 오류가 발생하였다. 직접 손으로 돌려가며 찾아야 하는 부분이라 오래 걸린다.. 이를 방지하는 방법은 p64(0x8).rstrip('\x00').ljust(7,'\x.. 더보기
2017 codegate petshop petshop 2017 codegate petshop처음 시작할 때 24바이트를 할당한 후 이를 인자로 sub_401e9e가 불린다. 첫 번째, buy 부분을 보면 72바이트 할당을 해준다. 이 주소를 가지고 있는 변수를 v12라 했을 때*v12 = function address (virtual method)*(v12+8) = name*(v12+16) = sound*(v12+24) = food이런 식으로 저장이 되며 처음 시작할 때 할당했던 24바이트 메모리 공간에 자신의 주소를 쓴다. (a1, a1+8)a1+16에는 buy_pet_num이 들어간다.최대 2마리까지 살 수 있다. 두 번째 메뉴는 virtual method의 function addr을 0x402800으로 만든 후 delete 해준다. 세 .. 더보기
2014 hack.lu oreo oreo 2014 hack.lu oreo1번 메뉴에서 할당을 해주는데 최대로 chunk_addr+25+56만큼 값을 입력할 수 있고 64byte만큼 할당이 되기 때문에 prev_size, size, fd, bk를 모두 덮어씌울 수 있다.그리고 chunk_addr + 13에 먼저 할당된 힙이 존재하면 주소를 써준다. 2번 메뉴는 출력을 해준다. i+13을 바꿔 leak을 진행할 수 있겠다. 3번 메뉴는 v2+13을 계속해서 참조하여 free를 해준다. House of spirit! 4번 메뉴는 페이로드를 넣는 곳인가 보다.. 이게 전역변수가 포인터인 경우는 ctf에서 처음 봐서 너무 헷갈렸다.. 얘도 똑같이 32비트 기준으로 4바이트 주소값을 저장 한다. 이 오류때문에 정말 많이 고생했는데 코드 구현부를 .. 더보기
pwnable.tw orw 보호되어 있는 글입니다. 더보기