web安全-XSS攻击(一)
XSS攻擊和SQL注入都是web安全中很常見的攻擊方式,最近先學(xué)習(xí)XSS攻擊,待到XSS學(xué)完后再去學(xué)習(xí)SQL注入,哇(感慨一番),這些知識真的太有趣了。
在開始之前,有必要了解一下概念
1、XSS跨站腳本攻擊定義
跨站腳本攻擊是指攻擊者利用網(wǎng)站程序?qū)τ脩糨斎脒^濾不足,輸入可以顯示在頁面上對其他用戶造成影響的HTML代碼,從而盜取用戶資料、利用用戶身份進(jìn)行某種動作或者訪問者進(jìn)行病毒侵害的一種攻擊方式。為了與層疊樣式表的縮寫CSS區(qū)分開,跨站腳本攻擊通常簡寫為XSS。
2、XSS類型
1)反射型XSS
反射型XSS只是簡單地將用戶輸入的數(shù)據(jù)直接或未經(jīng)完善的安全過濾就在瀏覽器中進(jìn)行輸出,導(dǎo)致輸出的數(shù)據(jù)中存在可被瀏覽器執(zhí)行的代碼數(shù)據(jù)。由于此種類型的跨站代碼存在于URL中,所以黑客通常需要通過誘騙或加密變形等方式將存在惡意代碼的鏈接發(fā)給用戶,只有用戶點擊以后才能使得攻擊成功實施。
2)存儲型XSS
存儲型XSS腳本攻擊是指由于Web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的不嚴(yán)格,導(dǎo)致Web應(yīng)用程序?qū)⒑诳洼斎氲膼阂饪缯竟魯?shù)據(jù)信息保存在服務(wù)端的數(shù)據(jù)庫或其他文件形式中,當(dāng)網(wǎng)頁進(jìn)行數(shù)據(jù)查詢展示時,會從數(shù)據(jù)庫中獲取數(shù)據(jù)內(nèi)容,并將數(shù)據(jù)內(nèi)容在網(wǎng)頁中進(jìn)行輸出展示,進(jìn)而導(dǎo)致跨站腳本代碼的執(zhí)行。
3)DOM Based XSS
基于DOM的XSS跨站腳本攻擊是通過修改頁面。DOM節(jié)點數(shù)據(jù)信息而形成的XSS跨站腳本攻擊。不同于反射型XSS和存儲型XSS,基于DOM的XSS跨站腳本攻擊往往需要針對具體的Javascript DOM代碼進(jìn)行分析,并根據(jù)實際情況進(jìn)行XSS跨站腳本攻擊的利用。
3、XSS攻擊
1.XSS盜取用戶信息
2.XSS盜取Cookie
3.XSS釣魚攻擊
4.XSS蠕蟲攻擊
了解完這些概念之后,就來實戰(zhàn)。
一、在DVWA漏洞靶場練習(xí)
一、反射型XSS
進(jìn)行DVWA環(huán)境中,選擇安全等級,這里就按照從低到高的順序進(jìn)行。
選擇XSS(Reflected),查看一下源代碼。
觀察代碼可以發(fā)現(xiàn),這里沒有任何過濾。那就輸入最常用的語句
輸入完之后便會出現(xiàn)這個彈窗了
Medium
接下來,切換到中級( Medium)
如果還輸入剛才我們輸入的語句會出現(xiàn)什么結(jié)果,試試看。
沒有出現(xiàn)彈窗,看一下源代碼。
發(fā)現(xiàn)前面的<script>沒有了,那就看看源代碼中有什么過濾方式把<script>給過濾掉了
查看源代碼
這里代碼中用到了str_replace() 函數(shù)。
str_replace() 函數(shù)的作用:替換字符串中的一些字符(區(qū)分大小寫)。
所以這里是把<script>給替換掉了,但是這個函數(shù)其實有個漏洞,區(qū)分大小寫。。。
那我輸入這樣的語句(大小寫語句)
這里代碼只過濾了 <script>,那就換其他彈窗語句,也可以繞過。(body語句)
還可以采用雙寫繞過
<sc<script>ript>alert(/hacker/)</script>
可以看到str_replace() 函數(shù)把包裹在外層的 <script>給過濾掉了,但是里面的并不會過濾掉,這樣形成的還是一個完整的可執(zhí)行的語句。
接下來,嘗試高級的(high)
拿<script>alert(/hacker/)</script>這句來試試
過濾完了,只剩下了一個>
那就看看源代碼是如何過濾的
preg_replace 函數(shù)執(zhí)行一個正則表達(dá)式的搜索和替換。
這里就了解一下正則表達(dá)式:
正則表達(dá)式(regularexpression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。
那這里就可以理解為代碼將<script全給替換了,那如何繞過。。。那我換一個語句彈窗不就行了。。。
這里可以用body標(biāo)簽來彈框。
這就就出現(xiàn)彈窗了。
二、儲存型XSS
儲存型和反射型最大的區(qū)別便是持久型,下面就從low到high練習(xí),就可以清除的明白這兩種類型的區(qū)別了。
low
先看源代碼
代碼很長,但我們只看最后輸入結(jié)果那部分代碼,發(fā)現(xiàn)stripslashes() 函數(shù),查一下,發(fā)現(xiàn)這個函數(shù)的用法:刪除由 addslashes() 函數(shù)添加的反斜杠。所以沒有如何過濾,直接最常用的語句就可以了
但是這里有字?jǐn)?shù)限制,沒有辦法輸入了
那就打開F12改一下
改為之后輸入
成功,下面看看有啥區(qū)別,先跳轉(zhuǎn)到其他頁面去,再打開這個頁面,會發(fā)現(xiàn)。。。
又給我們彈出了這個頁面,這就是儲存型XSS。每當(dāng)你登陸這個界面,就會彈出這個彈框。
Medium
接下來,看一下中級的。
還是先輸入一下常見的語句
可以看到<script>被過濾掉了。
看一下源代碼
和反射型XSS的Medium一樣,所以可以用這兩個語句繞過
這里我們把三種語句都注入,再次點擊這個頁面會出現(xiàn)三次彈窗
high
正則表達(dá)式,用之前的語句就可以直接繞過。
通過這些練習(xí),可以了解就反射型的XSS攻擊時間短,例如彈窗只彈出一次,而存儲型的XSS攻擊則直接儲存在數(shù)據(jù)庫中,只要用戶訪問就可以彈出。
將安全等級調(diào)至impossible
安全等級調(diào)至到impossible,即不可繞過。
就以反射型的XSS來說吧
先以最常用的語句來攻擊
結(jié)果:
發(fā)現(xiàn)<和>都被轉(zhuǎn)換了,我們就去看一下源代碼
發(fā)現(xiàn)了這樣的一個函數(shù)PHP htmlspecialchars() 函數(shù),htmlspecialchars() 函數(shù)把一些預(yù)定義的字符轉(zhuǎn)換為 HTML 實體。
預(yù)定義的字符是:
所以這個函數(shù)就把我們輸入的<和>給過濾掉了,所以這是一種防護(hù)手段,防止惡意的XSS攻擊。
下面看一下存儲型XSS的impossible
還是先用常用的攻擊一下
顯示結(jié)果:
這就不需要再看后臺源碼了,這直接就顯示<和>已經(jīng)被過濾了.
我們就看一下源代碼
發(fā)現(xiàn)在輸出那有一個htmlspecialchars() 函數(shù),所以這個原理就和反射型XSS攻擊一樣。這樣DVWA練習(xí)就結(jié)束了。
感悟:果然只有動手去操作了,才會了解一些概念和一些攻擊方式,有很多很好的平臺供自己去學(xué)習(xí),合天、安全龍、漏洞銀行等等,只要自己想要去學(xué),這些東西都可以學(xué)到,接下來就去XSS通關(guān)平臺和謹(jǐn)靈實驗室繼續(xù)練習(xí)。
努力吧,少年!!!
總結(jié)
以上是生活随笔為你收集整理的web安全-XSS攻击(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP学习总结(数据库概念、DDL语句、
- 下一篇: web安全—XSS攻击(二)