进入靶场,有提示
我们在url试着输入本地IP,返回了ping命令
既然要在url处传参,那就用postman,再输入ip=127.0.0.1 & ls,试着列出目录内容
ok,好像是个脏话,它过滤了空格
试着穿越又看到了脏话,它过滤了符号,一怒之下删掉了../ 你猜怎么着,得到了两个文件名
当然是flag.php更吸引人,但index.php肯定有存在的意义,用cat命令读取文件内容,且不要空格,符号,那就用$IFS$1试着代替空格
两个都尝试后发现flag被过滤了,我们去研究index.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); } ?>
-
IP地址的初步安全检查:
- 使用
preg_match
函数检查输入字符串$ip
是否包含一系列特殊字符(如&
,/
,?
,*
,<
, 空格,>
,'
,"
,\
,(
,)
,[
,]
,{
,}
)。 - 如果检测到这些特殊字符,输出匹配结果(1或0表示是否匹配),并终止脚本执行,显示错误信息"fxck your symbol!"。
- 使用
-
检查空格:
- 如果
$ip
包含空格,则终止脚本执行,显示错误信息"fxck your space!"。
- 如果
-
检查bash关键字:
- 如果
$ip
包含字符串"bash",则终止脚本执行,显示错误信息"fxck your bash!"。
- 如果
-
检查flag关键字:
- 使用正则表达式检查
$ip
是否包含任意顺序的字符组成的"flag"(不区分大小写)。如果包含,则终止脚本执行,显示错误信息"fxck your flag!"。
- 使用正则表达式检查
-
执行ping命令:
- 如果通过了上述所有检查,使用
shell_exec
函数执行ping -c 4
命令来测试$ip
的连通性。-c 4
参数表示发送4个ICMP ECHO_REQUEST消息。 - 输出空行和
ping
命令的执行结果。
- 如果通过了上述所有检查,使用
这里我就没办法了
看了博客后,将flag中的g用$a代替可以绕过
或者内联执行