1. 程式人生 > >安全運維3.1—跨站指令碼漏洞(XSS)之反射型XSS(get)漏洞

安全運維3.1—跨站指令碼漏洞(XSS)之反射型XSS(get)漏洞

概述

20190927156957034640622.png

攻擊流程

20190927156957042962366.png

XSS漏洞常見型別

危害級別:儲存型>反射型>DOM型

  • 反射型:互動的資料一般不會被存在資料庫裡面,一次性,所見即所得,一般出現在查詢類頁面;
  • 儲存型:互動的資料會被存在資料庫裡面,永久性儲存,一般出現在留言板、註冊等頁面;
  • DOM型:不與後臺伺服器產生資料互動,是一種通過DOM操作前段程式碼輸出的時候產生的問題,一次性,也屬於反射型。

XSS漏洞形成的原因

20190927156957162869368.png

形成XSS漏洞的主要原因是程式對輸入和輸出的控制不夠嚴格,導致"精心構造"的指令碼輸入後,在輸到前端時被瀏覽器當做有效程式碼解析執行,從而產生危害。

實驗

跨站指令碼漏洞測試流程

  • 在目標站點上找到輸入點,比如查詢介面、留言板等;
  • 輸入一組"特殊字元+唯一標識字元",點選提交後,檢視返回的原始碼,是否有做對應的處理;
  • 通過搜尋定位大盤唯一字元,結合唯一字元前後語法確認是否可以構造執行js的條件(構造閉合);
  • 提交構造的指令碼程式碼(以及各種繞過姿勢),看是否可以成功執行,如果成功執行則說明存在XSS漏洞。

Tips:

  • 一般查詢介面容易出現反射型XSS,留言板容易出現儲存型XSS;
  • 由於後臺可能存在過濾措施,構造的script可能會被過濾掉,而無法生效,或者環境限制了執行(瀏覽器);
  • 通過變化不同的script,嘗試繞過後臺過濾機制。

實驗1—反射型XSS(get)漏洞

從一個彈窗開始認識XSS漏洞!

環境:Firefox、pikachu

測試工具:Firefox+瀏覽器開發者工具

進入到pikachu頁面—反射型xss(get):

2019092715695759782484.png

提交,檢視返回結果:

20190927156957611930887.png

然後,分析原始碼(通過關鍵詞找到返回結果輸出位置):

20190927156957618870337.png

嘗試在該位置輸入js程式碼:

20190927156957639580382.png

上面發現,文字框對輸入內容加了長度限制,前端程式碼加的限制可解除,解除限制:

20190927156957661299887.png

使用開發者工具(F12),修改 maxlength=20000 ,這樣文字框中就可以輸入更多字元:

20190927156957677832405.png

提交:

20190927156957681195146.png

說明,剛剛輸入的程式碼直接執行了,即此處存在XSS(反射型)漏洞!

檢視此時的原始碼:

20190927156957694257258.png

重新整理頁面,因為是反射型XSS漏洞,內容不會被儲存。

反射型XSS漏洞利用場景

url分析:

http://127.0.0.1/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&submit=submit

通過該漏洞,可以發給伺服器執行任何js程式碼!

GET和POST典型區別

GET是以url方式提交資料;

POST是以表單方式在請求體裡面提交;

GET方式的XSS漏洞更加容易被利用,一般利用的方式是將帶有跨站指令碼的url偽裝後傳送給目標,而POST方式由於是以表單方式提交,無法直接使用url方式進行攻