Web渗透教程:SQL宽字节注入侵入数据库,很好玩,但有点难

Web渗透中的SQL注入,我们已经讲解了N种注入方法,今天我继续帮你们实战讲解“宽字节”注入!

学习更多Web黑客渗透,可以订阅我的专栏《从新手到Web白帽黑客》!

什么是宽字节注入?

简单的理解就是:目标网址的参数使用了数据库转义,比如我们可以在参数后面添加%df,再添加单引号,由于单引号会被数据库的反斜杠"\"自动转义,而这个"\"本身的编码是%5c,这样就形成了%df%5c',而在GBK编码中,%df%5c就是繁体字""!这就会导致添加的单引号成功逃逸,从而引起SQL数据库的错误!

...

宽字节,指的就是繁体字!

宽字节注入实战

这里我们自己准备宽字节注入的php测试文件,下图!订阅《从新手到Web白帽黑客》专栏后,可以请去我们的本课专栏资料库将这个kuanzj.php文件放在win7的C:\\wamp\www\sql下,其实就是一个类似的网站页面!

...

源码如下:

...

上面的kuanzj.php文件访问地址是:

192.168.31.16/sql/kuanzj.php

通过火狐浏览如下!

...

开启Burp,拦截抓包如下:

...

发送到重发器:

...

根据源码,下面的响应直接将数据库的回显打在页面上,说明我们可以通过联合注入,那么来试试添加单引号,看是否能引起报错!

惊讶的是页面没有因为单引号报错,因为源码中使用了函数addslashes()进行了转义处理。也就是说单引号被数据库的反斜杠给自动转义了,当作一个普通字符\'完成闭合处理了,所以你看到'1\''以及用户名Dumb的正常输出!我们添加的恶意单引号并没有成功逃逸形成报错!咋办?

...

这里就需要用到宽字节注入来试试了!

id=1后面添加宽字节的格式%df,然后添加单引号,我们来看看响应!

...

竟然成功得到了报错!

原理是:%df和数据库中的转义反斜杠\(编码是%5c)合成在一起变成了繁体字"连",而后面添加的单引号就无法被数据库转义,从而成功逃逸,形成报错!

那么我们接下来可以在后面添加查询语句1=1,并在最后再添加注释符号%23(#号)完成单引号闭合,看看是否存在sql注入!

访问:

...

发现页面正常,我们再来修改下1=2:

...

发现报错,说明id=1,一定存在sql注入!

到此我们已经使用了宽字节注入找到了id参数存在sql注入,接下需要结合联合注入一起来获得数据库数据!

宽字节注入+union联合注入获取数据库

使用order by 1-99,判断当前表的字段!刚开始大一点判断。

如图,页面不正常!字段数肯定小于4!

...

于是,我们使用3判断!

如下图,发现返回页面正常,说面当前数据库表的字段一定是3个!

...

使用union联合注入的查询语句:

union select 1,2,3

但是为了让页面返回union返回的结果,我们需要将id改成不存在的-1:

192.168.31.16/sql/kuanzj.php?id=-1%df'+union+select+1,2,3%23

下面显示2:3,说明该页面中2和3的位置中间可以使用任意sql查询语句,有注入!

...

比如我们可以在2和3的位置获取数据库名!

http://192.168.31.16/sql/kuanzj.php?id=-1%df'+union+select+1,database()3%23

显示数据库是"security"!

...

继续获取第一个表的名字!

192.168.31.16/sql/kuanzj.php?id=-1%df'+union+select+1,(select+table_name+from+information_schema.tables+where+table_schema=(select+database())limit+0,1),3+%23

上面的查询使用了嵌套查询,(select+database())获取的就是'sql'。

发现第一个表名是emails!

...

获取该表名下的第二个字段:

192.168.31.16/sql/kuanzj.php?id=-1%df'+union+select+1,(select+column_name+from+information_schema.columns+where+table_schema=(select+database())+and+table_name=(select+table_name+from+information_schema.tables+where+table_schema=(select+database())limit+0,1)limit+1,1),3%23

很长,两层嵌套,去数据库security,第一张emails表中查找第二个字段,如下图,显示email_id!

...

到此,我们已经完成了使用宽字节注入+union联合注入合作的方式获取了数据库数据,有点难,一定要仔细学习,慢慢消化!加油!

小白嘿客我想说

更多网络安全、白帽嘿客kali入门到实战,可以订阅下方@小白嘿客的专栏学习!

如果想和更多网络安全爱好者一起交流学习,获得更多嘿客干货,加入下方《网络安全训练营》圈子吧!

(此处已添加圈子卡片,请到 今日头条客户端查看)

关注@小白嘿客!