dvwa-XSS(DOM)超詳細(xì)

XSS 簡(jiǎn)介

XSS(Cross Site Script)畦浓,全稱跨站腳本攻擊检疫,為了與 CSS(Cascading Style Sheet) 有所區(qū)別屎媳,所以在安全領(lǐng)域稱為 XSS风响。
XSS 攻擊状勤,通常指黑客通過(guò) HTML 注入 篡改網(wǎng)頁(yè)荧降,插入惡意腳本薄扁,從而在用戶瀏覽網(wǎng)頁(yè)時(shí)脱盲,控制用戶瀏覽器的一種攻擊行為。

DOM—based XSS漏洞的產(chǎn)生

DOM—based XSS漏洞是基于文檔對(duì)象模型Document Objeet Model,DOM)的一種漏洞尚卫。DOM是一個(gè)與平臺(tái)、編程語(yǔ)言無(wú)關(guān)的接口,它允許程序或腳本動(dòng)態(tài)地訪問(wèn)和更新文檔內(nèi)容、結(jié)構(gòu)和樣式撒轮,處理后的結(jié)果能夠成為顯示頁(yè)面的一部分题山。DOM中有很多對(duì)象故痊,其中一些是用戶可以操縱的慨菱,如uRI闪彼,location畏腕,refelTer等描馅“蚶海客戶端的腳本程序可以通過(guò)DOM動(dòng)態(tài)地檢查和修改頁(yè)面內(nèi)容,它不依賴于提交數(shù)據(jù)到服務(wù)器端刁绒,而從客戶端獲得DOM中的數(shù)據(jù)在本地執(zhí)行速蕊,如果DOM中的數(shù)據(jù)沒有經(jīng)過(guò)嚴(yán)格確認(rèn)隅肥,就會(huì)產(chǎn)生DOM—based XSS漏洞。
DOM簡(jiǎn)介
xss DOM
可能觸發(fā)DOM型XSS的屬性:

document.referer屬性

window.name屬性

location屬性

innerHTML屬性

documen.write屬性

1 查看服務(wù)端代碼

image.png

什么也沒有

查看頁(yè)面源代碼

image.png

相關(guān)屬性方法解釋

1 document 和 windows 對(duì)象

document表示的是一個(gè)文檔對(duì)象绿语,window表示的是一個(gè)窗口對(duì)象秃症,一個(gè)窗口下可以有多個(gè)文檔對(duì)象候址。

所以一個(gè)窗口下只有一個(gè)window.location.href,但是可能有多個(gè)document.URL种柑、document.location.href

window 對(duì)象
  它是一個(gè)頂層對(duì)象,而不是另一個(gè)對(duì)象的屬性即瀏覽器的窗口岗仑。

document 對(duì)象
該對(duì)象是window和frames對(duì)象的一個(gè)屬性,是顯示于窗口或框架內(nèi)的一個(gè)文檔。

document 只是屬于window 的一個(gè)子對(duì)像聚请。

window.location 包含 href 屬性荠雕,直接取值賦值時(shí)相當(dāng)于 window.location.href

window.location.href 當(dāng)前頁(yè)面完整 URL

document.location 包含 href 屬性,直接取值賦值時(shí)相當(dāng)于 document.location.href

document.location.href 當(dāng)前頁(yè)面完整 URL

document.href 沒有這個(gè)屬性

document.URL 取值時(shí)等價(jià)于 window.location.href 或 document.location.href良漱。在某些瀏覽器中通過(guò)對(duì) document.URL 賦值來(lái)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)舞虱,但某些瀏覽器中不行欢际。

2 indexOf()方法

定義和用法
indexOf() 方法可返回某個(gè)指定的字符串值在字符串中首次出現(xiàn)的位置母市。

indexOf(searchvalue,fromindex)

