加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用PHP查询字符串能绕过waf吗

发布时间:2022-11-26 02:08:40 所属栏目:PHP教程 来源:网络
导读: 使用PHP查询字符串绕过waf
No.1
语法&定义&注释
查询字符串解析到变量,首先看一下parse_str()函数:语法:parse_str(string,array)
定义和用法:
parse_str() 函数把查询字符串解析到变量

使用PHP查询字符串绕过waf

No.1

语法&定义&注释

查询字符串解析到变量,首先看一下parse_str()函数:语法:parse_str(string,array)

定义和用法:

parse_str() 函数把查询字符串解析到变量中。注释:

如果未设置 array 参数,则由该函数设置的变量将覆盖已存在的同名变量。注释:

php.ini 文件中的 magic_quotes_gpc 设置影响该函数的输出。如果已启用,那么在 parse_str() 解析之前,变量会被 addslashes() 转换。

No.2

如何绕过waf程序规则

TL;DR,PHP将查询字符串(在URL或body中)转换为$_GET或$_POST中的数组。例如:/foo=bar变成Array([foo] => "bar"),查询字符串解析过程使用下划线删除或替换参数名称中的某些字符。

例如/%20wenson[id=42]转换为Array([wenson_id] => 42)

如果遇到waf对wenson_id的值进行拦截时,怎么样使用滥用PHP查询字符串解析器来绕过WAF,可以通过以下面方式来绕过这个解析过程:

/wenson.php?%20wenson[id=42"+AND+1=0—在PHP中,上面的示例%20wenson[id]中的参数名的值将存储为$_GET["wenson_id"]。

PHP需要将所有参数转换为一个有效的变量名,因此当解析查询字符串时,它主要做两件事:

删除初始空格

将一些字符转换为下划线(包括空格)

通过如下所示的简单循环,您可以使用parser_str函数发现哪个字符被删除或转换为下划线:

在这里可以用foo_bar的值进行fuzz测试,“[X]foo[X]bar[X]”是[X]的标记位,对这个标记位进行测试,如果web服务器接受带点或空白的标题名称PHP字符串变量,也会发生类似的事情。

可以对fuzz测试的一些点:

接下来进行拆分,进行分析:

[1st]foo_barfoo[2nd]barfoo_bar[3rd]

可以看出foo%20bar 等同于 foo+bar ,并且可以被解析为foo bar。如果使用一个正则规则来匹配时:

alert http any any -> $HOME_NET any (\ msg: "Block SQLi"; flow:established,to_server;\ content: "POST"; http_method;\ pcre: "/wenson_id=[^0-9]+/Pi";\ sid:1234567;\)

可以使用下面的方式进行绕过:

/wenson**[**id=1%22+AND+1=1--"/wenson**%5b**id=1%22+AND+1=1--"/wenson_id****=1%22+AND+1=1--"

如果像ModSecurity的话,使用这个规则的话SecRule !ARGS:wenson_id "@rx ^[0-9]+$",以上的方式是不成功的,

所以在有时候可以这样子绕过waf:所以在绕PHP文件中,遇到类似的parse_str()函数时,可以尝试去绕过。

/test.php?tt

等同于下面的URL地址:

/test.php?tt=1&wenson=fsf23424234234ffsdfds

No.3

尾言

最后,文章的内容部分参考互联网的文章来写,在绕过的过程中,多尝试一下PHP替代函数进行绕waf。

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!