안녕안녕
TODAY 13 TOTAL 5,346
Pwnable KR - uaf


8점 문제. Use After Free를 몰라서 또 찾아봐야했다.


uaf.cpp

c++ 코드고, 일단 malloc 함수부터 찾아보고 좀 당황했는데, 객체가 heap 영역에서 생성되서 상관이 없었다.

main 함수가 시작되면서 Man과 Woman의 객체를 생성하며 1을 입력하면 각 객체의 introduce() 함수를 호출, 2를 입력하면 새로운 객체 생성, 3을 입력하면 m, w 객체를 제거한다.


readelf -a uaf로 긁어서 옆 모니터에 놔두고 진행했다.


이렇게 분기점이 갈리고,


case 1 영역을 볼 때, [rbp-0x38]과 [rbp-0x30]은 각각 m 객체와 w 객체인데 저기다가 브레이크포인트 때려박고 레지스터를 따라갔다.


0x401570이 가리키는 것은 0x40117a로 give_shell() 함수이고, 0x401578이 가리키는 주소는 0x4012d2로 introduce() 함수다. 0x401570 대신 0x401568이 있다면 8을 더한 값인 0x401570이 가리키는 0x40117a 함수를 호출할 수 있다.


m, w 객체를 삭제하고 해당 객체를 가리켰을 레지스터를 보면 내용이 비어있다.


./uaf 4 /tmp/ko/AAAA

AAAA 파일에 AAAA를 기록해서 인자로 전달해서 메모리가 어떻게 할당되는지를 보면

첫 번째 메모리 할당.

두 번째 메모리 할당. 힙 영역에서는 스택과 달리 낮은 주소에서 높은 주소로 올라간다고 알고 있었는데, 해제한 메모리를 채울 때는 높은데부터 채우나보다.


풀이

python -c "print '\x68\x15\x40\x00'" > /tmp/ko/BBBB
./uaf 4 /tmp/ko/BBBB


0  Comments,   0  Trackbacks
글 보관함
캘린더
«   2016/04   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30