决心按部就班、由浅入深地去剖析下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三种命令对网页的反应进行总结和反馈。



从输入命令id=1’,导致网页出现异常,可以看出id的值类型为数字型,而非字符型;其次从输入正确命令id=1 and 1=1网页正常显示,而输入命令id=1 and 1=2 网页显示异常,表明网页会受到payload设置的影响,因此此处可以作为注入点。
其次,测试查询所对应的表的列数(运用order by命令)。


对比上图可知,当order by后数字设置为4时页面显示正常,而设置为5时页面显示异常,表明数据库所在表共4列。
第三步,测试页面是否回显(运用 union 联合查询语句)。

在payload中,设置id=-1会使原本页面由于id为负数出现显示异常,而后union select的正确表达会显示出相应页面。在之前SQL手工注入漏洞(MySQL数据库)(放上链接:(52条消息) 墨者学院-SQL手工注入漏洞测试(MySQL数据库)_Start&&Over的博客-CSDN博客)题目中,页面的标题和正文会出现不同的数字,通过出现的数字可以指示我们查询语句中可以让页面回显的位置,从而设置语句依次对数据库、表、列甚至列值进行爆破。而此题union的联合查询只会出现正常显示页面,没有存在任何提示,因此不具有回显优势。那么这道题就要依据页面显示是否异常来对数据库、表、列甚至列值进行猜测和爆破。
第四步,确定了题目所提供的环境,依次对数据库、表、列甚至列值进行猜测和爆破。
(1)对数据库名称的长度和具体名进行爆破。(运用length语句)
根据之前的测试,我们可以得知,当payload命令正确时,页面显示正常,而输入错误命令,将会使得页面变成空白,因此,我们先对比一下两个页面源码差距。


依据两种情况的源码,找到一处两者的不同:当命令执行正确时,会出现“关于平台停机维护的通知”这些字符。通过不同点的发现和标注进行数据库长度和具体名的爆破。
对于数据库长度的爆破依据网页对于id=1 and length(database())=?(依次测试1,2,3……)命令的反应,直至出现“关于平台停机维护的通知”标注字符,表明payload为正确输入,因此推断出数据库名称的长度。

同理,对于数据库具体名称的爆破依据网页对于id=1 and substr(database(),①,1)=’②’命令的反应。其中①处表示从数据库名称的第几位开始计算,设置大小范围为从1直至数据库名称长度+1;②处应依次设置为各种字符,在代码设置中用ASCII码的1-128进行替代。

代码执行结果如下:

(2)对数据表的个数,每个表名称的长度和具体名爆破。
跟数据库长度和具体名爆破的原理相似,先上代码,后做判断语句陈列。

数据表的个数: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)对数据表中列数、列名长度和列名进行爆破。
跟数据库长度和具体名爆破的原理相似,先上代码,后做判断语句陈列。

列数: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进行替代。
代码执行结果如下:


(4)对列值进行爆破。
跟数据库长度和具体名爆破的原理相似,先上代码(以name列的列值爆破为例),后做判断语句陈列。


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加密值,需要进行解密,解密结果如下:


最后依次使用获得的两组数据进行尝试登录,发现账号mozhe,密码780930可以登录成功,并在登录页面发现需要的key值。

第二种方法(sqlmap自动):
(ps:由于之前将手动+脚本方法获得的key值进行提交,因此需要重启靶场,导致sqlmap的端口号会有变化,但不会对问题解决产生影响!!!)
(1)开门见山,直接对存在注入点的url进行数据库爆破,同样发现名为stormgroup的数据库。

(2)利用sqlmap对stormgroup数据库中的数据表进行爆破,发现名为member的数据表。

(3)对数据表为member的列名进行爆破,发现名为name和password的列。

