사실 눈치 챘을 수도 있지만 지금까지 올라온 heap 블로그는 dreamhack의 Heap Allocator Exploit 강의를 기반으로 필자가 직접 공부하고 이해하며 이해하기 쉽도록 재구성하여 작성한 것들이다. 그래서 이전 블로그들은 매우 기본적인 공격 방법을 설명한 것이며 공격 조건이나 공격 방법 등의 것들도 정해져있는 것이 아니라 버전마다 바뀌기 때문에 익스플로잇 기법을 외워서 하기는 조금 힘들다. 그래서 추천드리는 사이트가 바로 how2heap 이다.https://github.com/shellphish/how2heap GitHub - shellphish/how2heap: A repository for learning various heap exploitation techniques.A repos..
tcache에서 라이브러리 영역 주소를 릭하는 방법은 다음과 같다.1. 7개의 tcache_entry 를 꽉 채워 tcache를 사용하지 않도록 한 후 unsorted bin을 만든다. (fast bin에 들어가지 않을 크기여야한다.)// gcc -o leak1 leak1.c -no-pie#include #include #include int main(){ uint64_t *ptr[10]; int i; for(i=0;i 2. tcache에서 허용하지 않는 크기를 할당한 이후 해제해 unsorted bin 을 만든다.// gcc -o leak2 leak2.c -no-pie#include #include #include int main(){ uint64_t *ptr[2]; ptr[0] = malloc(0x4..
공격조건fake chunk의 주소를 알아야 한다. 임의의 주소를 free할 수 있다. Tcache House of Spirit 이란?free 함수의 인자를 조작하여 임의의 메모리를 해제할 수 있을 때 사용할 수 있는 기법으로 원하는 주소에 힙을 할당해 임의의 주소에 값을 쓸 수 있다. 예시// gcc -o spirit1 spirit1.c -no-pie#include #include int main(){ long long fake_chunk[10] = {0,}; fake_chunk[0] = 0; fake_chunk[1] = 0x31; fake_chunk[2] = 0x41414141; free(&fake_chunk[2]); char *fake_alloc = malloc(0x20); printf("fake c..
calloc 이란?calloc은 malloc과 같이 동적으로 메모리를 할당하는 함수이다.calloc은 할당과 동시에 메모리를 초기화 해서 기존에 남이있던 데이터의 재사용을 방지한다.void *calloc(size_t nmemb, size_t size);calloc함수는 다음과 같고 첫 번째 인자는 할당할 크기, 두 번째 인자는 자료형의 크기다.그래서 총 크기는 nmemb * size 가 된다. calloc의 특징- calloc으로 할당한 힙을 해제하면 tcache_entry에 추가되긴 하지만 다시 calloc 함수를 통해 할당 요청을 하면 tcache_entry를 참조하지 않는다. 즉, tcache에 들어가기는 하지만 tcache에서 가져오지는 않는다. breaking calloccalloc 함수를 호출..
YISF은 8월에 끝났지만 이제서야 적는다. 사실 BOB하느라 문제만 내고 딱히 뭐 한거는 없다.뭔가 heap으로 야무진 문제를 만들고 싶은데 어떻게 해도 다 heap note challenge가 되버린다. 아직 경험이 부족해서 그런 것 같다. 내년 중순에 입대를 할 것 같아서 다음 YISF은 못하지만 입대 전에 몇 문제 만들고 갈까 생각중이다. misc 하 문제 pikachu와 pwnable 하 문제 yisf_hospital 문제를 만들었다. pikachush 같은 명령어로 날먹하는것을 방지하기 위해 /bin/sh 권한을 없애고 명령어를 치면 /bin/명령어 로 만들어서 execve로 실행하게 했다. cat flag를 만들면 된다. (* 도 필터링) cat flag0x67616C6620746163pi..
이번 9월 26일에 충청권 사이버보안 경진대회를 다녀왔다.도착하고 등록한 후에 옷을 갈아입고 점심식사후에 대회를 시작하였다.이번에도 작년과 비슷하게 여러분야의 문제가 나왔다. 문제는 작년과 다르게 꽤 많이 어려웠으며 몇몇 100점(하) 문제가 0솔버가 나기도 하였다. 역시 간식은 많이 제공되었고 야식으로는 치킨을 받았다. 대회는 12시에 종료되었고 개별 숙소로 들어가서 잠을 잤다. 다음날 아침 8시 반에 일어나서 아침식사는 패스하고 숙소 체크아웃을 했고 문제리뷰와 외부 특강 후 시상식을 한 후 경품추첨 및 폐회를 하며 종료되었다. 이번에는 수상을 노려보았지만 아쉽게도 살짝 모자랐다. 아무래도 다른사람이 못푸는 문제를 풀어야 되는데 고점이 조금 낮은 것 같다.이번 대회에서 kaist도 참가했는데 진짜 ..
과제 하나 끝내면 하나 나오고 하나 끝내면 두개 더 나오고 하나 끝내면 또 나오고 또 나오고 또 나오고 또 나오고.... 1/3 은 못한것 같다. 이거 그냥 전부 다 하는게 쉽지 않다. 멘토님들이 선택과 집중이 중요하다고 하셨는데 무슨 말인지 이해가 된다. 개인적인 생각이지만 과제는 많고 시간은 한정적이니 본인이 하고 싶은, 미래에 도움이 되는, 무언가 얻어갈 수 있는 과제를 우선 모두 하는것을 목표로 하는게 좋을 것 같다. 뭐 top 30 을 하고 싶으면 어떻게든 다 해야하겠지만 내 능력으로는 힘든 것 같다. 그래도 도움이 되는 과제가 많았기 때문에 많이 배워가는 것 같다. 시스템 해킹이 상당수이기 때문에 웹이 주 분야이면 시스템 해킹을 공부하고 가는게 도움이 될 것이다.수면 시간은 평균적으로 3~4시..
공통 교육 + 트랙 교육을 한지 1달이 지났다.소감을 말해보자면 건강과 과제를 등가교환하는 기분이다.필자는 무슨 일이 있어도 6시간 수면을 해야한다는 확고한 생각을 가지고 있었는데 bob와서는 3시간 수면이 기본이 된 것 같다.하루에 핫식스 2캔을 기본으로 마시는 것 같고 밤에 자고 새벽에 나와서 공부하고,, 안좋은거는 다 하는 것 같다. 과제는 보통 수업 2개에 과제 1개 정도 나오는 것 같다. 하나하나가 묵직한 과제여서 좀 힘들다. 뭔가 하루 안에 안끝나는 과제를 하루에 2개씩 내는 느낌?아무튼 나보다 열심히 해도 안 죽는 사람들 많으니 더 열심히 해야겠다....