代码编织梦想

 就是这样一个界面。

查看源码

提示有waf。

 这里JS读取了calc.php这个页面的数据。

 

 查看这个页面:

果然:

 黑名单过滤了一些字符。

每当我输入字母,他就会直接报错,虽然不是黑名单中的字符,怎么也报错了,那就应该是一个waf的拦截了。

这里要绕waf,要绕过黑名单,最后用eval()函数执行PHP代码。

网上学的方法:地址

利用PHP字符串解析特性绕过waf:

我们知道PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => "bar")。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。如果一个IDS/IPS或WAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用以下语句绕过:

/news.php?%20news[id%00=42"+AND+1=0--

上述PHP语句的参数%20news[id%00的值将存储到$_GET["news_id"]中。

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

1.删除空白符

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

 大致我理解的意思就是:

这里的waf会对num变量进行检查,看是不是含有字母,有字母就拦截,所以我们这里利用PHP解析特性,在num变量名中加入特殊字符,让waf识别不到这个变量,他就没办法检查,但是到了后端num变量又会被PHP解析成num,就不影响后面利用num变量的值执行PHP代码。

所以这里在num前面加空格绕waf。

 

过滤了很多函数,包括常用的system函数。

所以要用其他的方法了。

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42702981/article/details/118723156