跨站脚本攻击xss学习

0、认识跨站脚本

举一个跨站脚本的简单例子。

假设一个页面将用户输入的参数直接显示到页面之中。(比如有如下代码)

在实际的浏览器中,在param中提交的参数正常会展示到页面之中。比如输入下面的URL:

然后发现浏览器页面的提供会变成这样:

此时如果提交下面的URL:

会发现alert被执行了

 

    

1、跨站脚本分类

跨站脚本攻击分为3类,反射型、存储型和DOM Based XSS。

1、反射型xss。浏览器执行一个不可信的脚本,并获得服务器的响应。通常黑客需要引诱用户点击恶意链接来进行触发。

2、存储型xss。比如在服务器的博客文章中有恶意脚本,那么每个访问该博客的浏览器都会执行这段而已代码。

3、修改页面的DOM节点形成的xss。(实际上也是浏览器执行不可信的脚本,但还是单独被列出为一类)

2、XSS Payload

XSS攻击成功之后,攻击者能够对当前浏览器的页面植入恶意脚本,通过恶意脚本,控制用户浏览器。这些用来完成各种具体功能的恶意脚本,被成为XSS Payload。

XSS Payload实际上就是javaScript脚本(还可以是Flash或其他富客户端的脚本)。所以javascript能做到的事情,XSS Payload都能够做到。

2.1 XSS Payload获取Cookie(通过URL的param远程加载一个脚本,脚本中加载一个图片,将cookie放入图片路径)

从开头的例子看到,通过URL的方式能够使一个脚本执行。

通过如下方式去加载一个远程脚本:

然后在evil.js中写入获取Cookie的代码(这段代码本身是加载一个图片,但是通过请求一个图片,将cookie放在请求的URL中):

即使最后该图片路径不存在,服务器也会记录下这次访问的URL,也就是能获取到cookie了。

获取cookie后,使用用户的cookie就可以伪造用户登录,但是很容易被防范。

 2.2 强大的XSS Payload

模拟用户的行为:

1、构建form表单

2、通过XMLHttpRequest发送消息

比如通过网络抓包来获取某项行为的URL,然后模拟用户发送该URL

 

XSS钓鱼:

伪造一个假的登录框或是页面。

 

识别用户浏览器:

1、读取浏览器的UserAgent(可以伪造)

2、根据不同浏览器各自的独特功能,识别浏览器独有的对象

 

识别用户安装的软件:

1、activex的classid

2、falsh的system.capabilities对象(软件的专属对象)

 

ccs访问过的网站颜色不同会造成信息泄漏

 

获取真实IP:

javascript没有直接接口,需要使用其他软件完成,比如JRE

2.3 XSS攻击平台

Attack API

BeEF

XSS-Proxy

2.4 XSS Worm

2005地一个蠕虫病毒

2007年百度空间蠕虫病毒

2.5 调试javascript

firebug

IE8 Developer Tools

Fiddler

HttpWatch

2.6 XSS 构造技巧

3、XSS防御

HttpOnly:在cookie设置HttpOnly属性,可以让javascript读取不到cookie

输入检查:比如排查有没有像'<'或'>'等特殊字符

输出检查:将变量输出成html时可以使用编码或转义字符的方式来防御XSS攻击,将比如将<转义成&lt

 

posted @ 2018-11-14 22:51  番茄汁汁  阅读(448)  评论(0编辑  收藏  举报