Bootstrap

五,[GXYCTF2019]Ping Ping Ping1

a8ff0cc9da514e6d917d75ef83aff490.png

进入靶场,有提示

bcc3a46906f74f279541173adc5f27b8.png

我们在url试着输入本地IP,返回了ping命令

f9fc52a78ca44293af4f18d5aa62a2a5.png

既然要在url处传参,那就用postman,再输入ip=127.0.0.1 & ls,试着列出目录内容

9eafd59d6aff47c49d3ef6b310d84c82.png

ok,好像是个脏话,它过滤了空格

c6c1f886c46e4138811769419d8012b6.png

试着穿越又看到了脏话,它过滤了符号,一怒之下删掉了../   你猜怎么着,得到了两个文件名

9f4164308cea4beb9cbd6d75ce182be7.png

当然是flag.php更吸引人,但index.php肯定有存在的意义,用cat命令读取文件内容,且不要空格,符号,那就用$IFS$1试着代替空格

a8a097a4aa974160aa0d970c841621b2.png

 

26e85cdcba2b4b0cafe9958a2ff7e0e6.png

两个都尝试后发现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); } ?>
  1. IP地址的初步安全检查

    • 使用preg_match函数检查输入字符串$ip是否包含一系列特殊字符(如&/?*<, 空格,>'"\()[]{})。
    • 如果检测到这些特殊字符,输出匹配结果(1或0表示是否匹配),并终止脚本执行,显示错误信息"fxck your symbol!"。
  2. 检查空格

    • 如果$ip包含空格,则终止脚本执行,显示错误信息"fxck your space!"。
  3. 检查bash关键字

    • 如果$ip包含字符串"bash",则终止脚本执行,显示错误信息"fxck your bash!"。
  4. 检查flag关键字

    • 使用正则表达式检查$ip是否包含任意顺序的字符组成的"flag"(不区分大小写)。如果包含,则终止脚本执行,显示错误信息"fxck your flag!"。
  5. 执行ping命令

    • 如果通过了上述所有检查,使用shell_exec函数执行ping -c 4命令来测试$ip的连通性。-c 4参数表示发送4个ICMP ECHO_REQUEST消息。
    • 输出空行和ping命令的执行结果。

这里我就没办法了

看了博客后,将flag中的g用$a代替可以绕过

2b1426f61fda4e7d94b61f9b2712246b.png

或者内联执行

f49bf1171ed3462a8d9d9bf8da1ea73a.png

 

;