Write-Up/LOB

LOB: succubus -> nightmare

NONE_31D 2019. 11. 28. 23:31

1. nightmare.c 분석

- addr : strcpy()의 주소

- argv[1] : 사용자가 입력한 인자, 버퍼에 복사됨

- RET : buffer+44

 

=> RTL 기법 이용, RET에 strcpy 주소를 넣어야 함

 

흐름을 살펴보면 마지막 memset() 함수를 이용하여  ret+4의 주소부터 4바이트를 A로 채운다. 

이때 strcpy() 함수를 삽입시키면 버퍼의 문자열 전부를 RET+4부터 복사할 수 있다.

=> 버퍼에 RTL 기법을 이용하여 system() 함수로 쉘을 얻을 수 있다.

 

 

2. 디버깅 

라이브러리에 저장된 system() 주소를 얻어온다. 

어셈블에 있는 strcpy() 주소도 얻을 수 있다.

 

3. 페이로드 작성

 

페이로드는 다음과 같이 이뤄진다

system() + dummy + "/bin/sh" + dummy + strcpy() + dummy + (ret+4의 주소) + 버퍼의 주소

 

메모리를 보면 버퍼의 주소는 0xbffffa40, ret+4의 주소는 0xbffffa70임을 알 수 있다. 

 

모은 주소를 모두 합치면 페이로드는 다음과 같다. 

 

./nightmare $(python -c 'print "\xe0\x8a\x05\x40"+"\x90"*4+"\xf9\xbf\x0f\x40"+"\x90"*32+"\x10\x84\x04\x08"+"\x90"*4+"\x70\xfa\xff\xbf"+"\x40\xfa\xff\xbf"')

 

'Write-Up > LOB' 카테고리의 다른 글

LOB: orc->wolfman  (0) 2019.12.04
LOB: troll->vampire  (0) 2019.11.28
LOB: gremlin->cobolt  (0) 2019.11.27
LOB: gate - 수정중  (0) 2019.11.22