php 字符查询_使用PHP查询字符串绕过waf

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

No.1语法&定义&注释

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

lazy.png

定义和用法:

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

删除初始空格

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

lazy.png

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

lazy.png

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

lazy.png

可以对fuzz测试的一些点:

lazy.png

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

[1st]foo_bar

foo[2nd]bar

foo_bar[3rd]

lazy.png

可以看出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%5bid=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%00=1&%20wenson=fsf23424234234ffsdfds

等同于下面的URL地址:

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

No.3尾言

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

本文来自Wens0n,经授权后发布,本文观点不代表立场,转载请联系原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值