1. 程式人生 > >dvwa學習筆記之xss

dvwa學習筆記之xss

ack 寫入 decode php 失效 查看源碼 special xss 但是

反射型
Low
直接輸入<script>alert(/xss/)</script>
就可以發現彈窗
Medium
檢查源碼 可以看到網站對輸入字符進行了過濾,嘗試雙寫繞過,構造
<scr<script>ipt>alert(/xss/)</script> 輸入進行嘗試,彈窗xss說明ok!另一種方法就是大小寫混寫 構造一個 <Script>alert(/xss/)</Script>,成功,說明攻擊成功!
High
先輸入<Script>alert(/xss/)</Script>發現不管用了,然後打開源碼,發現網站利用函數

$name = preg_replace( ‘/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i‘, ‘‘, $_GET[ ‘name‘ ] );
過濾了字符,使得上面兩種方法失效了。雖然無法使用標簽註入XSS代碼,但是可以通過img、body等標簽的事件或者iframe等標簽的src註入惡意的js代碼。下面構造語句
<img src="" onerror="alert(‘XSS‘)"> 成功。
Impossible
核心代碼: $name = htmlspecialchars( $_GET[ ‘name‘ ] );


總結: htmlspecialchars 函數可以有效防止反射性xss

存儲型
Low
查看源碼,可以看出並沒有防範xss的措施,直接在message框裏面寫入<script>alert(/xss/)</script>,成功執行。
Medium
strip_tags() 函數剝去字符串中的 HTML、XML 以及 PHP 的標簽,但允許使用標簽。
addslashes() 函數返回在預定義字符(單引號、雙引號、反斜杠、NULL)之前添加反斜杠的字符串。
可以看到,由於對message參數使用了htmlspecialchars函數進行編碼,因此無法再通過message參數註入XSS代碼,但是對於name參數,只是簡單過濾了字符串,仍然存在存儲型的XSS。打開burp抓包,1.把name改成<sc<script>ript>alert(/xss/)</script>。Go 成功!2.大小寫混淆繞過,改成<Script>alert(/xss/)</script>
High
打開源碼可以看到,這裏使用正則表達式過濾了標簽,但是卻忽略了img、iframe等其它危險的標簽,因此name參數依舊存在存儲型XSS。老辦法,抓包改name參數為

<img src=1 onerror=alert(1)> 或者<img src="" onerror="alert(‘XSS‘)"> 成功彈窗
Impossible

打開源碼,可以看到,通過使用htmlspecialchars函數,解決了XSS,但是要註意的是,如果htmlspecialchars函數使用不當,攻擊者就可以通過編碼的方式繞過函數進行XSS註入,尤其是DOM型的XSS。
想法:
htmlspecialchars() 函數把預定義的字符轉換為 HTML 實體。
預定義的字符是:
• & (和號)成為 &
• " (雙引號)成為 "
• ‘ (單引號)成為 ‘
• < (小於)成為 <
• > (大於)成為 >
提示:如需把特殊的 HTML 實體轉換回字符,請使用 htmlspecialchars_decode() 函數。
那麽如果在有轉義的地方,可不可以用decode這個函數轉回字符,可以繼續攻擊呢?歡迎交流!
DOM型xss
low

default=<script>alert(‘xss‘)</script>彈窗

Medium

></option></select><img src=1 onerror=alert(‘hack‘)>

High

URL中#號之後的內容,不會被提交到服務器,可以直接與瀏覽器進行交互
default=English#<script>alert(1)</script>

dvwa學習筆記之xss