Java代码审计 | XSS

  • A+
所属分类:代码审计


 

前言

本次分享的是web安全漏洞中的跨站脚本(XSS)攻击。从XSS漏洞原理,XSS三种类型介绍及利用以及XSS修复来分享此篇文章。在此特别感谢本文原创作者黑客小平哥。

 

一、跨站脚本(XSS)原理

先看下百度百科对XSS的介绍:

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

 

事实上XSS可以分为以下三种类型:

1.反射型XSS

反射型XSS也被称为非持久性XSS,一般反射型XSS是用户直接在URL中提交一段可执行代码,最后直接在页面中输出,页面将提交的代码执行,形成XSS攻击,一般单纯的反射型XSS危害并不大,但是当XSS遇上跨站请求伪造(CSRF)就会形成可怕的蠕虫。

2.存储型XSS

存储型XSS又被称为持久性XSS,存储型XSS是恶意用户输入的可执行代码直接保存在数据库中,最后在某个页面被调用显示出来,最后执行。存储型XSS相对来说危害就非常大,一般恶意用户可通过存储型XSS去盗窃管理员的Cookie,从而获取管理员权限。

3.DOMXSS

DOM,即文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。DOMXSS其实是一种特殊的反射型XSS,可能触发的DOMXSS属性包括但不限于:document.locationdocument.URLdocument.referrerwindow.location......

 

二、下面详细介绍此三种XSS:

 

反射型XSS

反射型XSS的执行条件

有以下几点:

1.传递参数为用户可控,简单页面如下:

Java代码审计 | XSS

其中搜索框中的值即为可控参数,在URL中表现形式如下:

http://localhost:8080/javatest/searchword?word=

2.参数未经过任何过滤或者过滤不完全,最终直接显示在前端页面,形式如下:

Java代码审计 | XSS

Java代码审计 | XSS

Java代码审计 | XSS

此处参数在前端为EL表达式获取,并且为添加任何过滤,最后直接显示在页面。

反射型XSS的表现形式

当输入框输入的参数为:<script>alert(1)</script>  时,就会直接被浏览器当作脚本执行:

Java代码审计 | XSS

URL表现形式:

http://localhost:8080/javatest/searchword?word=%3Cscript%3Ealert%281%29%3C%2Fscript%3E

最后弹框:

Java代码审计 | XSS

存储型XSS

存储型XSS的执行条件

有以下几点:

1.传递参数为用户可控,简单页面如下,这是一个简单的增加用户界面,文本框中的参数都为用户可控:

Java代码审计 | XSS

2.参数在传递过程中未经过任何有效过滤(或者存在过滤不全,会被绕过),并且能够存储在数据库中,代码如下:

 

Java代码审计 | XSS

Java代码审计 | XSS

3.在前端页面会显示用户存储的数据,并且未做任何输出过滤(或者过滤不全),页面和代码如下:

 

Java代码审计 | XSS

 

Java代码审计 | XSS

存储型XSS的表现形式

在添加用户处输入:<script>alert(1)</script>

Java代码审计 | XSS

数据库中存储的形式如下:

Java代码审计 | XSS

当数据显示在页面,就会执行脚本:

Java代码审计 | XSS

 

Java代码审计 | XSS

DOM型XSS

DOMXSS的原理其实和反射型XSS差别并不大,只是可控参数拼接在DOM标签输出,页面如下:

Java代码审计 | XSS

此处a’为可控参数,当‘a’为123456789 时:

Java代码审计 | XSS

a’为<img src=1 onerror=alert(1)>时:

Java代码审计 | XSS


三、XSS的修复

XSS的修复大概分为两种形式,一种为输入验证,一种为输出验证:

1.输入验证,添加全局过滤器,对特殊字符进行过滤,包括(但不限于):

Ø |(竖线符号)

Ø & & 符号)

Ø ;(分号)

Ø $(美元符号)

Ø %(百分比符号)

Ø @at 符号)

Ø '(单引号)

Ø "(引号)

Ø '(反斜杠转义单引号)

Ø "(反斜杠转义引号)

Ø <>(尖括号)

Ø ()(括号)

Ø +(加号)

Ø CR(回车符,ASCII 0x0d

Ø LF(换行,ASCII 0x0a

Ø ,(逗号)

Ø (反斜杠)

Ø eval方法

Ø document

Ø cookie

Ø javascript

Ø script

Ø onerror

过滤形式如下(注意大小写)

Java代码审计 | XSS

Java代码审计 | XSS

代码中,获取过滤后的参数,再执行数据库操作:

Java代码审计 | XSS

Java代码审计 | XSS

Java代码审计 | XSS

2.输出验证,对输出的参数做编码过滤,此处不写了,方法大同小异。

过滤后输出截图:

 

Java代码审计 | XSS

*参考来源:网络



关于我们:

北京路劲科技有限公司(Beijing Lujin Technology Co. , Ltd.)成立于2019年1月4日,是一家提供全面系统集成与信息安全解决方案的专业IT技术服务公司。公司秉承“为网络安全保驾护航”的企业愿景及“提升国家整体安全”的使命,依据风险评估模型和等级保护标准,采用大数据等技术手段,开展网络安全相关业务。公司致力于为各个行业的业务信息化提供软件和通用解决方案、系统架构,系统管理和数据安全服务、以及IT咨询规划、系统集成与系统服务等专业化服务。公司立足北京,走向全国,始终坚持“换位、细节、感恩”的核心价值观,以“共赢、共享、共成长”的经营理念为出发点,集合了一批敢于创新、充满活力、热衷于为IT行业服务的优秀人才,致力于成为您身边的网络安全专家。

 

关注路劲科技,关注网络安全!

公司:北京路劲科技有限公司

地址:北京市昌平区南邵镇双营西路78号院2号楼5层504

PS:如果觉得本篇文章对您有所帮助,欢迎关注!帮忙点个赞,转发一下 分享出去吧,有问题可以公众号回复私聊小编,看到就会及时回复,也可加小编微信入群交流哦~~!


Java代码审计 | XSS


一起加油哦~

Java代码审计 | XSS

◆Java代码审计 | 任意文件下载

◆工具 | Maltego 强大的信息收集工具

◆Android App | Androguard渗透测试工具

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: