DVWA實驗儲存型XSS

2021-08-17 09:16:22 字數 3143 閱讀 2900

直接輸入測試,只要檢視這個日誌就會彈出這個資訊,依法炮製試試獲取cookie

輸入,發現並未能獲取到任何資料,經過檢視發現message裡面有字數限制,則只需要進行抓包修改即可。因為是做實驗可以,把檔名什麼的修改的短一點能輸入就能獲取。那麼接下來嘗試視窗的跳轉

輸入即可跳轉

實驗證明少了http://或者雙引號都無法跳轉

原始碼

stored xss source

<?php

if( isset( $_post[ 'btnsign' ] ) )

?>

trim(string,charlist)

引數

描述string

必需。規定要檢查的字串。

charlist

可選。規定從字串中刪除哪些字元。如果被省略,則移除以下所有字元:

原始碼中只是簡單的刪除了charlist中的符號,並沒有過濾任何的標籤,當然存在xss漏洞

直接輸入,由下面顯示就可以知道,大寫後發現還是被過濾了,也就是說這次過濾是不分大小寫的

輸入輸入 大寫加雙寫都被過濾了

那麼這次肯定就是正規表示式過濾,然後捉包改變一下字數限制,居然能彈出。

分析在message中做了過濾標籤的處理,而在name中也做了但是應該只是簡單的過濾了,沒有考慮到大小寫,和雙寫問題,應該只是個簡單的replace

原始碼

stored xss source

<?php

if( isset( $_post[ 'btnsign' ] ) )

?>

strip_tags(string,allow)

引數

描述string

必需。規定要檢查的字串。

allow

可選。規定允許的標籤。這些標籤不會被刪除。

strip_tags() 函式剝去字串中的 html、xml 以及 php 的標籤。

注釋:該函式始終會剝離 html 注釋。這點無法通過 allow 引數改變。

注釋:該函式是二進位制安全的。

addslashes() 函式返回在預定義字元之前新增反斜槓的字串。

預定義字元是:

htmlspecialchars() 函式把預定義的字元轉換為 html 實體。

預定義的字元是:

用了三個函式來保證message的安全,最後的htmlspecialchars()函式就已經沒有任何辦法了,而name中只有乙個replace真是尷尬,這也提醒了如果message不行就試試name啊,還有以下的直接輸入"哈哈"發現自動多了反斜槓,多少也可以知道其中用了什麼函式,這也是乙個獲取資訊的思路啊

可以肯定message做了和medium一樣的防護了,所以不考慮message了,但是在name中不管輸入大小學還是雙寫都沒有用了,這時候就該想到黑名單過濾了,正規表示式。

直接輸入

在輸入,name中顯示了》

已經可以確定了還是正規表示式的貪心從《開始匹配alert(/xss/)

那麼可以怎麼利用呢 如上所說可以使用

原始碼

stored xss source

<?php

if( isset( $_post[ 'btnsign' ] ) )

?>

preg_replace( '/

其中/i表示不區分大小寫,所有不管用大小寫,或者雙寫都不可能繞過。

在name中輸入"哈哈",message中輸入"啊哈哈"不僅加了反斜槓,還把雙引號給轉字義了

在輸入,已經不是換標籤的問題了,特殊的符號會被直接轉義

stripslashes() 函式刪除由 addslashes() 函式新增的反斜槓。

該函式可用於清理從資料庫中或者從 html 表單中取回的資料。

並且使用了htmlspecialchars()就沒有什麼辦法了,但是如果htmlspecialchars使用不當,就可以通過編碼來繞過

最後xss中絕對不止

DVWA實驗XSS反射型(弱方法)

1.先判斷有誤xss漏洞 輸入值得注意的是輸入 沒有反應 顯示如下 惡意url為 http localhost dvwa vulnerabilities xss r name 3cscript 3ealert 28 2fxss 2f 29 3c 2fscript 3e 獲取cookie 首先在www...

DVWA 全等級XSS儲存型(Stored)

接下來我們進入正題 low 原始碼 1 if isset post btnsign 2122 相關函式介紹 trim string,charlist 函式移除字串兩側的空白字元或其他預定義字元,預定義字元包括 t n x0b r以及空格,可選引數charlist支援新增額外需要刪除的字元。mysql...

DVWA之XSS(反射型)

伺服器 low array key exists key,array 函式檢查某個陣列中是否存在指定的鍵名,如果鍵名存在則返回 true,如果鍵名不存在則返回 false。可以看出 只是判斷name是否存在是否為空,並沒有任何的過濾。漏洞利用 伺服器端 medium str replace find...