1. 程式人生 > 其它 >XSS學習筆記---Pikachu漏洞平臺

XSS學習筆記---Pikachu漏洞平臺

技術標籤:web安全xss

文章目錄

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>