SQL-盲注&布尔&报错&延时
知识总结
查询方式增删改查这四种特性,有部分是不需要进行数据取出和显示的,所以此类注入基本上需要采用盲注才能正常得到结果(黑盒测试可以根据功能判断注入查询方式)
查询方式增删改查四种特性决定应用功能点(会员注册,删除文章,修改文章等)
案例讲解
熊海cms——insert功能——报错盲注
报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。
报错注入的前提就是页面上可以没有回显点,但是必须有sql语句执行错误的信息
想要sql语句有执行错误的信息,网站就得要使用(mysql_error())函数
mysql_error() 函数 #返回上一个 MySQL 操作产生的文本错误信息
打开熊海cms源码查看功能点,发现使用了mysql_error() 函数
就可以在该功能点测试报错注入
输入报错注入payload:' or updatexml(1,concat(0x7e,(version())),0) or '
点击提交,成功注入出数据库版本
熊海cms——upload功能——报错盲注
源码搜索upload功能点,发现一个更新功能点使用了mysql_error() 函数
网站打开功能点测试
输入注入payload:and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)
成功爆出数据库
kkcms——delete功能——延时盲注
延时注入是通过页面的响应时间判断条件是否成立,如:如果条件成立则页面10秒后在响应,条件不成立则正常响应。
代码审计得知功能点接收了用户的数据并且在数据库执行删除操作,没有数据回显,打开功能点
输入sql延时盲注payload:or if(1=1,sleep(5),0),页面等待五秒才响应。说明存在延时注入
猜解数据库名
我的数据库名是:kkcms
输入:or if(left(database(),1)='k',sleep(5),0) payload意思:如果数据库名第一位是k就延时五秒响应。结果页面立马就响应了,明明数据库第一位就是k。
再次代码审计发现【'】单引号被转义了
于是我们使用ord参数绕过转义
ord(x)=97 #判断x的ascii码是否等于97
使用CaptfEncoder加解密工具获取k的10进制ascii码值
输入payload:or if(ord(left(database(),1))=107,sleep(5),0) 页面果然五秒后才响应,依次猜解数据库名称