XSS是跨站脚本攻击的缩写,与CSS区别而写为XSS。XSS分为两种利用类型——反射型XSS和存储型XSS,对应的利用方式不同。但是所有的XSS原理都是网站把用户输入的参数不经过任何处理直接插入到了html语言中,而当一个攻击者通过构造的恶意语句插入到html中,将会产生渲染效果。如果修改参数通过Get方式传播,将恶意代码拼接了url发送给受害者,受害者将会受到恶意代码的影响,严重的将会被植入木马病毒等。
针对XSS很有效的一种防御方式是使用htmlspecialchar()函数进行参数的html实体编码,但是攻击者可以通过一些js函数绕过。目前最为有效的方式是使用httponly进行防御。
步骤如下:
1.1在浏览器的地址栏中输入【http://192.168.1.3/xss】进入到挑战页面。如图1所示
图1
1.2单机图片进入到第一关。如图2所示
图2
1.3现在url中带有get参数?name=xxx于是在参数加入js代码:<script>alert(/xss/)</script>
,如图3所示
图3
1.4弹窗成功进入到下一关。如图4所示
图4
1.5参照第一关,首先在输入框中尝试输入<script>alert(/xss/)</script>
,并点击“搜索”,看到搜索内容正常回显了出来。如图5所示
图5
1.6在页面空白处点击鼠标右键,然后选择”查看页面源代码”选项,观察页面代码。如图6所示
图6
1.7发现网页将我们<script>标签的尖括号转义为了html实体字符,但是在输入框中,还有输入的内容,所以考虑将前面的input标签闭合,让script标签生效。如图7所示
图7
1.8构造payload:"><script>alert(/xss/)</script>
,输入框后提交,成功弹窗进入下一关。如图8所示
图8
1.9进入第三关后步骤如前两题一样,查看页面源代码。如图9所示
图9
1.10发现网站对两个显示的位置都做了html实体转义,于是我们尝试不使用标签而是向标签中添加监听事件,触发事件则产生弹窗。构造payload:’ οnmοuseοver='alert(/xss/),当我们鼠标进过了输入框,则会触发弹窗。如图10所示
图10
1.11进入到第四关查看页面源代码。如图11所示
图11
1.12发现网页将尖括号都替换为空了,于是参照第三关的方式,闭合双引号后构造一个事件触发后弹框,构造payload:" οnkeydοwn="alert(/xss/)当按下键盘时弹框。如图12所示
图12
1.13进入第五关,首先查看源代码:如图13所示
图13
1.14发现网页将script进行了转义,但是没有做其他的操作。所以我们尝试不使用script标签,而是使用一个链接配合javascript伪协议进行弹窗,构造payload:"><a href="javascript:alert(/xss/)">xss</a>
,如图14所示
图14
1.15完成了前五关,之后的关卡就靠大家自己摸索挑战了!