每日漏洞|跨站脚本攻击

文章详细介绍了XSS跨站脚本漏洞的原理,包括数据输入点、输出点和恶意输出的检测方法,并展示了通过抓包工具检测XSS的过程。同时提出了输入过滤和输出编码作为漏洞修复策略。
摘要由CSDN通过智能技术生成

01 漏洞描述

当应用程序没有验证输入数据并产生输出时,这个时候就会产生XSS漏洞,攻击者可利用此漏洞进行Cookie窃取、会话劫持、钓鱼等攻击。

“一切输入都是不安全的”,Web应用的漏洞几乎都是由一个原因造成:不能在使用前正确验证输入的数据。XSS便是其中之一,攻击者可以在网页中写入恶意脚本,用户访问或点击的时候就会被执行。通常是由JavaScript编写,偶尔也会使用ActionScript、VBScript。XSS能利用到何种程度,取决于如何编写脚本,当然,和上下文环境也有关系。

02 漏洞检测

要判断系统是否存在XSS,只需要测试能否操纵应用程序参数输入,使其产生恶意输出即可,因此XSS漏洞的检测,有三大要点:输入点,输出点,以及恶意输出。

输入点,数据输入的参数位置。客户端与服务器端的交互,是通过请求和响应实现的,请求的时候往往会附带一些参数,这些参数就是数据的输入点,我们需要修改这些参数的值来影响服务器端的响应,并根据响应找出输出点。

输出点,输入数据的输出位置。有些数据输入后,经过服务器处理,往往会返回给客户端,可能出现在html标签中,也可能出现在script脚本中,我们需要根据位置的不同而使用不同的XSS构造方式。

恶意输出,在XSS中通常是指由JavaScript编写的代码。这些代码能实现一定功能和页面效果:弹框、发送Cookie、键盘记录等。

寻找输入点

 

页面有两个输入框,要求输入名字和姓氏,然后点击GO,姓名就会显示在下方。我们现在来检测这个功能是否存在XSS。

开启抓包工具,设置好代理,输入名字和姓氏。

 

点击GO,抓到如下请求包。请求行中有三个参数,其中两个参数正好对应两个输入框,这三个参数都是潜在的XSS输入点,特别是输入框对应的firstname参数和lastname参数。

 

寻找输出点

输出点我们可以通过在响应中查找输入点的值来找到。以firstname为例,我们在响应中查找bwapp这个值的位置。

 

发现响应中有8个匹配的值,难道有8个输出点?很多时候,为了更快速、准确的找出输出点,我们通常会将输入点的值修改为独一无二的值,如1234567,abcde等,以保证不会和系统其他参数值雷同。

 

这样就准确找到了firstname这个输入点的输出点。

恶意输出

最终XSS的检测需要结合输入点和输出点。在输入点的值中加入恶意代码,查看输出点是否会产生恶意输出。

 

 

发现服务端没有对用户输入做任何处理就直接输出到页面上,弹出一个警告框。这就证明firstname参数存在XSS。依此流程检测,发现lastname同样存在XSS,但form参数不存在XSS。

03 漏洞修复

输入过滤;对用户的输入进行检测,过滤掉输入中的非法字符。

输出编码;在将输入输出到页面之前,将输入中未过滤的特殊字符进行转义,使其以文本形式展示,而不是被解析成页面结构或脚本。

04 PS

在这里要申明一下,每日漏洞系列旨在告诉大家发现漏洞的最基本操作,每日学会一个漏洞的检测方法。就比如做菜,每日漏洞系列会教你第一步点火,第二步放油,第三步炒菜,第四步出锅,但不会教你用多大的火,放多少油,炒多久,这些细节我会在其他文章里深入介绍,所以如果只看这篇文章,我只能保证你会做菜,这菜能不能吃,只能交给命运了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值