參數(shù) 描述
searchvalue 必需。規(guī)定需檢索的字符串值损趋。
fromindex 可選的整數(shù)參數(shù)患久。規(guī)定在字符串中開始檢索的位置。它的合法取值是 0 到 stringObject.length - 1浑槽。如省略該參數(shù)蒋失,則將從字符串的首字符開始檢索。

注釋:indexOf() 方法對(duì)大小寫敏感桐玻!
注釋:如果要檢索的字符串值沒有出現(xiàn)篙挽,則該方法返回 -1

2 substring() 方法

substring() 方法用于提取字符串中介于兩個(gè)指定下標(biāo)之間的字符。
substring(start,stop)

參數(shù) 描述
start 必需镊靴。 一個(gè)非負(fù)的整數(shù)铣卡,規(guī)定要提取的子串的第一個(gè)字符在 stringObject 中的位置。
stop 可選偏竟。 一個(gè)非負(fù)的整數(shù)煮落,比要提取的子串的最后一個(gè)字符在 stringObject 中的位置多 1。
如果省略該參數(shù)踊谋,那么返回的子串會(huì)一直到字符串的結(jié)尾蝉仇。
decodeURI() 函數(shù)可對(duì) encodeURI() 函數(shù)編碼過(guò)的 URI 進(jìn)行解碼

document.write

document.write詳解
document.write是JavaScript中對(duì)document.open所開啟的文檔流(document stream操作的API方法,它能夠直接在文檔流中寫入字符串殖蚕,一旦文檔流已經(jīng)關(guān)閉轿衔,那document.write就會(huì)重新利用document.open打開新的文檔流并寫入,此時(shí)原來(lái)的文檔流會(huì)被清空睦疫,已渲染好的頁(yè)面就會(huì)被清除害驹,瀏覽器將重新構(gòu)建DOM并渲染新的頁(yè)面

解釋script 代碼
  if (document.location.href.indexOf("default=") >= 0)   #判斷  "default=" 是否存在
  var lang = document.location.href.substring(document.location.href.indexOf("default=")+8) 
 # 取出 default 的值  并 賦值給變量lang

document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");
寫入<option value='"lang"'>"decodeURL(lang)</option>
image.png

所以我們插入的 javascript 代碼可以在 decodeURL(lang) 被執(zhí)行

構(gòu)造攻擊語(yǔ)句

 http://127.0.0.1/dvwa-master/vulnerabilities/xss_d/?default=English<script>alert(/xss/);</script>

寫入頁(yè)面的效果是這樣的

    <option value='變量lang 的值'>English<script>alert(/xss/);</script></option>
image.png
image.png

Medium

查看服務(wù)端源代碼

image.png

array_key_exists() 函數(shù)檢查某個(gè)數(shù)組中是否存在指定的鍵名,如果鍵名存在則返回 true笼痛,如果鍵名不存在則返回 false裙秋。
提示:如果指定數(shù)組的時(shí)候省略了鍵名琅拌,將會(huì)生成從 0 開始并以 1 遞增的整數(shù)鍵名
array_key_exists(key,array)

參數(shù) 描述
key 必需 規(guī)定鍵名。
array 必需摘刑。規(guī)定數(shù)組

stripos() 函數(shù)查找字符串在另一字符串中第一次出現(xiàn)的位置(不區(qū)分大小寫)
stripos(string,find,start)

參數(shù) 描述
string 必需 規(guī)定被搜索的字符串进宝。
find 必需 規(guī)定要查找的字符。
start 可選 規(guī)定開始搜索的位置枷恕。
返回值: 返回字符串在另一字符串中第一次出現(xiàn)的位置党晋,如果沒有找到字符串則返回 FALSE。注釋:字符串位置從 0 開始徐块,不是從 1 開始未玻。

header() 函數(shù)向客戶端發(fā)送原始的 HTTP 報(bào)頭

header(string,replace,http_response_code)

參數(shù) 描述
string 必需 規(guī)定要發(fā)送的報(bào)頭字符串。
replace 可選 指示該報(bào)頭是否替換之前的報(bào)頭胡控,或添加第二個(gè)報(bào)頭扳剿。
默認(rèn)是 true(替換)。false(允許相同類型的多個(gè)報(bào)頭)昼激。
http_response_code可選 把 HTTP 響應(yīng)代碼強(qiáng)制為指定的值庇绽。(PHP 4 以及更高版本可用)

由服務(wù)端代碼 可知 Medium 級(jí)別過(guò)濾了 <script>

構(gòu)造攻擊語(yǔ)句

    http://127.0.0.1/dvwa-master/vulnerabilities/xss_d/?default=English</option></select><img src=1 onerror=alert(/xss/)>

寫入頁(yè)面的效果是這樣的

 <option value=''> English</option></select><img src=1 onerror=alert(/xss/)></option>

首先閉合了<option>標(biāo)簽 和 <select>標(biāo)簽
利用 img標(biāo)簽的onerror事件
javascript,img標(biāo)簽支持onerror 事件橙困,在加載圖像的過(guò)程中如果發(fā)生了錯(cuò)誤瞧掺,就會(huì)觸發(fā)onerror事件
執(zhí)行 JavaScript


image.png
image.png

high

查看服務(wù)端源代碼

image.png

白名單 只允許 傳的 default值 為 French English German Spanish 其中一個(gè)

構(gòu)造攻擊語(yǔ)句

    http://www.dvwa.com/vulnerabilities/xss_d/?default=English #<script>alert(/xss/)</script>

寫入頁(yè)面的效果是這樣的

 <option value=''>English #<script>alert(/xss/)</script></option>

由于 form表單提交的數(shù)據(jù) 想經(jīng)過(guò)JS 過(guò)濾 所以注釋部分的javascript 代碼 不會(huì)被傳到服務(wù)器端(也就符合了白名單的要求)

我們寫一個(gè)html 驗(yàn)證一下<option value=''>English #<script>alert(/xss/)</script></option>是否可行
image.png
image.png
image.png

image.png

impossible

服務(wù)端源代碼

image.png

不需要做任何事,在客戶端處理

網(wǎng)頁(yè)源代碼變了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凡傅,一起剝皮案震驚了整個(gè)濱河市辟狈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夏跷,老刑警劉巖哼转,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拓春,居然都是意外死亡释簿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門硼莽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)庶溶,“玉大人,你說(shuō)我怎么就攤上這事懂鸵∑荩” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵匆光,是天一觀的道長(zhǎng)套像。 經(jīng)常有香客問(wèn)我,道長(zhǎng)终息,這世上最難降的妖魔是什么夺巩? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任贞让,我火速辦了婚禮,結(jié)果婚禮上柳譬,老公的妹妹穿的比我還像新娘喳张。我一直安慰自己,他們只是感情好美澳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布销部。 她就那樣靜靜地躺著,像睡著了一般制跟。 火紅的嫁衣襯著肌膚如雪舅桩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天雨膨,我揣著相機(jī)與錄音擂涛,去河邊找鬼。 笑死哥放,一個(gè)胖子當(dāng)著我的面吹牛歼指,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甥雕,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼胀茵!你這毒婦竟也來(lái)了社露?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤琼娘,失蹤者是張志新(化名)和其女友劉穎峭弟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脱拼,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瞒瘸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了熄浓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片情臭。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赌蔑,靈堂內(nèi)的尸體忽然破棺而出俯在,到底是詐尸還是另有隱情,我是刑警寧澤娃惯,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布跷乐,位于F島的核電站,受9級(jí)特大地震影響趾浅,放射性物質(zhì)發(fā)生泄漏愕提。R本人自食惡果不足惜馒稍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浅侨。 院中可真熱鬧筷黔,春花似錦、人聲如沸仗颈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挨决。三九已至请祖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脖祈,已是汗流浹背肆捕。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盖高,地道東北人慎陵。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像喻奥,于是被迫代替她去往敵國(guó)和親席纽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345