XSS

以下全是手打,如有手误欢迎提出来。

XSS原理

HTML注入并插入JS脚本,在注入后,若为存储型攻击,当用户再次访问页面时,运行js脚本完成攻击

由于网站提交信息内容未被检查,导致提交至后端服务器,当用户访问时激活js脚本

一般xss发生在留言板,在线信箱,评论栏等处,表现特征是用户可以自行输入数据,并且数据提交给服务器。

以下为常见的XSS攻击类型

0x01. 备:alert是javascript的弹窗意思

这个是提交数据没有任何限制时提交,当用户再次打开页面时,会出现弹窗(/xss),若把alert(/xss)转成攻击脚本,脚本便会在打开页面时在你的电脑上运行。

0x02.经典代码会在输入数据的地方加入强行转字符,例如

1234 这样你在输入栏里输入就无作用了

现在介绍一下闭合标签,如上所述给出以下改良编码输入对话

结合原先web代码拼接如下代码

这样就完成了一个完整的闭合路线 JS脚本又会正常运行。脚本再次注入成功

0x03.黑名单过滤模式

所谓黑名单过滤,就是开发者将script拉入了黑名单,当提交页面中包含script时自动屏蔽

这个时候要猜测一下后台的过滤机制,有经验的xss漏洞研究人员会利用查侧漏语句进行尝试,查侧漏语句为xss中必须的各类关机字及词,如

<>、!、’、"、*、#、[]、{}等。当然,也可以直接利用测试语句进行提交测试,根据个人习惯进行语句测试,如

提交后就变成了

alert(/xss)的文本文件了

这时尝试是否能绕过黑名单的限制,如下代码

执行后发现成功,因为js语言不区分大小分别的特征

这个时候可以和开发说可以使用 strtolower() strtoupper()强字符串转换为大小写

0x04.多重嵌套测试

当大小写混合的模式不通时,就可以使用多重嵌套了

可以尝试构建如下代码

<scr

因为有

这样提交后再次注入成功

这个时候可以使用针对嵌套防护的代码

if(preg_match(’/()+/’, &String)){
return false}

利用正则表达式对嵌套单词的过滤,从而避免利用嵌套方式绕过后台检测。、

0x05.宽字节绕过

当以上的测试方法都无法成功

可以使用抓包工具在提交栏随便输入一些东西,这里我输入的是abc,然后参数的输出位置

以下为测试代码



输入你的用户名:

首先要了解编码 如GB2312 GBK GB18030 还要会用抓包工具 例如BS Fiddler

然后要有一定的基础不太了解可以和我细谈

分析代码后发现 我输入的abc是在’ '之间切运用了textarea区域

这时考虑上面的闭合加上新的和JS属性的脚本尝试以下脚本

';alert(/xss/);//

通过修改url中的参数来提交这段代码,这时代码如下

通过 ’ 来完成闭合然后就可与使用标签的JS属性来执行脚本

提交完成后运行时发现无法出现xss弹窗

利用浏览器查看源码发现以下web页面代码

发现之前提交的信息被单引号进行转义了。按正常浏览器的解析流程,如果用户输入中的特殊字符被转移了,并放到了引号之中,那么用户就无法打破之前的JS属性构造来执行js语句了

这个时候就要利用编码组合了,利用浏览器查看源码工具找到字符编码

GBK编码是存在宽字节问题的,主要表现在GBK编码第一个字节(高字节)的范围是0x810xFE,第二字节(低字节)范围是0x400x7E与0x80~0xFE

GBK就是以16进制对字符进行编码。在GBK编码中""符号的十六进制表示为0x5C,正好在GBK的低字节中。因此如果在后面添加一个高字节编码,那么添加的高字节编码会与原有编码组合成一个合法字符。于是重新构造代码如下

%bf’;alert(/xss/);//

修改后重新提交,脚本被成功执行

目前现在UTF-8编码开始普遍,所以宽字节的漏洞也越来越少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值