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

使用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%00=42]转换为Array([wenson_id] => 42)

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

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

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

  1. 删除初始空格

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

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

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

可以对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**%00**=1%22+AND+1=1--"

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

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

/test.php?tt<span >

等同于下面的URL地址:

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

No.3

尾言

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

来源:微点阅读  https://www.weidianyuedu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值