欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

buuctf-pwn1 sctf 2016

程序员文章站 2022-07-15 14:59:12
...

拿到文件后checksec一下,发现开启了NX保护,说明堆栈不可执行,那我们就不能向堆栈上写东西。
buuctf-pwn1 sctf 2016
查看一下程序
buuctf-pwn1 sctf 2016main()函数调用了vuln()函数,查看一下此函数有没有什么漏洞可以利用,enmenm,发现代码很多不知道什么意思(太菜了太菜了),好好看看这些代码到底啥意思吧~~,部分代码注释如下:

buuctf-pwn1 sctf 2016本来看到代码5处,想着能通过向缓冲区S中写入数据,利用栈溢出来覆盖返回地址为后门函数地址,但是fgets()函数告诉我此法不行,因为你最多只能向S中输入32个字符,而缓冲区S的大小为0x3c,也就是需要输入60个字符才能将S填满,所以远远不够,只能分析代码找另一个方法,看到有一个replace()函数,他会将“I”转换成“you”,那就可以输入20个“I”,这样就相当于输入了20个“you”,正好60个字符,能将S填满,那么如果我们在覆盖返回地址为后门函数地址就能获得shell,看看有没有后门函数,按shift+F12查看字符串(我的电脑还需要多按个Fn键才行),查看结果如下:
buuctf-pwn1 sctf 2016看到一个关键字符串“cat flag.txt”,双击查看,按ctrl+x查看哪个函数调用了这个字符串
buuctf-pwn1 sctf 2016点击调用函数查看
buuctf-pwn1 sctf 2016此函数的地址为flag_addr=0x8048F0D,那么我们填满S后,将返回地址覆盖为flag_addr=0x8048F0D,就能获得shell,构造payload=‘I’*20+‘a’*4+p32(flag_addr).(因为是32位,所以“a”*4)

exp

from pwn import*
r=remote("node3.buuoj.cn",28824)
flag_addr=0x8048f0d
payload='I'*20+'a'*4+p32(flag_addr)
r.sendline(payload)
r.interactive()

buuctf-pwn1 sctf 2016

相关标签: pwn学习