eveplw

导航

10.XSS攻防与绕过

一.XSS获取cookie

# JS获取当前页面cookie
<button onclick="alert(document.cookie)">点我有惊喜</button>

 

二.XSS的攻击方式

1.获取cookie,实现越权,如果是获取网站管理员的cookie,也可以叫越权(尽快注销账号,让cookie失效)。

2.钓鱼网站,模拟真实网站,获取用户信息(用户名密码),再跳转真实网站。

3.执行JS代码,用于DDOS攻击别的目标站点。

4.恶意链接,或者直接将网页植入到站点的<iframe>标签中。

 

三.XSS的防御手段

1.使用函数 htmlspecialchars() 把括号内的特殊字符转换成实体编码

$content  = htmlspecialchars($_GET['content']);

2.正则表达式或字符串判断

实体字符编码如果输出在事件属性中,还是有可能存在绕过的可能性。比如在a标签中,<a href=javascript:alert(1)>,

这种形式,没有尖括号也没有引号,就有可能被绕过。如果存在类似这种的情况,需要在链接属性中加上http://或

https://的正则表达式来限制。

 

四.XSS的绕过方式

1.绕过过滤

(1)前端限制,直接用F12开发者选项修改JS即可,或者用burpsulte绕过。

(2)字符过滤,双写,大小写绕过,通过注释符绕过,也可以通过换行符绕过。

(3)HTML实体转换:

字符实体是用一个编号写入HTML代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读。

javascript:alert("Hello")编号为:

十六进制:

2.绕过编码

明确浏览器解析的机制,明白机制后,选择对应的编码

3.其他技巧

(1)输出标签间的情况:测试<>是否被过滤或转义,若无则直接<img src=1 onerror=alert(1)>

(2)输出在script标签内:我们需要在保证内部JS语法正确的前提下,去插入我们的paylod。

如果我们的输出在字符串内部,测试字符串能否被闭合。如果我们无法闭合包裹字符串的引号,

这个点就很难利用了。可能的解决方案:可以控制两处输入且\可用,存在宽字节

 

 

 

 

 

 

posted on 2022-08-14 23:06  eveplw  阅读(195)  评论(0编辑  收藏  举报