php scrscriptipt,xss跨站脚本攻击 (初级-中级-高级)

xss跨站脚本攻击 (初级-中级-高级)

发布时间:2018-06-08 12:32,

浏览次数:518

, 标签:

xss

XSS(`Cross Site

Scripting`)恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句;另一类则是来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页

例.

url/example.php?name=

例.

过滤了小写的`

url/example2.php?name=

url/example.php?name=

例.

过滤了不区分大小写的``,可以使用嵌套的script标签绕过,

url/example.php?name=ipt>alert("xss")ipt>

例:

img src调用图片失败然后执行后面的动作,代码如下:

从代码中我们可以看到,包含script字符串即报错,可以使用img标签绕过。

URL/example.php?name=

例:

包含alert字符串即报错,可以使用编码方式绕过。

URL/example.php?name=

40, 39, 120, 115, 115, 39, 41))

例:

从代码可以得出直接在js环境中输出php变量,可以通过构造js脚本绕过。

例.

代码在js环境中输出通过html编码的php变量,htmlentities没有过滤单引号,可以使用单引号绕过。

url/example.php?name=';alert('xss');'

例.

post地址使用了当前url,我们构造当前url地址达到xss目的,尝试构造代码如下

url/example.php/[/url]">

例.

xss 直接在页面输出锚点id,构建一个带xss的锚点即可,构造代码如下

刷新网页后,即可弹窗

反射型XSS

输入`test`。点击提交后,弹出XSS页面。

代码如下:

输入的内容直接在页面显示。这里可以构造多种方式,达到恶意攻击的目的。

页面代码

源代码

从源代码看出此处对输入name的值仅检测是否输入,没有进行任何安全性的过滤和处理。所以导致了XSS漏洞。

中等级别反射型XSS:

源代码如下:

使用str_replace()函数将`

输入``即可。

高级别反射型XSS

源代码如下:

可以看出此处对GET来的name的参数使用htmlspecialshars()函数进行了转换,htmlspecialchars()函数主要是将一些预定义的字符转换为HTML实体。

使得此处输入代码后无法执行。但是使用该函数过滤并不能保证万无一失,需要看具体场景。构造特殊的编码或者语句是可以绕过该函数的防御。但在此处无法绕过该函数。

存储型XSS:

此处为留言板类型,随意输入内容,会将输入的内容显示出来。

输入:`test`。点击提交后,弹出XSS页面,并且每次刷新都会弹窗。

查看页面源代码,看出输入的输入的内容直接在页面显示。这里可以构造多种方式,达到恶意攻击的目的。

源代码如下:

从源代码看出此处对输入Name,和Message中的仅做了防止SQL注入的过滤,没有对输入的字符安全性的过滤和处理。所以导致了XSS漏洞。

中等级别反射型XSS

源代码如下

可以看出此处对GET来的Message的参数使用htmlspecialshars()函数进行了转换,htmlspecialchars()函数主要是将一些预定义的字符转换为HTML实体。使得此处输入代码后无法执行。但是使用该函数过滤并不能保证万无一失,需要看具体场景。构造特殊的编码或者语句是可以绕过该函数的防御。但在此处无法绕过该函数。但是看Name参数是发现对name只采用了对`

使用`str_replace()`函数将``即可。但是经过测试,Name处限制了字符长度。但是PHP源码中并没有对Name的长度进行验证。可以采用分段绕过,即“/*

*/

”的方式,此方法在其他XSS试验中有详细说明,可以参考。也可直接修改html源码绕过的方式进行绕过,这里采用修改html,使用Firefox中的firebug插件进行修改。

可以看出此处限制最长长度为10个字符。我们修改此处的代码的maxlength的值10改为100,在Nmae处输入代码即可【``】。点击提交即可。

高级别反射型XSS

可以看出此处对Message和Name的参数使用htmlspecialshars()函数进行了转换,htmlspecialchars()函数主要是将一些预定义的字符转换为HTML实体。使得此处输入代码后无法执行。但是使用该函数过滤并不能保证万无一失,需要看具体场景。构造特殊的编码或者语句是可以绕过该函数的防御。但在此处无法绕过该函数。

XSS防御

基于代码修改的防御

和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免:

步骤1、对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。

步骤2、实现Session标记(`session tokens`)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。

步骤3、确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP

only的cookie。

基于特征的防御

XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS攻击。

传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就可以认为存在XSS攻击。

XSS攻击分类

XSS漏洞一般有两种类型攻击。

一类是来自内部的攻击,主要指的是利用WEB

程序自身的漏洞,提交特殊的字符串,从而使得跨站页面直接存在于被攻击站点上,这个字符串被称为跨站语句。这一类攻击所利用的漏洞非常类似于SQL Injection

漏洞,都是WEB程序没有对用户输入作充分的检查和过滤。

另一类则是来来自外部的攻击,主要指的自己构造XSS

跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个跨站网页放在自己的服务器上,然后通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。这一类攻击的威胁相对较低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值