wordpress響應(yīng)式主題制作教程seo社區(qū)
sqli-labs靶場(chǎng)安裝以及刷題記錄-dockerpikachu靶場(chǎng)-Cross-Site Scripting
- pikachu靶場(chǎng)的安裝
- 刷題記錄
- 反射型xss(get)
- 反射型xss(post)
- 存儲(chǔ)型xss
- DOM型xss
- DOM型xss-x
- xss盲打
- xss之過濾
- xss之htmlspecialchars
- xss之href輸出
- xss之js輸出
pikachu靶場(chǎng)的安裝
刷題記錄
反射型xss(get)
輸入設(shè)置了長(zhǎng)度限制,前端可以直接改
改maxlength值,之后輸入腳本成功注入
<script>alert(1)</script>
反射型xss(post)
執(zhí)行登陸操作,登陸成功后有一個(gè)輸入框,可以輸入注入語句
存儲(chǔ)型xss
同樣直接輸入注入語句試試
<script>alert(1)</script>
直接彈窗了,看下源碼,沒有任何過濾
DOM型xss
輸入aaaaaa
,點(diǎn)擊click me
會(huì)生成一個(gè)鏈接,那可以讓它指到剛剛的存儲(chǔ)型xss網(wǎng)站來觸發(fā)彈窗
輸入xss_stored.php
,點(diǎn)擊what do you see
DOM型xss-x
輸入123444
,觀察源碼
輸入123444
后,依次點(diǎn)擊所彈出的鏈接,url變化為
//請(qǐng)說出你的傷心往事
/vul/xss/xss_dom_x.php?text=123444
//有些費(fèi)盡心機(jī)想要忘記的事情,后來真的就忘掉了
/vul/xss/xss_dom_x.php?text=123444#
//就讓往事都隨風(fēng),都隨風(fēng)吧
/vul/xss/123444
同樣可以輸入xss_stored.php
使其跳轉(zhuǎn)到存儲(chǔ)型xss網(wǎng)站來觸發(fā)彈窗
xss盲打
輸入各種語句都是一樣的回顯,看了提示有后臺(tái)/xssblind/admin_login.php
打開后臺(tái)頁面,會(huì)彈窗剛剛提交的注入語句
剛好配置一下文件掃描工具dirsearch
,下載zip解壓直接
python dirsearch.py -u http://ip:9002/vul/xss/xssblind/
conda create --name py39 python=3.9//需要3.9及以上版本python
xss之過濾
輸入注入語句試試
<script>alert(1)</script>
發(fā)現(xiàn)回顯只剩一個(gè)>
了,被繼續(xù)測(cè)試,猜一下過濾規(guī)則,發(fā)現(xiàn)大小寫混合可以繞過
<Script>alert(1)</Script>
xss之htmlspecialchars
輸入注入語句,之后點(diǎn)擊鏈接彈窗成功
javascript:alert(1)
相關(guān)知識(shí)點(diǎn)學(xué)習(xí):
htmlspecialchars()
是一個(gè)用于避免 XSS(跨站腳本攻擊) 的 PHP 函數(shù),它的主要作用是將 HTML 特殊字符轉(zhuǎn)義為實(shí)體編碼,從而防止惡意用戶在輸入內(nèi)容中注入 HTML 或 JavaScript 代碼。這是常見的 Web 應(yīng)用程序中用戶輸入處理的重要部分,尤其是在顯示數(shù)據(jù)時(shí)。
基本用法
htmlspecialchars(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE, string $encoding = 'UTF-8', bool $double_encode = true): string
參數(shù)說明
-
$string:
- 這是需要被轉(zhuǎn)義的字符串。通常是用戶輸入的數(shù)據(jù)。
-
$flags:
- 這是可選參數(shù),用來指定如何處理不同的字符。常見的標(biāo)志有:
ENT_COMPAT
:默認(rèn)。將雙引號(hào) ("
) 轉(zhuǎn)義為"
,但不轉(zhuǎn)義單引號(hào) ('
)。ENT_QUOTES
:將雙引號(hào)和單引號(hào)都轉(zhuǎn)義。也就是說,"
會(huì)轉(zhuǎn)義為"
,而'
會(huì)轉(zhuǎn)義為'
。ENT_NOQUOTES
:不轉(zhuǎn)義任何引號(hào)。ENT_HTML401
,ENT_XML1
,ENT_XHTML
,ENT_HTML5
:這些用于指定 HTML 實(shí)體的文檔類型(HTML 4.01、XML 1、XHTML、HTML5)。ENT_SUBSTITUTE
:當(dāng)給定的字符集無法表示某些字符時(shí),使用替代字符。
- 這是可選參數(shù),用來指定如何處理不同的字符。常見的標(biāo)志有:
-
$encoding:
- 這是字符編碼的選項(xiàng)。默認(rèn)值是
UTF-8
,但可以根據(jù)需要設(shè)置為其他編碼(如ISO-8859-1
)。
- 這是字符編碼的選項(xiàng)。默認(rèn)值是
-
$double_encode:
- 如果設(shè)置為
false
,則不會(huì)對(duì)已經(jīng)被轉(zhuǎn)義的實(shí)體再次進(jìn)行轉(zhuǎn)義。例如,如果字符串中已經(jīng)包含&
,它不會(huì)再次轉(zhuǎn)義為&amp;
。默認(rèn)為true
。
- 如果設(shè)置為
常見例子
-
基本用法:
$input = "<script>alert('XSS');</script>"; echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
輸出:
<script>alert('XSS');</script>
htmlspecialchars()
將<
轉(zhuǎn)義為<
,>
轉(zhuǎn)義為>
,從而避免了用戶輸入的 JavaScript 被瀏覽器解釋和執(zhí)行。
-
處理雙引號(hào)和單引號(hào):
$input = 'He said, "Hello!"'; echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
輸出:
He said, "Hello!"
ENT_QUOTES
標(biāo)志確保了雙引號(hào)被轉(zhuǎn)義為"
。
-
避免重復(fù)轉(zhuǎn)義:
$input = '<strong>Hello</strong>'; echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8', false);
輸出:
<strong>Hello</strong>
- 因?yàn)?
double_encode
參數(shù)被設(shè)置為false
,所以已經(jīng)轉(zhuǎn)義的實(shí)體不會(huì)再次被轉(zhuǎn)義。
- 因?yàn)?
使用場(chǎng)景
-
顯示用戶輸入的數(shù)據(jù):
當(dāng)用戶提交包含 HTML 或 JavaScript 的數(shù)據(jù)時(shí),直接輸出可能會(huì)被瀏覽器解釋并執(zhí)行。這會(huì)導(dǎo)致跨站腳本攻擊(XSS)。htmlspecialchars()
可以有效防止這種情況。$comment = "<script>alert('hacked');</script>"; echo htmlspecialchars($comment, ENT_QUOTES, 'UTF-8');
這樣可以確保用戶輸入的
<script>
標(biāo)簽不會(huì)被執(zhí)行,而是顯示為普通文本。 -
防止 XSS 攻擊:
用戶通過表單提交惡意代碼是 XSS 攻擊的常見方式。通過使用htmlspecialchars()
,可以將這些惡意代碼轉(zhuǎn)義為普通文本,防止被執(zhí)行。 -
與數(shù)據(jù)庫結(jié)合使用:
當(dāng)你將用戶輸入的數(shù)據(jù)存入數(shù)據(jù)庫并從數(shù)據(jù)庫讀取數(shù)據(jù)進(jìn)行展示時(shí),使用htmlspecialchars()
來展示用戶生成的內(nèi)容是一個(gè)好習(xí)慣。它能確保顯示的數(shù)據(jù)是安全的,而不是被解析為 HTML 或 JavaScript。
轉(zhuǎn)義的字符列表
&
轉(zhuǎn)義為&
<
轉(zhuǎn)義為<
>
轉(zhuǎn)義為>
"
轉(zhuǎn)義為"
'
轉(zhuǎn)義為'
(僅在ENT_QUOTES
標(biāo)志下)
注意事項(xiàng)
htmlspecialchars()
主要用于輸出 HTML 內(nèi)容時(shí)對(duì)用戶輸入的轉(zhuǎn)義。如果你需要將用戶輸入作為 HTML 標(biāo)記(比如<div>
)安全地顯示,htmlspecialchars()
是首選。- 對(duì)于更復(fù)雜的場(chǎng)景,比如需要處理完整的 HTML 文檔或需要轉(zhuǎn)義所有 HTML 實(shí)體,可以使用
htmlentities()
函數(shù)。
總結(jié)
htmlspecialchars()
是防止 XSS 攻擊的一個(gè)重要函數(shù),通過將特殊字符轉(zhuǎn)義,避免瀏覽器將其解釋為 HTML 或 JavaScript 代碼。- 它在輸出用戶輸入的數(shù)據(jù)時(shí)尤其重要,比如在評(píng)論區(qū)、聊天框等地方。
xss之href輸出
javascript:alert(1)//同樣可以繞過
xss之js輸出
輸入
javascript:alert(1)
?message=javascript%3Aalert%281%29&submit=submit//Url中多了message參數(shù)
提示
隨便輸入看一下源碼
嘗試閉合
1'</script><script>alert(1)</script>
沒有閉合,再試一次
1'</script><script>alert(1)</script>
成功彈窗