DVWA-XSS (Stored)(儲存型跨站指令碼攻擊)
本系列文集:DVWA學習筆記
儲存型XSS,持久化,程式碼是儲存在伺服器中的,如在個人資訊或發表文章等地方,加入程式碼,如果沒有過濾或過濾不嚴,那麼這些程式碼將儲存到伺服器中,使用者訪問該頁面的時候觸發程式碼執行。這種XSS比較危險,容易造成蠕蟲,盜竊cookie等。
Low:

clipboard.png
相關函式介紹:
trim(string,charlist) 函式移除字串兩側的空白字元或其他預定義字元,預定義字元包括\0、\t、\n、\x0B、\r以及空格,可選引數charlist支援新增額外需要刪除的字元。 mysqli_real_escape_string(string,connection) 函式會對字串中的特殊符號(\x00,\n,\r,\,',",\x1a)進行轉義。 stripslashes(string) 函式刪除字串中的反斜槓。
分析:
可以看到,對輸入並沒有做XSS方面的過濾與檢查,且儲存在資料庫中,因此這裡存在明顯的儲存型XSS漏洞。
Exploit
message欄的利用:
輸入 <script>alert(/name/)</script>
,成功彈框:

clipboard (1).png
name欄的利用:
發現前端html中對name有字數長度限制:
Burpsuite 抓包改為 <script>alert(/name/)</script>

clipboard (2).png
點選Bp中Forward 後,成功彈窗:

clipboard (3).png
Medium:
clipboard (4).png

clipboard (4).png
strip_tags()函式剝去字串中的HTML、XML以及PHP的標籤,但允許使用<b>標籤。 addslashes()函式返回在預定義字元(單引號、雙引號、反斜槓、NULL)之前新增反斜槓的字串。
分析:
可以看到,由於對message引數使用了htmlspecialchars函式進行編碼,因此無法再通過message引數注入XSS程式碼,但是對於name引數,只是簡單過濾了<script>字串,仍然存在儲存型的XSS。
Exploit
1.雙寫繞過
Burpsuite抓包改name引數為: <sc<script>ript>alert(/name/)</script>

clipboard (5).png
2.大小寫混淆繞過
Burpsuite抓包改name引數為: <ScRipt>alert(/name/);</ScRipt>

clipboard (6).png
3.使用非 script 標籤的 xss payload:
eg:img標籤:
Burpsuite抓包改name引數為: <img src=1 onerror=alert(/name/)>

clipboard (7).png
其他標籤和利用還有很多很多….
以上抓包修改資料Forward後,均成功彈窗:

clipboard (8).png
High:

clipboard (9).png
分析:
這裡使用正則表示式過濾了<script>標籤,但是卻忽略了img、iframe等其它危險的標籤,因此name引數依舊存在儲存型XSS。
Exploit
Burpsuite抓包改name引數為 <img src=1 onerror=alert(/name/)>

clipboard (10).png
Forward後,成功彈窗:

clipboard (11).png