(4)对name和password列的列值进行爆破,发现两组数据,同样将password值进行md5解密后进行尝试登录,获得题目要求的key值。

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

  1. 墨者学院-SQL注入漏洞测试(报错盲注)

    继续攻克SQL注入类题目啦!!!今天的题目环境提示比较明显,也是比较常见的一种SQL注入漏洞类型,继续储备知识,撸起袖子加油干!!! 附上题目链接:https://www.mozhe.cn/bug/d ...

  2. 【SQL注入-05】布尔盲注案例

    目录 1 概述 2 操作环境 3 操作具体步骤 3.1 判断是否存在注入点及注入的类型 3.2 测试数据库库名长度 3.3 逐个测试数据库库名的字符 3.4 测试该数据库中所有表名 3.5 测试use ...

  3. 【SQL注入14】布尔盲注的半自动化实现(基于BurpSuite工具和sqli-labs-less8靶机平台)

    目录 1 概述 2 实验简介 2.1 实验平台 2.2 实验目标 3 实验过程 3.1 判断注入点及注入类型 3.2 爆库名(踩坑) 3.3 爆库名(成功) 3.4 爆表名 3.5 爆字段名 3.6 ...

  4. SQL注入漏洞测试(参数加密)

    SQL注入漏洞测试(参数加密) <此WEB业务环境对参数进行了AES加密,为了防止参数产生SQL注入,也是防止SQL注入产生的一种方法,但是这种方式就安全了么?1.掌握信息泄露的方式:2.了解A ...

  5. 渣渣白学习渗透之路(墨者学院sql注入之旅)

    渣渣白学习渗透之路 说明:1.  未经授权的渗透测试都是违法的! 2.  文章用红色字体编写的部分是关键部分(认真看)!!! 3.  文章用黑色字体编写的部分是渣渣白内心独白,无关紧0! 4.  文章 ...

  6. phpcms set inc.php,phpcms V9 sql注入漏洞测试

    phpcms V9 版本存在SQL注入漏洞,漏洞复现如下 0x00 以GET方式访问如下链接,得到返回包里mvbpqw_siteid值: http://127.0.0.1/index.php?m=wa ...

  7. SQL注入--报错和盲注

    目录 报错注入 floor函数报错注入 extractvalue()函数报错注入 updatexml()函数报错注入 盲注 布尔盲注 时间盲注 报错注入 文章内容篇幅较长,请认真研读 回顾之前的文章( ...

  8. SQL注入-不再显示的盲注

    Blind SQL(盲注) 是注入攻击的其中一种,向数据库发送true或false这样的问题,并根据应用程序返回的信息判断结果,这种攻击的出现是因为应用程序配置为只显示常规错误,但并没有解决SQl注入 ...

  9. 墨者学院mysql注入_【墨者学院】:SQL注入漏洞测试(delete注入)

    0x00.题目描述: 背景介绍 最近有人匿名给工程师留言说,感谢他的辛勤付出,把墨者学院建设的这么好,不料激发了工程师对留言板的一波操作,轻松查到了这个人的身份. 实训目标 1.熟练掌握留言板的工作原 ...

最新文章

  1. 转移指令的原理03 - 零基础入门学习汇编语言45
  2. Mysql 常用函数(19)- mod 函数
  3. linux之查看文件大小和磁盘大小总结
  4. 双路由器双小型交换机组建公司网络,2个公网IP上网案例(转载)
  5. Python中的super()简单用法
  6. mysql锁在粒度上分为_mysql锁的简单理解
  7. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines
  8. 凸优化第二章凸集 2.1 仿射集合和凸集
  9. 九大内置对象和servlet生命周期
  10. HMI 排行中有哪些触摸屏品牌
  11. python下载pandas库_Python中的pandas库
  12. 怎么录制音频,什么录音软件好用?
  13. 如何使用计算机对文件修改密码,win7系统给共享文件夹设置密码的操作办法
  14. 「Hortic Res」APETALA2的同源物CaFFN可调节辣椒的开花时间
  15. Python实现图像的全景拼接,这不比ps牛逼
  16. 整理:状态机的C语言编程
  17. 来了!Python官方文档中文版
  18. biti's blog
  19. H5 前端模板 JS 用法
  20. UVA818解题报告

热门文章

  1. yii2.0 中文手册 php,Yii2.0 高级版开发指南
  2. APP自动化测试-安卓性能测试Monkey
  3. 大气采样器的结构介绍
  4. 我来说说百度的问题吧。。别和谐就行。
  5. 采闲云一朵,入墨修心!
  6. CC2541之发现服务、特征值及读取特征值中存储值的详细过程
  7. java-net-php-python-jsp家具进销存管理系统1计算机毕业设计程序
  8. 多频外差法(三频四步相移)
  9. java pns 向 IOS 推送消息错误记录
  10. 2015淘宝最新排名新规则