用户
搜索
  • TA的每日心情
    郁闷
    2017-4-25 14:21
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    i春秋签约作家

    Rank: 7Rank: 7Rank: 7

    6

    主题

    61

    帖子

    167

    魔法币
    收听
    0
    粉丝
    4
    注册时间
    2017-4-25

    i春秋签约作者

    发表于 2017-5-13 21:47:05 198086
    Java代码审计连载之—XSS

    本文原创作者:黑客小平哥,本文属i春秋原创奖励计划,未经许可禁止转载



    前言
    最近几天比较忙,没有连载文章,今天正好有时间就写写吧,连载的都是基础的漏洞,大神路过留个脚印就可以撤了,哈哈,俗话说不喜勿喷,那咱们就开干!

    跨站脚本(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.传递参数为用户可控,简单页面如下:
    1.png
    其中搜索框种的值即为可控参数,在URL中表现形式如下:

    2.参数未经过任何过滤或者过滤不完全,最终直接显示在前端页面,形式如下:
    2.png
    3.png
    4.png
    此处参数在前端为EL表达式获取,并且为添加任何过滤,最后直接显示在页面。
    反射型XSS的表现形式
    当输入框输入的参数为:<script>alert(1)</script>  时,就会直接被浏览器当作脚本执行:
    5.png
    URL表现形式:
    弹框:
    6.png
    存储型XSS
    存储型XSS的执行条件
    有以下几点:
    1.传递参数为用户可控,简单页面如下,这是一个简单的增加用户界面,文本框中的参数都为用户可控:
    7.png
    2.参数在传递过程中未经过任何有效过滤(或者存在过滤不全,会被绕过),并且能够存储在数据库中,代码如下:
    8.png
    9.png
    3.在前端页面会显示用户存储的数据,并且未做任何输出过滤(或者过滤不全),页面和代码如下:
    10.png
    12.png
    存储型XSS的表现形式
    在添加用户处输入:<script>alert(1)</script>
    13.png
    数据库中存储的形式如下:
    14.png
    当数据显示在页面,就会执行脚本:
    15.png
    16.png
    DOMXSS
    DOMXSS的原理其实和反射型XSS差别并不大,只是可控参数拼接在DOM标签输出,页面如下:
    17.png
    此处a’为可控参数,当‘a’为123456789 时:
    18.png
    a’为<img src=1 onerror=alert(1)>时:
    19.png
    XSS的修复
    XSS的修复大概分为两种形式,一种为输入验证,一种为输出验证:
    1.输入验证,添加全局过滤器,对特殊字符进行过滤,包括(但不限于):
       |(竖线符号)
    Ø & & 符号)
    Ø ;(分号)
    Ø $(美元符号)
    Ø %(百分比符号)
    Ø @at 符号)
    Ø '(单引号)
    Ø "(引号)
    Ø \'(反斜杠转义单引号)
    Ø \"(反斜杠转义引号)
    Ø <>(尖括号)
    Ø ()(括号)
    Ø +(加号)
    Ø CR(回车符,ASCII 0x0d
    Ø LF(换行,ASCII 0x0a
    Ø ,(逗号)
    Ø \(反斜杠)
    Ø eval方法
    Ø document
    Ø cookie
    Ø javascript
    Ø script
    Ø onerror
    过滤形式如下(注意大小写)
    20.png
    21.png
    代码中,获取过滤后的参数,再执行数据库操作:
    22.png
    23.png
    24.png
    2.输出验证,对输出的参数做编码过滤,此处不写了,方法大同小异。

    过滤后输出截图:
    26.png

    结论:
    累死了,今天就写这么多吧,写的不好或者有错误之处,多多指教,谢谢!

    评分

    参与人数 1魔法币 +10 收起 理由
    风在指尖 + 10 感谢你的分享,i春秋论坛有你更精彩!.

    查看全部评分

    本帖被以下淘专辑推荐:

    yyyxy 管理员 六国战旗移动展示平台! 秦 楚 燕 魏 齐 赵
    来自 9#
    发表于 2017-5-19 14:12:55

    文章奖励介绍及评分标准:http://bbs.ichunqiu.com/thread-7869-1-1.html,如有疑问请加QQ:286894635!
    奖金
    点评
    50
    java中的xss这个主题讲的不错。

    欢迎加入i春秋QQ群大家庭,每人只能任选加入一个群哦!投稿请加我QQ:286894635。
    i春秋-楚:533191896
    i春秋-燕:129821314
    i春秋-齐:417360103
    i春秋-秦:262108018
    使用道具 举报 回复
    Sven_ll 发表于 2017-5-18 09:45
    只讲了基础的概念,有没有根据java语言特点,代码阅读的思路,关注点,方法???? ...

    这个没有具体的项目,光自己写的话太慢,不好讲,网上搞开源代码又怕搞事,哈哈,你懂得
    使用道具 举报 回复
    Youxiu 发表于 2017-8-5 08:20
    大佬,有个问题:这个过滤不适用于有富文本框的情况

    大佬,很好的问题,我只考虑到了web端的情况,富文本编辑框容我研究下,后面我再更新下,三扣
    使用道具 举报 回复
    发表于 2017-5-15 16:02:40
    黑客小平哥 发表于 2017-5-15 06:26
    个人认为全局过滤不仅过滤了xss,也防止了注入和命令执行一些其他的漏洞 ...

    这个东西 是需要 分场景的吧     
    使用道具 举报 回复
    0nise 发表于 2017-5-14 19:54
    为何不直接转意 ?

    个人认为全局过滤不仅过滤了xss,也防止了注入和命令执行一些其他的漏洞
    使用道具 举报 回复
    labi 发表于 2017-6-2 17:11
    感觉修复方式有问题,你直接实体化就好了

    大表哥,哪里有问题?请具体说说,谢谢
    使用道具 举报 回复
    发表于 2017-5-14 08:57:52
    666666 非常适合新手
    xss  交流群602221356  接收XSS爱好者
    使用道具 举报 回复
    发表于 2017-5-14 12:36:09
    感谢分享
    使用道具 举报 回复
    发表于 2017-5-14 19:54:22
    为何不直接转意 ?
    使用道具 举报 回复
    0nise 发表于 2017-5-15 16:02
    这个东西 是需要 分场景的吧

    是啊,这个看业务需求去修改了
    使用道具 举报 回复
    发表于 2017-5-18 09:45:51
    本帖最后由 Sven_ll 于 2017-5-18 09:54 编辑

    只讲了基础的概念,有没有根据java语言特点,代码阅读的思路,关注点,方法????
    使用道具 举报 回复
    发表于 2017-6-2 17:11:39
    感觉修复方式有问题,你直接实体化就好了
    使用道具 举报 回复
    感谢楼主分享
    使用道具 举报 回复
    Java和PHP在web领域哪个更具有前景?
    使用道具 举报 回复
    独孤求败的独孤 发表于 2017-6-4 09:40
    Java和PHP在web领域哪个更具有前景?

    这个个人觉得都要涉及
    使用道具 举报 回复
    12下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册