0%

第63天-XSS跨站&CSP策略&HttpOnly属性&Filter代码&符号标签&AI绕过&工具项目

演示案例:

WEB攻防-XSS跨站-安全防护&CSP&Httponly&WAF等

➢ WEB攻防-XSS跨站-工具项目&XSStrike&Chypass_pro

一、CSP

内容安全策略是一种可信白名单机制,来限制网站中是否可以包含某来源内容。

该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单,

它的实现和执行全部由浏览器完成,开发者只需提供配置。

禁止加载外域代码,防止复杂的攻击逻辑。

禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。

禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。

禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。

合理使用上报可以及时发现XSS,利于尽快修复问题。

开没开CSP直接可以在数据包中看到

实验:

1、设置任何域JS加载

2、设置本地域JS加载

绕过利用条件:文件上传JS绕过


只有当前域的x.js执行了

3、设置本地域JS外加限制目录

绕过利用条件1:目录有302跳转绕过


生效的是本地的js代码,因为static下有一个302.php做了一个重定向操作,这个重定向操作能够目录遍历,所以执行了当前域的js

绕过利用条件2:文件上传JS(指定目录)


只有指定目录的js代码生效了

4、其他绕过技术

参考:https://xz.aliyun.com/news/11816

二、http_only

一个可以在设置Cookie时使用的标记;当一个Cookie被标记为HttpOnly时,JavaScript无法访问该Cookie,只能通过HTTP(或HTTPS)协议传输。

这一特性有助于防止跨站脚本攻击(XSS),因为攻击者无法通过JavaScript代码窃取存储在 HttpOnly Cookie中的敏感信息。

HttpOnly**Cookie**的一个安全属性,由服务器通过Set-Cookie响应头设置,用于限制客户端脚本(如JavaScript)对Cookie的访问。他的核心目的是防御XSS攻击对敏感Cookie的窃取。

:::info
cookie名,cookie值,cookie失效时间,cookie有效路径,cookie有效域名,secure安全属性,httponly安全属性

setcookie(‘name’, ‘xiaodi’, time() + 3600, ‘/xss’, ‘’, false, true);

:::

判断启用httponly的方法,就是在浏览器存储cookie的地方,看httponly字段就行

实验:

开启和未开启HttpOnly时XSS窃取Cookie的加载情况


name开了httponly,pass没开


所以只弹窗pass

绕过:有但鸡肋

(1)CVE-2012-0053

(2)PHPINFO页面

(3) Flash/Java

blog.csdn.net/weixin_42478365/article/details/116597222

思路:一般可不采用获取Cookie利用,采用方式(钓鱼,浏览器攻击框架等)

三、WAF或代码Filter

黑盒XSS手工分析:

-页面中显示的数据找可控的(有些隐藏的)

-利用可控地方发送JS代码去看执行加载情况

-成功执行即XSS,不能成功就看语句输出的地方显示(过滤)

-根据显示分析为什么不能执行(实体化,符号括起来,关键字被删除等)

1、人工分析

演示:xss-lab(关卡)

https://xz.aliyun.com/t/4067

https://xz.aliyun.com/news/11816

https://github.com/Re13orn/xss-lab

blog.csdn.net/2301_80031208/article/details/139159525

level1:

直接中在name参数后输入恶意js语句就行

1
<script>alert(1)</acript>

level2:

发现并没有弹窗,说明js没被正常执行,我们审查元素看一下

这里就很明显了,<>被实体化了,所以执行不,我们换个地方看看呢,发现搜索框也有js语句

发现这个js语句没被实体化,只是被放在了input标签里的value值中,所以思路就是闭合前面的属性和标签,让js语句能够正常执行

1
"><script>alert('xss')</script>

就通关了

level3:

首先思路和level2一样,审查元素看一下,这里搜索框“也被实体化了,所以闭合标签这种方法就不能用了,只能用事件了。

https://xz.aliyun.com/news/3699这里有标签介绍

‘ onfocus=alert(1) ‘就通过了

level4:

这里和level3基本一样,都是用事件来完成,只不过用的是双引号来闭合其他属性” onfocus=alert(1) “

htmlspecialchars()函数:把特殊字符转为html实体,用来防御xss。但是默认情况下只转双引号,不转单引号

在html属性中Javascript:alert(1)和alert(1)是一样的,javascript:是伪协议就是告诉浏览器后面内容当做js执行,事件属性默认本身就是执行js,所以没区别。但是在a标签中href中必须加javascript:要不然就当做网址了。

level5:

还是用onfocus标签发现on被过滤成o_n了,那就换一个事件呗,用a标签先把前面闭合面用a标签,当然其他事件也是可以的。

1
“><a href=javascritp:alert(1)>xxx</a>

level6:

这里使用大小写绕过,那么我们作为防护方来说,那怎么避免大小写绕过呢,一个一个过滤那也太麻烦了,方案一:将用户输入转为小写,在做关键词黑名单匹配,php来说用strtolower()函数,htmlspecialchars($data,ENT_QUOTES(必开)),方案二:针对大小写绕过的正则,/focus/i

level7:

1
输入"><script>alert(1)</script>

1
输入'><script>alert(1)</script>

发现script被过滤了,那尝试大小写呗,但是不太行,输入内容被strtolower函数转换成小写了,那就尝试双写绕过

1
"><sscriptcript>alert('xss')</sscriptcript>就绕过了

level8:

这里用Unicode,为什么呢?你输入Unicode编码后的东西后端看到的是乱码,后端看不到javascript所以就放行,浏览器解析html时会自动解码。

用Unicode绕

&#x006a&#x0061&#x0076&#x0061&#x0073&#x0063&#x0072&#x0069&#x0070&#x0074&#x003a&#x0061&#x006c&#x0065&#x0072&#x0074&#x0028&#x0031&#x0029

level9:

代码审计中就能看出来,友情连接必须有http://其余和level8一模一样

我原本想法是把javascript:alert(1)编码了,然后在开头加http://但是不行,这样的话就会被认为是一个网址不是js代码了,我们可以在javascript:alert(1)编码最后加//http://用//注释掉

level10:

隐藏属性触发闭合。就是表单中有的标签type是hidden,起始有属性值为你输得js,但是你看不到,那你就type改为text想办法看到呗

还是onfocus事件,这是一开始的样子

这是成功后的样子

11-20

https://blog.csdn.net/l2872253606/article/details/125638898

2、工具项目

https://github.com/s0md3v/XSStrike

https://github.com/wxwhhh/Chypass_pro(推荐使用)


安装好后配置api key我这里用的是千问,因为有免费额度😄

用的时候就正常抓包,把包转发到这里,然后在需要xss的地方写一个保存然后开始ai分析就行,我就不演示了

演示:

https://xss.xiejiahe.com/