使用HTTP 404-File Not Found的C2
0x00前言
我们知道hack都会使用C2(命令和控制)控制受感染的主机系统.这些C2中的大多数都由大型僵尸网络控制,Hack只是简单地使用其中一些来访问系统,使他们可以转到另一台设备中去或窃取凭据并获得对系统的“合法”访问.
我已经看到或听说过许多类型的C2,例如IRC,p2p,DNS,Twitter,Gmail,ICMP等.C2隐藏流量家族越来越大,并且实现C2的方式每天都变得更具创造性.我很少为听到任何新的C2感到惊讶.直到有一天与John Strand进行了交谈,他提到了可以使用HTTP404 – File Not Found的C2 .这…引起了我的注意.作为安全专家,我知道这些以前C2技术中的大多数很容易被检测和阻止.
尽管我知道HTTP 404 – File Not Found 会更难检测,但过滤/阻止主机访问HTTP 404 –File Not Found 很容易.但是,有多少安全设备会阻止HTTP 404?事实上有多少安全设备可以监视和检看网站HTTP 404?大多数的安全工程师或普通人都会像我一样,在浏览网络时, 通常会忽略或跳过HTTP 404.在检测流量时,都会是主要是在寻找流量中的异常情况,例如流量流向Internet上的奇怪地方或其他类似性质的东西,而经常忽略或跳过HTTP 404的流量
随着我的兴趣激发了,我开始做一些研究,看看是否有人使用这种技术攻击,是否有人已经检测到这种技术的C2型.
我发现了几篇类似文章,一篇题为“隐藏在众目睽睽下” 由皮埃尔-马克局和基督教迪特里希的“Hiding in Plain Sight”
https://www.blackhat.com/docs/eu-15/materials/eu-15-Bureau-Hiding-In-Plain-Sight-Advances-In-Malware-Covert-Communication-Channelswp.pdf
另一个是“ Hiding Malicious Traffic Under the HTTP 404 Error”(作者:HeXu)
https:/ /blog.fortinet.com/2015/04/09/hide-malicious-traffic-under-the-http-404-error
在He Xu的文章中,他们实际上检测出来并见证了HTTP 404 – File Not Found C2,文章涵盖了他们发现的内容和技术发生的情况.简单来说,受感染的设备可以连接到此Web服务器,但是会返回HTTP 404 – File Not Found .该HTTP 404 看起来是正常的,但是从源码上的注释我们可以看到包含base64编码的命令..这些命令是指令将自身复制到USB驱动器,下载并执行可执行文件以及最后更改某些注册表项的说明.
根据以上的操作方式,我决定创建自己的HTTP 404 – File Not Found C2.尽管我不仅希望受感染的系统获得命令并运行这些指令,我希望它能够通过HTTP 404 – File NotFound来控制系统并获得系统的响应.
0x01方法
第一部分是通过添加和配置.htaccess文件来设置Web服务器,以将任何错误页面定向到我选择的.html文件(下面将其重定向到evil.html)
作为攻击者,此Web服务器可以是他们自己的服务器或他们控制的Web服务器,也可以是他们具有“访问权”的服务器(肉鸡).设置站点并设置HTTP 404 – File NotFound 后 ,我们继续进行第二部分,即 C2 服务器.
0x02
这是代码中最简单的部分.我们把要对受感染的系统执行的命令通过base64对进行编 码,将它放入带有预定义标头的html注释中,然后包装到html文件中.在最后将它覆盖到HTTP 404 – File Not Found的html文件中. 主要我输入新命令,就会覆盖到HTTP 404 –File Not Found文件中.对于我的测试,我设置并控制了Web服务器,我们可以轻松地使用FTP上传新的html文件.
0x03
下一步是创建 C2 客户端.然后创建适用于Windows和Linux的命令来控制客户端,以及命令执行返回我们服务器的响应.
受感染的系统必须请求某个域. 在这里我使用了静态网址.
过程就是:
受感染的系统一旦从网站请求页面,将首先确定它是否是404页面.如果不是404页,忽略并等待下一个请求发出.
如果是404页面,则检查其源代码中是否包含注释.如果找到注释,则检查注释中的标题是否与预定义的标题匹配.如果标题匹配,则解码base64字符串并执行命令.
这部分代码有点困难,因为我不仅要在受感染的系统上执行命令,同时还希望能够向Linux和Windows提供基本通用命令.最后,我还希望将已执行命令的结果发送回服务器.
我在 C2 解决此问题的方法是确定受感染的系统是Linux还是Windows.在Windows 上使用PowerShell执行一些与Linux中相同的基本命令,然后将其作为在base64中重新编码的PowerShell脚本执行.所以系统是Linux也能像操作系统是Windows一样执行命令.
然后,受感染的系统会将命令的结果发送回侦听服务器.为简单起见,我只使用了python服务器监听器.最后,我为受感染的系统发送的命令的结果创建了 C2 接收器.这只是一个等待连接的基本python服务器.
在我的演示中,我使用Windows 10计算机作为“受害者”,使用Ubuntu作为Web服务器, C2 控制器和 C2 接收器.
打开网站,你可以看到的是我们做的Office 365登录页面.
如果一旦我转到一个不存在的页面,我应该会收到404错误.
我们看到源码中没有任何注释,只有一个基本网页.
我们启动C2服务器并等待命令
C2接收器打开端口并等待传入连接.
然后,在受害计算机上运行C2客户端(前台不显示,文件启动然后在后台运行)
现在我们可以执行一个简单的命令,例如ls
如我们所见,c2客户端将桌面的内容(因为我们使用了ls命令)发送回到我们c2服务器.
下面,我将创建一个文件,列出内容,然后显示404页和该页的源代码. 在C2服务器上,我能够运行命令,所以我使用PowerShell命令并在当前目录(桌面)中.
创建了一个空文件
C2接收服务器显示文件已创建.
现在我们可以看到我从C2服务器创建的文件在桌面上显示了
404页面看起来好像相同.
但是,如果我们查看源代码,则可以看到页面底部有一个新注释.
好的,我们解码
TmV3LUl0ZW0gLU5hbWUgRW1wdHlGaWxlLnR4dCAtSXRlbVR5cGUgRmlsZQ ==
我们可以到:
New-Item -Name EmptyFile.txt -ItemType file
总之,这是一个非常强大的工具,并且容易安全人员被忽略.
这介绍一个有趣的小项目:
https://github.com/theG3ist/404
0x04原文地址
https://www.blackhillsinfosec.com/how-to-build-a-404-page-not-found-c2/
翻译:李木
- 对象的序列化和反序列化
- java父类,子类静态块和构造方法的执行顺序
- 一键换肤的简单实现
- mybatis配置文件模板(增删查改)
- MD5加密代码(工具类)
- lambda+reduce的一句艰深代码
- CRT连接mysql数据库操作
- 基于springMVC拦截器实现操作日志统计
- datepicker小插件(日期时间 & 日期 & 月份)
- 封装好的MAP工具类和HBASE工具类
- JSP+ajax+springMVC+MayBatis处理excel上传导入
- 绚丽的javascript拾色器(不兼容IE8及以下)
- 魔波广告恶意病毒简析
- javascript生成.xls文件(兼容IE&Chrome&Firefox)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 搞懂 SQL 查询优化原理分析,秒速处理大数据量查询
- 日历时间格式Date与Calender
- 使用 SpringBoot AOP 记录操作日志、异常日志
- java写一个音乐播放程序,同时显示歌词
- 使用反射获取注解中的内容
- 记一次企业微信对接踩坑之旅(ಥ_ಥ)
- 图解 SQL,这也太形象了吧!
- 函数式接口小结
- 冒泡排序+选择排序+插入排序+图与代码
- [解锁新姿势] 分享 7 个优化代码的技巧
- 常量池与堆中放入String数据,比较大小
- Could not find artifact org.apache.tomcat.maven:tomcat7-maven-plugin:pom.....
- try{}catch{}finally{}运行后的执行结果
- MySQL死锁产生原因和解决方法
- 文件操作与文件夹操作