xctf-pwn-“反应釜开关控制 & 实时数据监测 & greeting-150“

反应釜开关控制

该pwn题目逻辑较为简单。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过三次栈溢出,可以得到shell函数地址。
在这里插入图片描述
发现PIE保护没有开启,其实这里是直接可以栈溢出到shell函数的地址的,不必弄那么复杂!
在这里插入图片描述
这道题目的PIE应该是忘记开了,题目原本设计的目的是想让我们使用三次栈溢出来得到shell的。
分界线
这里我感觉应该不是这么简单的,所以我又去进行寻找资料,发现是XCTF 4th-CyberEarth里面的盲打题。意味着我们没有ELF文件,所以我们就没有办法来想这么简单的去做出来。


实时数据监测

发现什么保护都没有开启。
在这里插入图片描述
然后看一看代码。
在这里插入图片描述
关键是利用格式化字符串进行任意地址写,将key地址里面的数值进行覆盖。
在这里插入图片描述
偏移量应该是12,而key的地址为0x0804A048,需要将key的值覆盖为35795746即可。转换为发送数据为22 33 22 02。

\x22=34  		\x33=51  		\x22=34           \x02=2
18+16=34=0x22   34+17=51=0x33   51+239=290=0x122  290+224=514=0x202
数据在内存中是小端序%hhn会写入单字节
构造如下:
%18c%12$hhn%17c%13$hhn%239c%14$hhn%224c%15$hhn
也可以使用fmtstr_payload函数
payload = fmtstr_payload(12,{key_addr,35795746})

在这里插入图片描述


greeting-150

在这里插入图片描述
在这里插入图片描述
并且可以发现存在system函数。
在这里插入图片描述
这个时候我们可以先确认偏移量!
在这里插入图片描述
通过判断发现不存在栈溢出漏洞,也就是说我们只有一个格式化字符串漏洞,但是如果仅仅靠格式化字符串漏洞,可以达到一次的任意地址写,但是仅仅通过一次任意地址写,是达不到我们想要的地步,所以我们必须想办法将该格式化字符串漏洞可以多次利用!

大多数可执行文件是通过链接 libc 来进行编译的,因此 gcc 会将 glibc 初始化代码放入编译好的可执行文件和共享库中。
.init_array和 .fini_array 节(早期版本被称为 .ctors和 .dtors )中存放了指向初始化代码和终止代码的函数指针。
.init_array 函数指针会在 main() 函数调用之前触发。这就意味着,可以通过重写某个指向正确地址的指针来将控制流指向病毒或者寄生代码。
.fini_array 函数指针在 main() 函数执行完之后才被触发,在某些场景下这一点会非常有用。
例如,特定的堆溢出漏(如曾经的 http://phrack.org/issues/57/9.html )会允许攻击者在任意位置写4个字节,攻击者通常会使用一个指向 shellcode 地址的函数指针来重写.fini_array 函数指针。
对于大多数病毒或者恶意软件作者来说, .init_array 函数指针是最常被攻击的目标,因为它通常可以使得寄生代码在程序的其他部分执行之前就能够先运行。

在这里插入图片描述
此时我们利用一次任意地址写,覆盖.fini_array函数指针。然后可以进行覆盖strlen的got地址为system的plt地址。第二次main函数时就输入’/bin/sh’,调用strlen时候实际上调用的是system("/bin/sh");该函数。
在这里插入图片描述
利用该脚本可以得到权限!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值