如何利用PHP的字符串解析特性Bypass


本篇内容介绍了“如何利用PHP的字符串解析特性Bypass”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 我们知道PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。如果一个IDS/IPS或WAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用以下语句绕过:上述PHP语句的参数%20news[id%00的值将存储到$_GET[“news_id”]中。HP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符2.将某些字符转换为下划线(包括空格)例如:通过以下这个示例,你可以更直观的看到parser_str函数如何处理字符串:parse_str函数通常被自动应用于get、post请求和cookie中。如果你的Web服务器接受带有特殊字符的参数名,那么也会发生类似的情况。如上代码所示,我进行了多次循环,枚举了参数名三个位置的0到255之间的所有字符,看看解析函数到底是如何处理这些特殊字符的。结果如下:1.[1st]foo_bar2.foo[2nd]bar3.foo_bar[3rd]在上述方案中,foo%20bar和foo+bar等效,均解析为foo bar。也许你也听过这款软件,Suricata是一个“开源、成熟、快速、强大的网络威胁检测引擎”,它的引擎能够进行实时入侵检测(IDS)、入侵防御系统(IPS)、网络安全监控(NSM)和离线流量包处理。在Suricata中你可以自定义一个HTTP流量的检测规则。假设你有这样一个规则:简单来说,上述规则会检查news_id的值是否是数字。那么根据上述知识,我们可以很容易的绕过防御,如下所示:通过在Google和Github上进行搜索,我发现有很多关于Suricata规则可以通过替换下划线或插入空字符来绕过。一个真实的例子:https://github.com/OISF/suricata-update/blob/7797d6ab0c00051ce4be5ee7ee4120e81f1138b4/tests/emergi免费云主机域名ng-current_events.rules#L805上述规则可以通过以下方式绕过:当然,这条规则交换参数位置即可绕过,比如:此外,PHP查询字符串的解析特性也可用以绕过WAF。想象一下,它的规则类似于SecRule !ARGS:news_id “@rx ^[0-9]+$” “block”,这显然可以通过相同的手段绕过。幸运的是,在ModSecurity中,可以通过正则表达式指定查询字符串中的参数。比如:以上规则将拦截诸如以下的请求:让我们用Suricata和Drupal CMS创建一个以利用CVE-2018-7600(Drupalgeddon2远程执行代码)的简单PoC。为了简单起见,我将在两个Docker容器上运行Suricata和Drupal,并尝试绕过Suricata攻击Drupal。我将使用两条Suricata防御规则:1.一条自定义规则拦截form_id=user_register_form2.另一条是关于CVE-2018-7600的通用规则Suricata官方安装流程点击[这里](https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Ubuntu_Installation_-_Personal_Package_Archives_(PPA)。对于Drupal,我运行了一个Vulhub容器,你可以在这里下载:首先,让我们尝试利用CVE-2018-7600。一个利用curl命令的小型bash脚本,比如:如你所见,上面的脚本将执行命令id:现在,让我们尝试往Suricata导入以下两条规则:我编写了第一个规则,它只是尝试form_id=user_register_form在请求体内进行匹配; Positive Technology/user/register在请求URL和#post_render请求正文中写了第二个匹配项。我的规则:通用规则:在重启Suricata后,我的攻击被成功报警:可以看到,我们得到了两条日志:1.ATTACK [PTsecurity] Drupalgeddon2 172.17.0.1:80802.Possible Drupalgeddon2 attack [Priority: 3] {PROTO:006} 172.17.0.6:51702 -> 172.17.0.1:8080这两条规则其实都很容易绕过。首先,对于敏感字段form_id=user_register_form,我们可将其替换为如下内容:如上图所见,现在只有通用规则的警报。分析通用规则的正则表达式,我们可以看到它对#和%23敏感,但不涉及下划线的编码。因此,我们可以使用post%5frender代替post_render来绕过:最后得出可绕过两个规则的PoC:“如何利用PHP的字符串解析特性Bypass”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注云编程开发博客网站,小编将为大家输出更多高质量的实用文章!

相关推荐: docker怎么部署HFish

今天小编给大家分享一下docker怎么部署HFish的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。主节点部署:客户端子节点部署7879 为集群通…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/02 13:34
下一篇 02/02 13:35