Aggregator
邮箱信息收集
施耐德充电桩漏洞挖掘之旅
大家好,我是BaCde,今天来说一说2020年底针对施耐德充电桩的漏洞挖掘过程。此次挖掘最终实现了通过远程无需用户交互场景下实现Root权限shell获取(一键远程Rootshell获取)。官方已经于今年7月份公布漏洞补丁以及相应的CVE编号。
0x01 为什么选择施耐德?作为车联网安全研究来说,充电桩作为车联网必要组成部分,具备实际的研究价值与意义。而面临如此多的品牌,选择哪个目标作为研究对象是面临的第一个问题。为了能够更快的实现我选择了几个衡量指标,包括官方有响应中心、固件可下载、市面上可以买到、互联网上有暴露的目标。分别对应合法性、静态分析、动态测试、漏洞可产生实际的影响。
根据指标通过网络上去收集信息,最终将目标锁定在施耐德。同时,施耐德也在CVE官方的CNA列表中,报送的漏洞可以获得CVE编号。
0x02 目标设定确定了要研究的对象,接下来就要确定一下我们要实现什么样的效果。这可以使得在分析过程中保持聚焦,不偏离方向。目标设定如下:
- 远程获取设备Root权限
- 无需登录,无需交互
根据上述设定最直接的方式就是寻找远程命令执行漏洞,即要RCE类型漏洞。
0x03 信息收集一切准备就绪,开始我们的漏洞挖掘之旅。
hAFL1 ? Our Journey of Fuzzing Hyper-V and Discovering a Critical 0-Day
黑色星期三:Popsicle 和 Wault 被掳走的 2000 多万美元
分享一个SQL Server安全评估工具-SqlKnife
CVE-2017-11826 漏洞分析利用
应急响应预案该怎么制定?
UC San Diego Health Attack
VirusTotal APK Malware Detection Data 2021-07
At Trustlook, we monitor live feed from VirusTotal (VT). On a daily basis, we collect APK samples from VT along with detection results from Anti-Virus (AV) vendors hosted on VT. Using a conservative labeling policy, we are able to select thousands of benign and malicious APK samples from millions of
VirusTotal APK 病毒检测统计 2021-07
VirusTotal (简称 VT), 是谷歌旗下一家免费提供可疑文件扫描服务的网站. VT 上有超过50家反病毒引擎提供实时扫描服务. 我们每天收集用户上传到 VT 的 APK 样本以及各家引擎的扫描结果, 并通过保守的策略筛选出数万的良性和恶意样本, 然后统计各家引擎的病毒检测结果.
每天, 我们会生成一个包含各家检测数据的 CSV 文件. 文件中会列出样本的 MD5 哈希值, 标签 (0 标示良性样本, 1 标示恶意样本), 以及各家的检测结果 (0 表示检测为良性样本, 1 表示检测为恶意样本). 每个月的 CSV 文件会被打包并上传到亚马逊 AWS S3. 有兴趣的读者可以下载检验各家杀毒引擎的检测结果.
以下为检测结果的下载链接:
https://virustotal-results.s3-us-west-1.amazonaws.com/VirusTotal_Results_20210701_20210731.zip
下面的表格列出了各家杀毒引擎的统计结果, 其中各列的含义如下:
- Vendor
从github 获取域名信息
X-C2使用文档及二开记录(更新中)
当年的毕设-cpf (一个简易的协议 fuzzer) - hac425
必须加强建设DevSecOps的Ops阶段
Putting Purpose First as an Akamai Co-Op
利用 multipart boundary 绕过 WAF
Java反序列化数据绕WAF之加大量脏数据
别想偷我源码:通用的针对源码泄露利用程序的反制(常见工具集体沦陷)
0x00 关于本文 是的没错我又去蹂躏安全工具了,和以前我单个单个地欺负不同,这次发现的攻击手段是通用的,可以通杀大部分源码泄露漏洞利用程序。 本文会包含常见泄露漏洞的原理介绍(Git/Svn),利用工具自身的安全风险分析,简单易懂的POC制作方式,针对常见工具的攻击测试,以及提升反制威力的方法及展望。
0x01Git泄露:漏洞原理介绍 Git是什么大家应该都很清楚(不知道Git是啥的人多半是不肯来光临这个博客的) 有些开发人员直接把代码clone到服务器的web目录来部署,但是开发人员或许不知道的是,clone下来的不只是代码,还有一个.git目录,这个目录被叫做版本库。攻击者可以通过访问这个目录,解析其中的文件,dump整站源码。 想要更深入地理解Git泄露漏洞,了解攻击流程,就需要了解.git目录的结构
tree一下这个目录,发现内容如下
index文件中包含了这个项目中的各个文件的信息,包括文件路径和Git对象的对应的40位哈希值。在这里我们不需要对Git对象理解的很深入,只需要知道里面包含了文件内容,是让攻击者垂涎欲滴的东西就可以了。 想要拿到Git对象,就需要转去objects目录。objects目录存放了所有的git对象,对于一个git对象,40位哈希的前两位会作为目录名,而后面的38位会作为文件名,存在objects下面。举个例子,一个Git对象那个的hash是cb75d8439f004f41d5f85ffa5f8d017df395651a,那么它就会被存在cb/75d8439f004f41d5f85ffa5f8d017df395651a。 知道了这些信息之后,就可以知道Git泄露攻击是如何进行的了,首先攻击者访问index文件,解析后得到文件名和对象哈希。接着按着对象哈希一个一个去objects目录获取到Git对象,解析后得到文件。
0x02 Git泄露利用工具的安全风险 显而易见的,手动解析index文件并去下载然后再去解析Git对象是一项烦人又重复的活,因此有大量的工具被开发出来解放黑客们的双手。这些工具可以将整个攻击流程自动化,自动下载项目的所有文件,并且重建整个项目的目录结构。 但是在这个过程中存在一个严重的安全风险,这些工具在重建项目的目录结构的时候,往往没有考虑到路径穿越风险,而是直接将目录连接起来,因此通过创建恶意的git目录可以在攻击者的磁盘中写入任意文件,实现远程代码执行!
0x03 简单易懂的POC制作方式 直接用git工具制作POC是不可行的,它会提示文件在仓库之外
好在有个叫做GitPython的库不关心这个问题,因此可以用GitPython来生成POC。 首先在仓库外的某个目录放一个文件,该文件会写入到攻击者的电脑上的相同路径。
接着打开python,用GitPython将其加入项目中然后commit,注意,要用../../../(很多个../)加上文件的绝对路径的方式来加入。
在下图生成的POC中,POC只是为了证明可以写到非预期目录,只加了一个../
在执行完了后,整个git项目的文件夹就成了蜜罐
0x04 对常见工具的测试 为了试验该手段的通用性,使用常见工具对蜜罐进行测试,以文件是否成功写入到非预定目录为判断标准。
一个成功的例子如图,dumpall工具将tohacker.txt写到了预期目录192.168.208.190_None之外。
测试结果如下表所示
工具名称工具地址攻击是否成功GitHackhttps://github.com/lijiejie/GitHack是GitHackhttps://github.com/BugScanTeam/GitHack是dumpallhttps://github.com/0xHJK/dumpall是GitHackerhttps://github.com/WangYihang/GitHacker是dvcs-ripperhttps://github.com/kost/dvcs-ripper否git-dumperhttps://github.com/arthaud/git-dumper是 在测试的工具中,除了dvcs-ripper外全部攻击成功(dvcs-ripper失败原因还没分析),证明了该反制手段的通用性
0x05 Svn泄露原理 Svn和Git类似,也是一种版本管理工具。 有些开发人员在部署的时候偷懒,没有通过”export“的方式将代码导出,而是直接拷贝目录,导致下面的.svn文件夹也被拷贝了。(嗯,和Git泄露如出一辙啊)
和Git不同,Svn的泄露有两种可能的情况。
当Svn版本小于1.6的情况下(也有说1.7的,没试),.svn文件夹中的entries会以明文存储目录和文件信息。其中包含了文件名,这个时候访问/.svn/text-base/文件名-.svn-base就可以拿到文件。 当Svn版本更高的情况下,.svn文件夹中的entries不会包含目录和文件信息,攻击者首先需要访问/.svn/wc.db文件,这个文件是个sqlite3数据库,其中的Node表中包含了文件的信息,包括文件名和哈希等。在获取到这些信息后,访问/.svn/pristine/哈希的前两位/哈希.svn-base即可访问到文件。举个例子,有一个文件对应的哈希是a94a8fe5ccb19ba61c4c0873d391e982fbbd3,那其路径为/.svn/pristine/a9/a94a8fe5ccb19ba61c4c0873d391e987982fbbd3.svn-base。
0x06 简单易懂的POC制作方式 针对低版本的Svn,我抄袭了这里的格式,使得POC如下图所示。首先entries的开头为"10",表示自己是个低版本的Svn的文件,接着按照之前写Git的POC的方式写个恶意的文件路径,然后空行写个"file",以此表明上面写的路径是个文件,最后把文件放在对应的Web目录以便于扫描器去下载。
高版本的Svn有些复杂,于是我找了个网站来生成Svn项目,并用TortoiseSVN添加文件再checkout到目录中,这个时候就可以看到.svn目录了。接着再用SQLite编辑工具编辑目录中的wc.db中的Node表,更改文件目录为恶意路径。最后再如法炮制放置文件即可
0x07 对常见工具的测试 测试的方式和标准与测试Git泄露利用工具的标准一致,但是优先测试低版本的泄露,如果低版本的泄露无效再测试高版本的(人都是懒惰的),测试结果如下表所示
工具名称工具地址攻击是否成功svnExploithttps://github.com/admintony/svnExploit是SvnHackhttps://github.com/callmefeifei/SvnHack/是(必须放在根目录)Seay-Svnhttps://github.com/Introspelliam/tools/是dumpallhttps://github.com/0xHJK/dumpall是(只支持高版本)svn-extractorhttps://github.com/anantshri/svn-extractor是 (只支持高版本)dvcs-ripperhttps://github.com/kost/dvcs-ripper否(跑不起来且不想跑,perl写的东西没一个用着省心的)
在测试的工具中,除了dvcs-ripper外全部攻击成功(这玩意跑都跑不起来),证明了该反制手段的通用性
0x08如何提升杀伤力的 如果只是在非预期的目录写一个文件的话并不能达成反制效果,因此有如下几种方法可以参考使用(未经测试仅供参考):
- 对于类unix系统可以写入crontab,增加定时任务,反弹shell回来
- 对于Windows系统可以写入开始菜单启动项,或者dll劫持
- 可以把攻击工具的脚本给替换掉,下次执行就能上线
0x09展望 很显然,这种手法不只适用于Git/Svn泄露的利用程序,什么DS_STORE,Java任意文件下载利用,估计都跑不了。