XSS學習筆記---Pikachu漏洞平臺
阿新 • • 發佈:2021-01-23
文章目錄
XSS
一.XSS概述
- XSS是發生在Web前端的漏洞,所以其危害物件主要是前端使用者
- XSS漏洞可以用來進行釣魚攻擊、前端js挖礦、使用者cookie獲取、甚至可以結合瀏覽器自身的漏洞對使用者主機進行遠端控制等
-圖片來自i春秋 - 漏洞形成原因:形成XSS漏洞的主要原因是程式對輸入和輸出的控制不嚴格,導致構造的指令碼輸入後,在輸到前端時被瀏覽器當作有效程式碼解析執行從而產生危害。
二.XSS漏洞測試流程
- 在目標站點上找到輸入點,比如查詢口,留言板;
- 輸入一組"特殊字元+唯一識別字符",點選提交後,檢視返回的原始碼,是否有做對應的處理;
- 通過搜尋定位到唯一字元,結合唯一字元前後語法確認是否可以構造執行js的條件;
- 提交構造指令碼程式碼(以及各種繞過姿勢),看是否可以成功執行,如果成功執行則說明存在XSS漏洞
三.XSS注入例項
3.1反射性XSS
3.1.1概述
- 反射性XSS攻擊正常是一次性的
- 攻擊方式:攻擊者通過郵件等方式將包含XSS惡意程式碼的連結發給目標使用者。當目標使用者訪問時觸發漏洞
3.1.2攻擊例項
- 首先輸入特殊字元和唯一識別字符 '"pikachuchuchu 提交
- 嘗試構造payload進行xss攻擊
<script>alert('What can I say?Mamba out')</script>
- 這裡要注意前端在字串輸入中對字元長度有限制F12改一下即可,看一下攻擊效果
- 程式碼分析:對得到資料沒有任何處理所以直接寫js程式碼即可
if(isset($_GET['submit'])){
if(empty($_GET['message'])){
$html.="<p class='notice'>輸入'kobe'試試-_-</p>" ;
}else{
if($_GET['message']=='kobe'){
$html.="<p class='notice'>願你和{$_GET['message']}一樣,永遠年輕,永遠熱血沸騰!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
}else{
$html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>";
}
}
}
3.2儲存性XSS
3.2.1概述
- 功能:獲取使用者輸入的留言資訊,標題和內容,然後將標題和內容插入到資料庫中,並將資料庫的留言資訊輸出到頁面
- 因為其會從資料庫中獲取留言資訊並輸出到頁面,所以這種攻擊是永續性的
3.2.2 注入例項
- 類似與反射性的XSS 輸入識別字符加特殊符號檢視是否被處理過
- 這道題也是沒有被處理過的
- 我輸入的payload是
- 效果:每次訪問都會出現這個彈窗
- 原始碼分析:從資料庫裡讀取出來後沒有經過任何處理所以存在xss漏洞
<div id="show_message">
<br />
<br />
<p class="line">留言列表:</p>
<?php echo $html;
$query="select * from message";
$result=execute($link, $query);
while($data=mysqli_fetch_assoc($result)){
echo "<p class='con'>{$data['content']}</p><a href='xss_stored.php?id={$data['id']}'>刪除</a>";
}
echo $html;
3.3DOM型XSS
3.3.1概述
- 功能:在輸入框輸入資訊並確定後,頁面會將“這裡會顯示輸入的內容”替換為輸入的資訊 w3cscholl的例項
<html>
<head>
<script type="text/javascript">
function getValue()
{
var x=document.getElementById("myHeader")
alert(x.innerHTML)
}
</script>
</head>
<body>
<h1 id="myHeader" onclick="getValue()">這是標題</h1>
<p>點選標題,會提示出它的值。</p>
</body>
</html>
3.3.2攻擊例項
- 原始碼分析
- 我們在文字框裡輸入的文字會被傳入到str中,接下來會進行字串的拼接"what do you see?";並將其作為id為dom的html內容
- 如果我們正常輸入一個網址,例如https://www.bilibili.com/
- 我們點選what do you see?則會訪問到這個頁面
- 同樣我們也可進行xss攻擊,這裡和前面不一樣的地方在於我們需要構造閉合
<a href='"+str+"'>what do you see?</a>
我們可以構造為 <a href='' onclick=alert(1111)>'>what do you see?</a>
輸入框裡的內容為:' οnclick=alert(11111)>
效果如下:
<div id="xssd_main">
<script>
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
//試試:'><img src="#" οnmοuseοver="alert('xss')">
//試試:' οnclick="alert('xss')">,閉合掉就行
</script>
<!--<a href="" οnclick=('xss')>-->
<input id="text" name="text" type="text" value="" />
<input id="button" type="button" value="click me!" onclick="domxss()" />
<div id="dom"></div>
</div>