XSS 学习笔记 源码分析
XSS 简介
XSS 攻击指黑客通过特殊的手段对网页中插入了恶意的JavaScript脚本,从而在用户浏览网页时,对用户浏览器发起Cooike资料窃取,会话劫持、钓鱼欺骗等各种攻击。
XSS 跨站脚本攻击本身对Web服务器没有直接危害,他借助网站进行传播,使网站的大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开URL的时候,恶意脚本会在受害者的计算机上悄悄运行。
XSS 漏洞出现的原因如下:
- Web浏览器本身设计不安全,无法判断JS代码是否是恶意的。
- 输入与输出的Web应用程序交互防护不够。
- 程序员缺乏安全意识,缺失对XSS漏洞的认知。
- XSS触发简单,完全防护起来相当困难。‘’
XSS跨站脚本实例
下面的HTML代码就演示了一个最基本的XSS弹窗:
<html>
<head>XSS</head>
<body>
<script>alert("XSS")</script>
</body>
</html>
直接在HTML页面通过
XSS攻击就是将非法的Javascript代码注入到用户的浏览器,而Web浏览器本身设计是不安全的,它只负责解释和执行Javascript等脚本语言,而不会判断代码本身是否对用户有害。
XSS的危害
XSS可能不如Sql注入、文件上传等能够直接得到较高操作权限的漏洞,但是他运用十分灵活,适当结合其他技术一起使用,XSS的威力还是很大的。
可能对网站和用户带来的危害简单概括如下:
- 网络钓鱼
- 盗用用户Cookie信息
- 劫持用户浏览器
- 强制弹出广告页面,刷流量
- 网页挂马
- 进行恶意操作。如任意篡改页面信息
- 获取客户端隐私信息
- 控制手盖着机器向其他网站发起攻击。
- 结合其他漏洞,如CSRF漏洞,
- 提升用户权限,包含进一步渗透网站
XSS分类
反射型 XSS (非持久型)
反射型跨站脚本也称非持久型、参数型跨站脚本。反射型XSS只是简单地把用户输入的数据“发射”给浏览器。
假设一个页面把用户输入的参数直接输出到页面上:
<?php
$input = $_GET['param'];
echo "<h1>".$input."</h1>";
?>
http://192.168.241.140/xss.php?param=HELLO%20XSS
会得到如下结果:
此时提交一个JavaScript代码:
http://192.168.241.140/xss.php?param=%3Cscript%3Ealert(%22XSS%22)%3C/script%3E
发现,alert(xss)在当前页面执行了:
在查看源代码:
用户输入的Script脚本,已经被写入页面中,这个就是经典的反射型XSS.
特点:
- 在户在浏览时触发,而且只执行一次,非持久化,所以成为反射型XSS
- 反射型XSS恶意代码暴露在URL参数总,并且时刻要求目标用户浏览方可触发
存储型XSS
存储型XSS和反射型XSS的差别仅在于:
存储型&#x