我不确定为什么我的代码没有存储 XSS
I'm not sure why my code is not stored XSS
更新:我将有效负载更改为 "<img src="fake.jpg" onerror="alert()">
并且 XSS 有效,所以我仍然不知道为什么它不起作用,但至少我存储的 XSS 现在可以正常工作。
感谢大家的帮助。
我从 GitHub 下载了一个聊天代码,代码是用 PHP 和 MYSQL 编写的我想让那个聊天易受存储的 XSS 攻击,我非常不知道为什么不是。
当然,一切都存储在数据库中,但每当我尝试注入 XSS 时,标签或标签的内容都没有显示,但在数据库中,我看到了 alert() 它只是不让我在网站上看到它本身...
有谁知道可能导致问题的原因是什么?
这是 index.php:
<?php
include 'db.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>::Message::</title>
<link rel="stylesheet" href="style.css">
<script>
function ajax() {
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {
document.getElementById('chat').innerHTML = req.responseText;
}
}
req.open('GET','chat.php', true);
req.send();
}
setInterval(function(){ajax()},1000);
</script>
</head>
<body onload="ajax();">
<div class="page">
<div class="display-box">
<div id="chat"></div>
</div>
<div class="form">
<form action="" method="post">
<label for="name">Name:</label><br>
<input type="text" name="name" placeholder="Your name"><br>
<label for="message">Write some thing:</label><br>
<textarea name="message" id="message-write" cols="30" rows="3"></textarea><br>
<input type="submit" name="submit" value="Send">
</form>
<?php
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$message = $_POST['message'];
$query = "INSERT INTO tbl_chat (name, message) VALUES ('$name','$message')";
$run = $con->query($query);
}
?>
</div>
</div>
</body>
</html>
这是聊天内容:
<?php
include 'db.php';
$query = "SELECT * FROM `tbl_chat` ORDER BY id DESC";
$run = $con->query($query);
while($row = $run->fetch_array()):
?>
<div class="chating_data">
<span id="name"><?php echo $row['name'];?></span><br>
<span id="message"><?php echo $row['message'];?></span>
</div>
<?php endwhile; ?>
我认为您使用的现代浏览器可能会阻止对您的利用。这并不意味着该应用程序不易受攻击,它只意味着它非常容易受到攻击,甚至浏览器也可以自动检测到漏洞。
尝试发送以下响应header:
X-XSS-Protection: 0
你可以用 header('X-XSS-Protection: 0');
之类的东西来做,看看是否允许你尝试 XSS。您也可以在此聊天中显示 XSS 消息,而不是响应您的“恶意”请求,但之后 - 它应该可以工作,因为浏览器将无法将您的请求与响应相关联。
更新:我将有效负载更改为 "<img src="fake.jpg" onerror="alert()">
并且 XSS 有效,所以我仍然不知道为什么它不起作用,但至少我存储的 XSS 现在可以正常工作。
感谢大家的帮助。
我从 GitHub 下载了一个聊天代码,代码是用 PHP 和 MYSQL 编写的我想让那个聊天易受存储的 XSS 攻击,我非常不知道为什么不是。 当然,一切都存储在数据库中,但每当我尝试注入 XSS 时,标签或标签的内容都没有显示,但在数据库中,我看到了 alert() 它只是不让我在网站上看到它本身... 有谁知道可能导致问题的原因是什么? 这是 index.php:
<?php
include 'db.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>::Message::</title>
<link rel="stylesheet" href="style.css">
<script>
function ajax() {
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {
document.getElementById('chat').innerHTML = req.responseText;
}
}
req.open('GET','chat.php', true);
req.send();
}
setInterval(function(){ajax()},1000);
</script>
</head>
<body onload="ajax();">
<div class="page">
<div class="display-box">
<div id="chat"></div>
</div>
<div class="form">
<form action="" method="post">
<label for="name">Name:</label><br>
<input type="text" name="name" placeholder="Your name"><br>
<label for="message">Write some thing:</label><br>
<textarea name="message" id="message-write" cols="30" rows="3"></textarea><br>
<input type="submit" name="submit" value="Send">
</form>
<?php
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$message = $_POST['message'];
$query = "INSERT INTO tbl_chat (name, message) VALUES ('$name','$message')";
$run = $con->query($query);
}
?>
</div>
</div>
</body>
</html>
这是聊天内容:
<?php
include 'db.php';
$query = "SELECT * FROM `tbl_chat` ORDER BY id DESC";
$run = $con->query($query);
while($row = $run->fetch_array()):
?>
<div class="chating_data">
<span id="name"><?php echo $row['name'];?></span><br>
<span id="message"><?php echo $row['message'];?></span>
</div>
<?php endwhile; ?>
我认为您使用的现代浏览器可能会阻止对您的利用。这并不意味着该应用程序不易受攻击,它只意味着它非常容易受到攻击,甚至浏览器也可以自动检测到漏洞。
尝试发送以下响应header:
X-XSS-Protection: 0
你可以用 header('X-XSS-Protection: 0');
之类的东西来做,看看是否允许你尝试 XSS。您也可以在此聊天中显示 XSS 消息,而不是响应您的“恶意”请求,但之后 - 它应该可以工作,因为浏览器将无法将您的请求与响应相关联。