很久的一篇文章
有錯誤請指正~
目錄
xss漏洞
?level1-無過濾機(jī)制
level2-閉合標(biāo)簽
?level3-單引號閉合+添加事件
?level4-雙引號閉合+添加事件
level5-新建標(biāo)簽
?level6-大小寫繞過
?level7-雙寫繞過
level8-編碼繞過
?level9-檢測關(guān)鍵字
level10-隱藏信息
?level-11Referer信息
?level-12user-agent信息
?level3-cookie信息
level14-exif xss
level15-ng-include屬性
?level16-空格實(shí)體轉(zhuǎn)義
level17-參數(shù)拼接
level18-參數(shù)拼接
xss漏洞
?
?非持久性
get?
?持久性
post
先存儲再拿出的一個過程
?? ?
?前端直接發(fā)送給前端?
?
?level1-無過濾機(jī)制
?get型注入
傳入name的值會在頁面產(chǎn)生回顯
如果我們修改test值顯示的值也會被修改
它向服務(wù)器提交了一個name參數(shù),值為"test"
從頁面回顯看將name參數(shù)的值顯示在了頁面上,并且顯示了name參數(shù)值得字符長度
他是沒有任何防護(hù)的所以我們在test這個地方插入js語句他就會被執(zhí)行
查看源碼。
?從源碼可以看出,箭頭1將從服務(wù)器獲得的name參數(shù)的值賦值給str變量,箭頭二又將str變量直接插入到<h2> </h2>標(biāo)簽之間
因此服務(wù)器并沒有對name參數(shù)的值進(jìn)行嚴(yán)格的管理,并且這個值還是用戶可控的,所以存在反射型xss漏洞
將name參數(shù)重新賦值? ?
?
?成功?
level2-閉合標(biāo)簽
從url看還是get方式傳遞參數(shù)應(yīng)該還是反射型xss
這關(guān)加入了輸入框和搜索
?查看網(wǎng)頁源碼?
??從源碼來看,它的功能就是通過點(diǎn)擊“搜索”按鈕,將輸入框內(nèi)的內(nèi)容以get方式提交給服務(wù)器上的level2.php
經(jīng)過服務(wù)器的動態(tài)處理之后又會將參數(shù)keyword的值插入到<h2> </h2>標(biāo)簽之中以及添加到<input>標(biāo)簽中的value屬性的值內(nèi)。
嘗試使用上一關(guān)的惡意語句彈窗報錯? ?
再次查看網(wǎng)頁源碼?
?可以看到在<h2>標(biāo)簽中的惡意代碼被轉(zhuǎn)義了,盲猜在服務(wù)器端用 htmlspecialchars() 函數(shù)對 keyword 參數(shù)的值進(jìn)行了處理。
接著可以看到插入到 value 參數(shù)中的惡意代碼并沒有被轉(zhuǎn)義而是直接原樣返回的,那么就從這里入手,要想程序在這里執(zhí)行彈窗代碼,只需要將屬性的標(biāo)簽閉合就可以了,輸入 "><script>alert(1)</script>? ?
?成功彈窗?
?level3-單引號閉合+添加事件
還是先嘗試一下基本的彈窗代碼?
?沒有成功
查看一下網(wǎng)頁源碼? ?
?發(fā)現(xiàn)兩處都將<,>轉(zhuǎn)義了。猜測服務(wù)器端在這兩處都用htmlspecialchars()函數(shù)進(jìn)行了處理
瀏覽器中有一些事件可以執(zhí)行js代碼,這里可以使用onclick事件
觀察源代碼為單引號閉合,把value閉合掉構(gòu)造playload
'οnclick='javascript':alert(1)'
在提交后,沒有立刻彈出這里還需要點(diǎn)一下文本框讓事件觸發(fā)
成功通過
或者用其他事件
level3.php?keyword='οnfοcus=javascript:alert('xss') > //&submit=搜索
?
?level4-雙引號閉合+添加事件
還是嘗試彈窗?
?上方顯示位沒有什么變化但是下方搜索框中的<,>標(biāo)簽都被過濾了
查看網(wǎng)頁源碼
?對上方顯示位仍猜測是 htmlspecialchars 函數(shù)處理,下方顯示位應(yīng)該是用函數(shù)替換掉了刪除了,并且下方的閉合標(biāo)簽為雙引號。那么仍使用上關(guān)的思路,用事件觸發(fā)。事件觸發(fā)不需要使用<>
構(gòu)造payload:" οnclick='javascript:alert(1)'
?成功通過
查看文件源碼? ?
?第二個顯示位經(jīng)過兩個str_replace()函數(shù)對<>進(jìn)行了過濾
但是不夠全面從而存在xss隱患
level5-新建標(biāo)簽
同樣先按照原來方法測試彈窗?
?彈窗失敗
上方顯示位沒有什么變化,下方顯示位從<script>變?yōu)榱?lt;scr_ipt>
查看網(wǎng)頁源碼? ?
?上方顯示位應(yīng)該還是 htmlspecialchars 處理,搜索框中的 payload 可能是匹配到關(guān)鍵字進(jìn)行的替代。
用事件來試一下,閉合標(biāo)簽仍然是雙引號? ?
?彈窗同樣失敗右鍵查看網(wǎng)頁源碼?
發(fā)現(xiàn)on變成了o_n猜測后臺對on進(jìn)行了過濾替換成了o_n
這樣的話帶on的事件就不能用了
嘗試用大小寫繞過測試一下代碼
?無法繞過繞過失敗全變成了小寫
這里應(yīng)該還應(yīng)用了轉(zhuǎn)小寫的函數(shù)
此處既然無法通過 <script> 標(biāo)簽和事件來執(zhí)行js代碼的話,那么可以換一個標(biāo)簽來執(zhí)行js代碼,使用新標(biāo)簽要先閉合<input>標(biāo)簽。
構(gòu)造代碼:"><a href=javascript:alert(1)>xss</a>? ?
?點(diǎn)擊一下側(cè)面的鏈接就Ok了?
?查看一下網(wǎng)頁源碼?
?可以看到鏈接成功嵌入
?查看文件源代碼 ?
?
?確實(shí)對on和<script>進(jìn)行了過濾也用strtolower函數(shù)對大小寫進(jìn)行了過濾
?level6-大小寫繞過
?用前面機(jī)關(guān)的方式測試?
?
?
?都不可以彈窗
?發(fā)現(xiàn)script onclick href 都被過濾了。查看一下源碼
?
?從源碼來看,服務(wù)器端做的防范措施比我們想的要多
箭頭1:將get方式傳遞到服務(wù)器端的keyword參數(shù)的值賦值給str變量。
箭頭2:用字符<script去匹配我們提交的參數(shù)值,如果匹配到了就進(jìn)行替
換來破壞原來的語義導(dǎo)致無法實(shí)現(xiàn)xss。
此處能夠防范的是<script> </script>這一類的惡意代碼。
箭頭3:可以看到是用字符on去匹配參數(shù)值,如果匹配到了就進(jìn)行替換
破壞原有語義。
這里主要防范的是利用帶有on字符的事件來觸發(fā)惡意代碼
比如前面用到過的onfocus事件。
?箭頭4:可以看到是用字符src去進(jìn)行匹配
得提到<img>標(biāo)簽了。
熟悉html的人都會知道在<img>標(biāo)簽中引用圖片會用到一個屬性就是src。正常的引用圖
片就是將待引用圖片的地址賦值給src屬性。但是在js中如果src屬性的值不正常或者無法
訪問到時就可以觸發(fā)一個onerror事件來執(zhí)行js代碼。
<img>標(biāo)簽代碼:?name=<img src=111 οnerrοr=alert('xss')>
?箭頭5:用字符data進(jìn)行匹配的,同上面一樣該字符在之前的演示中也沒有
出現(xiàn)過?,F(xiàn)在一般有點(diǎn)XSS意識的管理員都懂得過濾javascript與script等關(guān)
鍵字。但是對于data的認(rèn)識卻并不多,也就很少有對它進(jìn)行過濾的。
Data在我看來就是對字符進(jìn)行編碼的一種設(shè)定,比如如果在實(shí)際情況中
javascript、script等關(guān)鍵字被過濾掉了之后,可以用如下語句進(jìn)行嘗試
data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=
這條語句和javascript:alert("xss") 或者 <script>alert("xss")</script> 的作用是一樣的。
箭頭6:可以看到是用<a> </a>標(biāo)簽中的字符href來進(jìn)行匹配了,防止的
就是通過在href屬性中插入js代碼來點(diǎn)擊執(zhí)行。
箭頭7:用htmlspecialchars()函數(shù)對變量str進(jìn)行處理后顯示到網(wǎng)頁上。
箭頭8:直接將str變量值插入到了標(biāo)簽的value屬性值中
? ?成功彈窗?
?level7-雙寫繞過
還是先用老方法測試一下?
?發(fā)現(xiàn)script被過濾了
嘗試一下大小寫繞過同樣被過濾
嘗試"οnclick='javascript:alert(1)'
?on也被過濾了大小寫同樣不行
嘗試"><a href=javascript:alert(1)>xss</a>
?
?href也被過濾了
查看后臺源碼? ?
?對參數(shù)值轉(zhuǎn)換成了小寫
然后將基本的關(guān)鍵字都刪去,但是他只執(zhí)行了一次所以可以通過雙寫繞過
有敏感字符去除所以可以雙寫繞過? ?
?成功彈窗?
level8-編碼繞過
?查看網(wǎng)頁源碼
提交的參數(shù)值一個會插入到<input>標(biāo)簽的value屬性值中,
一個會插入到下方<a>標(biāo)簽的href屬性值中。? ?
?<>被編碼了
在href屬性值中script字符也被插入了_字符破壞語義
?"也被編碼了
on也被破壞
大小寫繞過失敗
試試編碼
程序?qū)cript變?yōu)閟cr_ipt所以可以對r和i編碼(也可以將script都編碼)
將ri轉(zhuǎn)化為html實(shí)體編碼(10進(jìn)制或者16也可以使用url編碼等其他網(wǎng)頁語言)? ?
?
?彈窗成功
查看源碼? ?
?
?過濾了許多
沒有敏感字符去除不能雙寫繞過
?level9-檢測關(guān)鍵字
和上一關(guān)一樣先嘗試一下失敗?
?查看網(wǎng)頁源碼?
?有文字
看一下后臺代碼? ?
?和上一關(guān)相比多了strpos函數(shù)
此函數(shù)的意思是輸入的字符串內(nèi)必須有http://字符
我們可以給他加上然后注釋掉
//http://
?通過?
level10-隱藏信息
我們看到第十關(guān)沒有輸入框了所以我們在url欄里輸入?
?先用老方法嘗試一下?
?無法彈窗
查看一下網(wǎng)頁源碼? ?
?在源碼中有一個隱藏的表單其中含有t_link t_history t_sort這樣三個隱藏的<input>標(biāo)簽
現(xiàn)在不僅能給keyword傳參還能給三個input傳參
先嘗試一下給三個input傳參
?
?發(fā)現(xiàn)只有t_sort接受了我們傳的參數(shù)
所以我們可以從t_sort下手同時想要使用這個標(biāo)簽就需要注視點(diǎn)后面原有的hidden類型
把他改為其他類型button或者type
因?yàn)檫^濾了<>所以我們用onclick事件
?成功
查看后臺源碼
?觀察代碼,如我們料想的那樣,str 被 htmlspecialchars 過濾了,也只有 t_sort 接受參數(shù)值,對 t_sort 的過濾只有左右尖括號,所以注入顯得很容易
?level-11Referer信息
查看網(wǎng)頁源碼?
?可以發(fā)現(xiàn)這關(guān)隱藏了四個輸入框然后第四個隱藏輸入框t_ref已經(jīng)有值存在還可以看出是第十關(guān)我們輸入的playload
嘗試?yán)戏椒??
?? ?
?
?我們輸入的代碼應(yīng)該被htmlspecialchars函數(shù)轉(zhuǎn)義了
我們測試一下哪個輸入框能傳參 ?
?? ?
?可以看到只有t_sort被賦值成功同時t_ref的值沒有了嘗試對t_sort的屬性進(jìn)行閉合?
?
?發(fā)現(xiàn)" 和>都被轉(zhuǎn)義函數(shù)了
猜測還是htmlspecialchars函數(shù)過濾.雙引號不能用就不能閉合標(biāo)簽去創(chuàng)造自己的事件。
前面記得t_ref是第十關(guān)palyload網(wǎng)址,而ref又可能是http頭中的referer屬性我們可以嘗試抓包注入
?修改referer屬性傳入值為1放包查看源碼?
?t_ref的值變?yōu)榱?,那我們就可以從這入手
嘗試閉合value創(chuàng)造自己的事件放包
?
?彈窗成功
查看后臺源碼? ?
?可以看到 keyword 進(jìn)行了 htmlspecialchars 處理,t_sort 參數(shù)也被 htmlspecialchars 處理再次賦給value,接受 HTTP_Referer 頭部參數(shù)進(jìn)行了除尖括號處理,只要沒有特殊字符轉(zhuǎn)義,沒有雙引號去除,那么這個標(biāo)簽的屬性就可能是危險的。
?level-12user-agent信息
?
?四個隱藏框
t_ua聯(lián)想到http請求頭部的user-agent應(yīng)該與上一題是一個類型
嘗試抓包修改
?
?放包?
?成功彈窗
查看后臺源碼
跟上一關(guān)一樣
想讓我們了解不同的注入位置
?level3-cookie信息
?
?還是四個隱藏框
t_cook可能是cookie
抓包仍然是相同的方式
?給user賦cookie值構(gòu)造payload(試試test)?
?查看后臺源碼?
?可以看到設(shè)置了一個cookie,user : call me maybe?,keyword 和 t_sort 都經(jīng)過 htmlspecialchars 函數(shù)處理,cookie 只有標(biāo)簽去除,沒有其他過濾,一樣的注入,同上。
?
level14-exif xss
?
?查看源碼通過iframe標(biāo)簽引入了一個網(wǎng)址但是打不開
我們可以自己寫一個簡單的放在 本地服務(wù)器上引用對應(yīng)的url就行
同時需要打開php_exif開關(guān)
level15-ng-include屬性
?查看源碼
看到src的參數(shù)在這兒顯示了
還有ng-include
ng-include的用法:
ng-include 指令用于包含外部的 HTML文件。
包含的內(nèi)容將作為指定元素的子節(jié)點(diǎn)。
ng-include 屬性的值可以是一個表達(dá)式,返回一個文件名。
默認(rèn)情況下,包含的文件需要包含在同一個域名下。
值得注意的是:
如果單純指定地址,必須要加引號
加載外部html,script標(biāo)簽中的內(nèi)容不執(zhí)行
加載外部html中含有style標(biāo)簽樣式可以識別
可以包含同一域名的 html 文件,那也就是說可以包含之前做過的有xss漏洞的文件,但是不能執(zhí)行script中的代碼.
?src='level1.php?name=<img src=1 οnerrοr=alert(1)>'??? ?
?
?level16-空格實(shí)體轉(zhuǎn)義
老方法先測試?
?發(fā)現(xiàn)script和/被替換成了 ;(空白符)
嘗試一下不帶script和/的payload
?查看源碼發(fā)現(xiàn)空格也被替換了可以使用其他方法代替空格
在html換行可以代替空格
使用url編碼將回車轉(zhuǎn)換為%0d或者換行符%0a替代
<img%0dsrc=1%0dοnerrοr=alert(1)>
?成功彈窗
查看后臺源碼
?對關(guān)鍵字進(jìn)行了空白實(shí)體代替?
level17-參數(shù)拼接
?這題圖也沒有點(diǎn)連接直接進(jìn)下一關(guān)了
查看一下網(wǎng)頁源碼? ?
?從url框內(nèi)看到是通過arg01和arg02兩個參數(shù)進(jìn)行傳參傳參之后對兩個參數(shù)進(jìn)行了拼接可以直接使用事件來觸發(fā)
<embed>標(biāo)簽就是引入一個swf文件到瀏覽器端,并且它的src屬性值沒有添加引號,所以不用閉合
?arg01= onmouseover&arg02=alert(1)
?由于圖片加載不出來無法點(diǎn)擊所以沒辦法使用onclick事件
onmouseover:(表示當(dāng)鼠標(biāo)移動到該標(biāo)簽上時就會觸發(fā)執(zhí)行某項動作)。文章來源:http://www.zghlxwxcb.cn/news/detail-735569.html
level18-參數(shù)拼接
與上一關(guān)一致?文章來源地址http://www.zghlxwxcb.cn/news/detail-735569.html
到了這里,關(guān)于xss-labs初學(xué)者通關(guān)詳解1-18的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!