XSS詳解


0x00-引言


沉淀一下基礎

0x01-漏洞描述


XSS:跨站腳本(Cross-Site Scripting)。是一種針對網站應用程序的安全漏洞攻擊技術,是代碼注入的一種。它允許惡意用戶將代碼注入網頁,其他用戶在瀏覽網頁時會受到影響。惡意用戶利用XSS代碼攻擊成功后,可能得到很高的權限,執行一些操作,私密網頁內容,會話和cookie等各種內容。《Web安全攻防:滲透測試實戰指南》

0x02-漏洞原理


01-反射性XSS

反射性XSS又稱非持久型XSS,攻擊具有一次性

image-20220117110223931

02-存儲型XSS

存儲型XSS又稱持久性XSS,攻擊腳本將被永久地放在目標服務器的數據庫或文件中,具有很高的隱蔽性。

image-20220117110803989

03-DOM型XSS

DOM全稱Document Object Model,使用DOM可以使程序動態的訪問和更新的內容、結構及樣式

DOM型XSS其實是一種特殊類型的反射性XSS,它是基於DOM文檔對象模型的一種漏洞。

DOM型數據流向:前端-->瀏覽器

HTML DOM樹:

image-20220117150020200

0x03-漏洞演示


靶場phpstudy + MS08067

01-反射性XSS

打開靶場

image-20220117154532630

找到輸入框,檢查頁面元素,構造payload閉合input標簽

"><script>alert(/xss/)</script>

<img src="1" onerror="alert(/xss/)">

image-20220117154906617

image-20220117154916027

可以看到頁面中已經插入也彈出payload

02-反射性XSS代碼分析
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
	<title>XSS利用輸出的環境來構造代碼</title>
</head>
<body>
	<center>
	<h6>把我們輸入的字符串 輸出到input里的value屬性里</h6>
	<form action="" method="get">
		<h6>請輸入你想顯現的字符串</h6>
		<input type="text" name="xss_input_value" value="輸入"><br />
		<input type="submit">
	</form>
	<hr>
	<?php
		if (isset($_GET['xss_input_value'])) {
			echo '<input type="text" value="'.$_GET['xss_input_value'].'">';
		}else{
			echo '<input type="text" value="輸出">';
		}
	?>
	</center>
</body>
</html>

看到后端獲取輸入框內的值,之后echo輸出,我們構造的payload把input標簽閉合了,之后會執行構造的payload中的標簽,后端代碼沒有過濾機制

03-存儲型XSS

打開靶場

image-20220117161729443

在標題處添加payload-提交

<img src=1 onerror="alert(/xss/)">

查看數據庫-插入成功

image-20220117161905171

刷新頁面-有點慢-等待ing

image-20220117162033021

04-存儲型XSS代碼分析
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
	<title>留言板</title>
</head>
<body>
	<center>
	<h6>輸入留言內容</h6>
	<form action="" method="post">
		標題:<input type="text" name="title"><br />
		內容:<textarea name="content"></textarea><br />
		<input type="submit">
	</form>
	<hr>
	<?php

		$con=mysqli_connect("localhost","root","root","test");
		if (mysqli_connect_errno())
		{
			echo "連接失敗: " . mysqli_connect_error();
		}
		if (isset($_POST['title'])) {
			$result1 = mysqli_query($con,"insert into xss(`title`, `content`) VALUES ('".$_POST['title']."','".$_POST['content']."')");
		}

		$result2 = mysqli_query($con,"select * from xss");

		echo "<table border='1'><tr><td>標題</td><td>內容</td></tr>";
		while($row = mysqli_fetch_array($result2))
		{
			echo "<tr><td>".$row['title'] . "</td><td>" . $row['content']."</td>";
		}
		echo "</table>";
	?>
	</center>
</body>
</html>

像存數據一樣存入數據庫-沒有任何過濾機制

刷新頁面,數據就會從數據庫中取出來顯示在頁面中,又因為我們在其中插入alert,所以頁面會出現彈窗

05-DOM型XSS

打開靶場

image-20220117163914798

插入payload <img src=1 onerror=alert(/xss/)>

彈出成功

image-20220117164010455

可以看到頁面元素中已經出現img標簽

06-DOM型源碼分析
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
	<title>Test</title>
	<script type="text/javascript">
		function tihuan(){
			document.getElementById("id1").innerHTML = document.getElementById("dom_input").value;
		}
	</script>
</head>
<body>
	<center>
	<h6 id="id1">這里會顯示輸入的內容</h6>
	<form action="" method="post">
		<input type="text" id="dom_input" value="輸入"><br />
		<input type="button" value="替換" onclick="tihuan()">
	</form>
	<hr>
	
	</center>
</body>
</html>

沒有涉及到后端代碼-一切都是前端的錯

接收到id1,js函數直接替換id1的值然后瀏覽器會顯示彈窗

0x04-XSS利用方式


01-獲取Cookie

獲取Cookie可以做未授權的非法操作

可以利用XSS平台接收Cookie

這里我們直接彈出Cookie

<img src=1 onerror="alert(document.cookie)">

image-20220119160111642

firefox插件Cookie Editor可以編輯Cookie,獲取到的Cookie填入,即可以管理員的身份登錄

02-獲取流量-廣告傳播
<script type="text/javascript">window.location.href="跳轉的目的地址";</script>
<script type="text/javascript">window. location.replace("跳轉的目的地址");</script>
<script type="text/javascript">window. location.assign("跳轉的目的地址");</script>

<script type="text/javascript">
  function jumurl(){
  window.location.href = 'https://www.baidu.com';
  }
  setTimeout(jumurl,3000);
</script>

結合存儲型XSS,只要用戶訪問頁面就直接跳轉到目的頁面,用來騙取流量和廣告傳播

也可以在頁面插入廣告鏈接

<script>document.writeln("<iframe scrolling='no' frameborder='0' marginheight='0' marginwidth='0' width='2000' height='5000' allowTransparency src=目的地址></iframe>");</script>
03-掛馬

使用MSF生成木馬URL,結合存儲型XSS掛到網站上面,用戶點擊,用戶主機如果存在該木馬對應的漏洞則會反彈shell

0x05-XSS修復建議


  • 添加HttpOnly,JS就讀取不到Cookie
  • 對輸入的數據進行過濾,不能相信用戶的輸入,如> < " '
  • 對輸出到頁面的數據進行編碼,如html編碼,js編碼

0x06-XSS常用PAYLOAD


//非常牛的一句payload
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

xss payload大全

0x07-參考


XSS漏洞利用方式匯總

《Web安全攻防:滲透測試實戰指南》

《Web安全深度剖析》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM