本文目录一览:
- 1、CSP策略及绕过方法
- 2、通过Input 文件上传进行XSS攻击
- 3、45. 从零开始学springboot撸一个Xss过滤器-注解实现
- 4、XSS攻击的背景知识
- 5、php下怎样防止XSS攻击
- 6、网络安全就业都需要掌握什么技术?
CSP策略及绕过方法
XSS的时候经常要绕过CSP,这里总结一下
一个CSP头由多组CSP策略组成,中间由分号分隔,就像这样:
其中每一组策略包含一个 策略指令 和一个 内容源 列表
default-src 指令定义了那些没有被更精确指令指定的安全策略。这些指令包括:
script-src定义了页面中Javascript的有效来源
style-src定义了页面中CSS样式的有效来源
img-src定义了页面中图片和图标的有效来源
font-src定义了字体加载的有效来源
connect-src定义了请求、XMLHttpRequest、WebSocket 和 EventSource 的连接来源。
child-src 指定定义了 web workers 以及嵌套的浏览上下文(如frame和iframe)的源。
内容源有三种:源列表、关键字和数据
源列表是一个字符串,指定了一个或多个互联网主机(通过主机名或 IP 地址),和可选的或端口号。站点地址可以包含可选的通配符前缀 (星号, '*'),端口号也可以使用通配符 (同样是 '*') 来表明所有合法端口都是有效来源。主机通过空格分隔。
有效的主机表达式包括:
http://* .foo.com (匹配所有使用 http协议加载 foo.com 任何子域名的尝试。)
mail.foo.com:443 (匹配所有访问 mail.foo.com 的 443 端口 的尝试。)
(匹配所有使用 https协议访问 store.foo.com 的尝试。)
如果端口号没有被指定,浏览器会使用指定协议的默认端口号。如果协议没有被指定,浏览器会使用访问该文档时的协议。
CSP的设置可能情况太多,这里只讨论几个比较典型的情况。
在default-src 'none'的情况下,可以使用meta标签实现跳转
在允许unsafe-inline的情况下,可以用window.location,或者window.open之类的方法进行跳转绕过。
CSP对link标签的预加载功能考虑不完善。
在Chrome下,可以使用如下标签发送cookie(最新版Chrome会禁止)
在Firefox下,可以将cookie作为子域名,用dns预解析的方式把cookie带出去,查看dns服务器的日志就能得到cookie
有些网站限制只有某些脚本才能使用,往往会使用script标签的nonce属性,只有nonce一致的脚本才生效,比如CSP设置成下面这样:
那么当脚本插入点为如下的情况时
可以插入
这样会拼成一个新的script标签,其中的src可以自由设定
Blackhat2017上有篇 ppt 总结了可以被用来绕过CSP的一些JS库。
例如假设页面中使用了Jquery-mobile库,并且CSP策略中包含"script-src 'unsafe-eval'"或者"script-src 'strict-dynamic'",那么下面的向量就可以绕过CSP:
在这个PPT之外的还有一些库也可以被利用,例如RCTF2018中遇到的amp库,下面的标签可以获取名字为FLAG的cookie
1.如果页面A中有CSP限制,但是页面B中没有,同时A和B同源,那么就可以在A页面中包含B页面来绕过CSP:
2.在Chrome下,iframe标签支持csp属性,这有时候可以用来绕过一些防御,例如" "页面有个js库会过滤XSS向量,我们就可以使用csp属性来禁掉这个js库。
meta标签有一些不常用的功能有时候有奇效:
meta可以控制缓存(在header没有设置的情况下),有时候可以用来绕过CSP nonce。
meta可以设置Cookie(Firefox下),可以结合self-xss利用。
通过Input 文件上传进行XSS攻击
最近发现网站出现了一个安全漏洞,可以通过控制台修改Input的accept属性来上传不允许的文件类型。
对于前端来说,通过使用Input的type=file 来进行本地文件的上传是最常用的方式。
使用Input进行文件上传时,有accept属性可以进行文件类型的限制,比如想上传图片文件,将accept设置成image/ ,上传音频则设置成audio/ 。使用方便快捷。
漏洞:当前端使用Input进行上传时,有心人只需要在控制台中找到上传文件的Input标签,然后将accept的参数修改一下便可越过这个限制,上传其他类型文件,比如本应该上传图片,通过这样修改可以上传audio\video\word\html\js等文件。给系统造成很大的安全漏洞。因此需要针对此漏洞进行限制。
修改:我的做法时当选择完文件之后用js来做个判断,判断文件类型是否符合条件
不足:这种做法可以弥补一些Input的不足,但是不能完全解决,比如将可执行脚本用符合条件的文件中,所谓前端的都是可以绕过的,因此还需要在后端做限制。前端加限制是为了提高漏洞使用的门槛,降低风险。
注:遇到问题记录,仅供参考
45. 从零开始学springboot撸一个Xss过滤器-注解实现
上章通过Filter实现了Xss全局过滤器
可能小伙伴还有点不满, 全局意味着“一刀切”,
虽然我们也有白名单黑名单设置, 但是, 白名单黑名单针对的是整个方法或整个实体类
举个例子, 我定义了个实体
可能业务上有限制(比如name限制了只有5个字符长),
那么name其实不可能存在Xss注入风险了,
程序只需要对info和des属性做转义即可
如果采用Filter, 意味着People的所有属性都会检测转义, 好像没啥必要!
那么, 可以针对性的指定字段进行Xss的过滤转义么?
为了应对这样的需求, 咸鱼君采用Aop注解来实现这么个Xss过滤器.
PS: 和Filter一样, 我们统一对入参Xss过滤, 确保参数的处理方式统一! 所以, 程序中获取的参数值都是转义后的数据!!
废话不多说, 往下看!
加入必要的pom依赖
针对方法, 参数, 属性分别定义三个注解
XssMethod
XssParam
XssField
针对注解实现切面Aspect
XssAspect
注释写的很详细, 就不多废话了!
接下来我们写个案例来测试测试
首先在启动类上启用切面
定义一个实体People, 并对info,des属性加上注解进行xss过滤
最后编写controller
json方式
键值对方式
XSS攻击的背景知识
1.1 什么是XSS攻击
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
数据来源:2007 OWASP Top 10的MITRE数据
注:OWASP是世界上最知名的Web安全与数据库安全研究组织
在2007年OWASP所统计的所有安全威胁中,跨站脚本攻击占到了22%,高居所有Web威胁之首。
XSS攻击的危害包括
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
1.2 XSS漏洞的分类
XSS漏洞按照攻击利用手法的不同,有以下三种类型:
类型A,本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。其攻击过程如下所示:
Alice给Bob发送一个恶意构造了Web的URL。
Bob点击并查看了这个URL。
恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在Bob电脑上。
具有漏洞的HTML页面包含了在Bob电脑本地域执行的JavaScript。
Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令。
类型B,反射式漏洞,这种漏洞和类型A有些类似,不同的是Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。其攻击过程如下:
Alice经常浏览某个网站,此网站为Bob所拥有。Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)。
Charly发现Bob的站点包含反射性的XSS漏洞。
Charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice。
Alice在登录到Bob的站点后,浏览Charly提供的URL。
嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。此脚本盗窃敏感信息(授权、信用卡、帐号信息等)然后在Alice完全不知情的情况下将这些信息发送到Charly的Web站点。
类型C,存储式漏洞,该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。其攻击过程如下:
Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。
Charly注意到Bob的站点具有类型C的XSS漏洞。
Charly发布一个热点信息,吸引其它用户纷纷阅读。
Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走。
类型A直接威胁用户个体,而类型B和类型C所威胁的对象都是企业级Web应用。
php下怎样防止XSS攻击
在PHP中修补XSS漏洞,我们可以使用三个PHP函数。
这些函数主要用于清除HTML标志,这样就没办法注入代码了。使用更多的函数是htmlspecialchars() ,它可以将所有的""与""符号转换成"" 与"gt;"。其它可供选择的函数还有htmlentities(), 它可以用相应的字符实体(entities)替换掉所有想要替换掉的特征码(characters)。
PHP Code:
?
// 这里的代码主要用于展示这两个函数之间输出的不同
$input = 'scriptalert(1);/script';
echo htmlspecialchars($input) . 'br /';
echo htmlentities($input);
?
htmlentities()的另一个例子
PHP Code:
?php
$str = "A 'quote' is bbold/b";
echo htmlentities($str);
echo htmlentities($str, ENT_QUOTES);
?
第一个显示: A 'quote' is bbold/b
第二个显示:A 'quote' is bbold/b
htmlspecialchars()使用实例
PHP Code:
?php
$new = htmlspecialchars("a href='test'Test/a", ENT_QUOTES);
echo $new;
?
显示: a href='test'Test/a
strip_tags()函数代替.删除所有的HTML元素(elements),除了需要特别允许的元素之外,如:i, b 或p.
strip_tags()使用实例
PHP Code:
?php
$text = 'pTest paragraph./p!-- Comment -- Other text';
echo strip_tags($text);
echo "\n";
// allow p
echo strip_tags($text, 'p');
?
现在我们至少已经知道有这些函数了,当我们发现我们的站点存在XSS漏洞时就可以使用这些代码了。我最近在我的站点上的GoogleBig(一个Mybb论坛的插件)视频部分发现了一个XSS漏洞,因此我就在想如何使用这些函数写段代码来修补这个搜索漏洞。
首先我发现问题出在search.php这一文件上,现在让我们看看这个查询及输出查询结果中的部分代码研究一下:
PHP Code:
function search($query, $page)
{
global $db, $bgcolor2, $bgcolor4, $sitename, $io_db, $module_url, $list_page_items, $hm_index;
$option = trim($option);
$query = trim($query);
$query = FixQuotes(nl2br(filter_text($query)));
$db-escape_string($query);
$db-escape_string($option);
alpha_search($query);
...
在这种情况下,我们通过使用$query这一值作为变量,然后使用htmlentities()这一函数:
PHP Code:
$query = FixQuotes(nl2br(filter_text(htmlentities($query))));
如果你对这三种函数还有有疑问可以使用PHP手册来查看:
网络安全就业都需要掌握什么技术?
网络安全领域飞速成长,网络安全人才供不应求。这种人才短缺造就了一个高薪且求职者可选择范围很大的行业。但是网络人才的短缺现象是由多种因素造成的,其中就包括雇主对求职者要求掌握的技能太多。
Rook Security 的人才与文化经理 Keri Christman 称:“雇员可能很难具备职位要求的所有技术、经验和某些无形的东西。”
行业和威胁态势变化太快,有天赋的人才都难以跟上新技术和需求的脚步,所以人才缺口越拉越大。当前毫无疑问是求职方市场,但因为应聘要求越来越高,竞争依然激烈。
因此,虽然网络安全领域就业机会大把抓,老板们却为应聘者设置了高准入门槛,没有兼具技术、学历和经验便难以登堂入室。
如果你正考虑从事网络安全工作,你可能会发现自己不知道从哪里开始。首先,你可能会怀疑网络安全领域是否适合自己?老板们最看重哪些技能?你要如何获得在该求职市场中竞争所需的技能?
对于以上问题,浸淫该领域几十年的网络安全专家们最有发言权。
网络安全从业者的顶级技能
1. 批判性思维
SplunkCIRT高级主管 Richard Bejtlich 和 Cheetah Digital 首席安全官 Jill Knesek 都认为,批判性思维是网络安全人员所具备的最重要技能。
Knesek解释道:“批判性思维,或者客观分析问题以形成判断的能力,是网络安全从业者最重要的技能。对我来说,批判性思维就是知其然更知其所以然,这样才能做出明智决策并实现解决方案,搞定根源问题而不仅仅是缓解表面症状。”
网络安全是个不断变化的领域,黑客和攻击方法一直在进化,网络威胁本身也在不断发展,比如恶意软件、勒索软件、特权误用等等。客观分析每个问题,不断深挖问题根源的能力,是在网络安全的世界里获得成功的重要技能。
我的FBI背景我对从事网络安全行业帮助良多。我把每个问题或事件当做一场调查来看待,通过经典的‘人物、事件、地点、时间和方法’问题了解情况,但只有问出‘为什么’这个问题,我才能真正理解该如何预防未来的事件。
Knesek在网络安全领域就职20余年,担任过内部角色和面向客户的角色。她曾是FBI特别探员,供职洛杉矶网络重案组,侦办过数起重大网络犯罪案件,包括对著名顶级黑客 凯文·米特尼克和少年黑客黑手党男孩(Mafiaboy)的调查。如今,Knesek就任 Cheetah Digital 首席安全官,负责领导整个企业的安全工作。
与Knesek观点类似,SplunkCIRT的 Richard Bejtlich 评论道:批判性思维是最重要的网络安全技能。将复杂情况去芜存菁对缓解数字问题至关重要。网络安全人员必须能观察环境,挑战假设,创建行动方案并执行操作。批判性思维是该过程中每一步的驱动力。
自1998年起,Bejtlich就在捍卫西方利益不受高级数字入侵者侵害。他推广网络安全监视解决方案,通过检测并响应数字威胁,帮助全球企业保持业务正常运转。Bejtlich如今是SplunkCIRT的高级主管。
2. 业务分析技能和黑客精神
Privacy PC 编辑,《安全状态》丛集作者 David Balaban 表示:有人觉得信息安全专业人员最有价值的技能归结为能选择正确防护解决方案和最佳工具以建立并实现复杂的安全系统。也有人认为信息安全专家就应该具备黑客精神,像攻击者一样思考,知道怎么实施攻击,这样才能实现有效的防护机制。
但最终,Balaban 认为上述两种技能都是次要的:
IT安全专家最应该成为的是业务分析师。他应对公司业务过程和所有在用的自动化控制系统都烂熟于心。这样他才能把公司基础设施按照安全等级明确划分成各个子系统,专注在对业务工作流影响最大的实体上。
第二重要的技能是与管理层沟通的能力。更进一步,IT安全专家还需要心理学家的技能。这可以使他更好地理解老板的兴趣、重心和痛点。IT安全专家应能说服管理层将资金分配到解决特定安全问题上。这可真正是门艺术。
David Balaban 是在恶意软件分析和防病毒软件评估领域具有15年从业经验的计算机安全研究员。他运营着Privacy-PC.com项目,该项目就当代信息安全问题提出专家意见,包括社会工程、渗透测试、威胁情报、在线隐私和白帽子黑客行为。
3. 服务与保护的真心
Cybersecurity Ventures 主编 Steve Morgan 的观点是:最好的网络安全人员有真切而热诚的服务精神。
Morgan称:“对网络安全人员而言最重要的资产,是服务社会、保家卫国的真心。”
最重要的技能是对猫鼠游戏的热情。我们这行里最棒的人天生喜欢追捕敌人。虽然这种天性无法培训,却能由大学和职场铸就。兼具道德品性和追捕本能的人非常适合从事网络安全行业。
Steve Morgan 是 Cybercrime Magazine 和 Cybersecurity Ventures 的创始人兼主编。他的博客和论文常见诸于CSO、Dark Reading、Entrepreneur、福布斯、IDG和其他主流媒体。
这些网络安全领袖指出的顶级技能中有很多都是可以学习和磨炼的。想要习得这些技能跻身网络安全领域,或者在网络安全职业上更进一步,最好的办法就是通过高等教育。很多情况下,高等教育能提供发展当今主流雇主所要求技能的机会。