Sqlilabs-Less-29~31


Less-29 Protection with WAF

当我们老规矩添加?id=1’的时候,跳转到临外一个页面

url栏跑出来一个hack.jsp,可以看出来是Tomcat服务器;此时猜测为双服务器


服务器端有两个部分:第一部分为tomcat为引擎的jsp型服务器,第二部分为apache为引擎的php服务器,真正提供web服务的是php服务器。工作流程为:client访问服务器,能直接访问到tomcat服务器,然后tomcat服务器再向apache服务器请求数据。数据返回路径则相反。客户端请求首先过tomcat,tomcat解析第一个参数,接下来tomcat去请求apache(php)服务器,apache解析最后一个参数。
详情查看此文章:https://www.cnblogs.com/lcamry/p/5762961.html
老规矩查看源码:

此时先获取url?id=的值;然后进行提取java_implimentation($qs),接着进行whitelist($id1)

此时对获得的id参数进行正则匹配,此时id内容必须是数字;不是的话会跳转带hacker.php的页面

^表示匹配字符串的开始;$表示匹配字符串的结束;d表示匹配数字;+表示匹配多次

explode():将字符串分割开;explode(“&”,$q_s)就是将$q_s在&两边内容分隔开如id=1&id=2经过此函数便会被分割成id=1和id=2
foreach():便是将被分割的字符串一个个输出来
foreach (array_expression as $value):每次循环时都会将当前值赋给$value;且指针向前移一位
foreach (array_expression as $key => $value):每次循环时将当前值赋给$value且指针向前移一位;并且将当前的键名赋值给$key
$room = [‘a’=>’1’,’b’=>’2’];
此时a和b为键名,1和2为键值。
此时这两个函数的意思就是从被分割的数组里面查找;并截取前两位;如果前两位时id的话便再次对该数组值进行从第四位开始共截取30进行正则匹配。

此时是对tomcat的参数进行匹配;若是正确则交给apache进行回显

而此时在apache里面是没有进行过滤处理的
此时我们便需要对此过滤进行绕过:但是结合源码我们发现,tomcat获取的是第一个数据,而处理我们想要数据的apache获取的是第二个数据。因此这题的思路就是构建payload让tomcat取得第一个数据,而我们的注入的语句从第二个语句中注入

1
?id=1&id=0'union select 1,database(),3 --+


此时便可以进行暴库了


Less-30 Protection with WAF

此关为数字型注入;方法和上关一样


Less-31 FUN with WAF

此关为单括号型注入;后面的方法和上关一样