渗透--XSS跨站脚本攻击篇

XSS概述

XSS跨站脚本攻击,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。程序员对参数输入和输出的控制不够严格,导致攻击者”精心构造“的脚本输入后,在输出到前端时被浏览器当作有效代码解析执行,从而产生危害

XSS的危害

1.劫持用户cookie
2.框架钓鱼
3.键盘记录
4.挂马

XSS漏洞存在位置

1.带参数的地方
2.输入输出的地方:登录,注册,修改,留言板
3.找带有变量的这些函数
print  echo  print_r  printf  sprintf  die  exit  var_dump  var_export

万能闭合方法

这是用的最多的JS代码
'"><script>alert(111)</script>
如果alert被干掉了,换成不常用代码
'"><script>prompt(111)</script>
'"><script>confirm(111)</script>

XSS分类

储存型XSS
高危漏洞,数据写入数据库,危害最大
交互的数据会被写入数据库,永久性存储,具有很强的稳定性


反射型XSS
中危漏洞,一次性数据,不写入数据库
交互的数据一般不会被存入数据库,只是简单把用户输入的数据反射给浏览器,一次性,所见即所得。


DOM XSS
低危漏洞,不用写入报告,只和浏览器有关系,和代码没关系,几乎没法利用,作用不大
不与后台服务器产生数据交互,通过前端 dom 节点形成的 XSS 漏洞


XSS盲打
XSS盲打就是攻击者在前台提交数据,不知道后台是否存在XSS漏洞的情况下,提交恶意JS代码在类似留言板等输入框后,网站解析了攻击者插入的恶意代码,当后台管理员在操作时,会触发插入的恶意代码,从而达到攻击者的目的

同源跨域

同源三要素:协议、域名、端口

JS不能跨域操作,访问其他页面的资源,为了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同域的任何js。那么为什么要有同源策略? 比如一个恶意网站的页面通过JS嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的JS脚本可以在用户登录银行的时候获取用户名和密码。
什么是跨域:当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域。不同域之间请求数据的操作,成为跨域操作。


跨域的五大标签

<img src="...">      // 加载图片
<iframe src="...">      // 框架标签
<a href="...">      // 加载链接地址
<link href="...">      // 加载css代码
<script src="...">      // 加载JS代码

同源策略修改
后台Access-Control-Allow-Origin:xxx,允许xxx跨域操作 

XSS绕过

前端JS限制绕过
长度限制,浏览器右键查看源代码,修改JS代码,删掉函数


大小写混合绕过
拼凑绕过,双写绕过
 <sc<script>ript>alert('111')</scr<script>ipt>


注释干扰后台绕过
<sc<!--test-->ript>alert('123')</scr<!--tshauie-->ipt>

编码绕过
后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入,浏览器对改编码进行识别时,会翻译成正常的代码。
注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的编码都是可以的使用HTML进行编码: <img src=x οnerrοr="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/> 

href输出绕过
javascript:alert(1111)
原理是直接代入a标签herf里面一样可以绕过htmlspecialchars


 js输出绕过
漏洞原理:前端页面用<script>标签
payload构造:
$ms='11'</script><script>alert(1111)</script> ;
用</script>闭合前面的标签,再插入恶意代码 

htmlspecialchars()函数
htmlspecialchars()函数的作用
 &     (和号)转义为        &amp
"      (双引号)转义为     &quot
'       (单引号)转义为     &#039
<     (小于)转义为         &lt
>     (大于)转义为         &gt
htmlspecialchars()函数配置参数
ENT_COMPAT - 默认仅编码双引号(单引号可绕过)
' οnclick='alert(111)'
ENT_QUOTES - 编码双引号和单引号(a标签可绕过)
javascript:alert(1111),XSS之href输出,$html.="<a href='javascript:alert(1111)'> 请点击</a>";
ENT_NOQUOTES - 不编码任何引号


Httponly绕过
1.表单劫持
2.获取浏览器保存的账号密码 

XSS防范

输入过滤
用正则过滤,根据业务需求进行正则过滤,比如要求输入手机号,则只允许输入手机号格式的数字
用函数过滤
干掉标签、特殊符号、关键字、标点符号等
输出转义,实体编码
 HTML实体编码以后,不要输出到a标签,超链接输出要转义,实体编码,所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体编码转义,输入到JS里面的进行JS转义(\)
不要用前端JS代码进行XSS攻击校验,因为JS代码很容易被攻击者拼接、利用,写XSS恶意代码攻击
在 cookie 里设置 Httponly 属性
WAF 防护
开启魔术符号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值