数智资源网
首页 首页 大数据 查看内容

安全运维看过来!某 Nginx 后门分析与重现

木马童年 2020-11-1 18:55 76 0

背景前几天,接到一个 nginx 后门样本,本着就分析和复现的思路,完整的将整个过程做一次复现,不料最终还获取到了后门的核心代码部分,遂将其整理发布,仅供学习研究之用。在后续分析之前先来了解下 nginx 后门的功 ...

背景

前几天,接到一个 nginx 后门样本,本着就分析和复现的思路,完整的将整个过程做一次复现,不料最终还获取到了后门的核心代码部分,遂将其整理发布,仅供学习研究之用。

在后续分析之前先来了解下 nginx 后门的功能。通过在 Cookie 中包含特征字符串lkfakjfa,并填写需要反弹的ip和端口,完成shell反弹,这就是后门的一个大致情况。

样本分析

1.在已有的分析情报的帮助下,得知nginx后门位于ngx_http_header_filter,IDA装载样本,发现样本带有符号信息,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

2.找到ngx_http_header_filter函数,找到了关键字符串lkfakjf,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

3.F5之后,发现之后调用了一个connect_shell的函数,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

4.通过对connect_shell进行分析发现,是一个反弹shell的功能,利用socket编程完成shell反弹,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

后门复现

1.首先启动后门 nginx 文件,由于nginx会绑定80端口,如果多次启动会提示80端口被占用而无法启动,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

2.接着进行本地监听9999,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

3.使用curl来触发漏洞,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

4.此时nc里已经得到了shell,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

安全运维看过来!某 Nginx 后门分析与重现

原理分析

1.通过gdb调试和IDA分析发现,要判断cookies中是否存在特征字符串lkfakjf,用到了一个这样的结构体ngx_http_request_t,使用source insight打开nginx源码,定位到ngx_http_header_filter,发现参数就是ngx_http_request_t,查看该结构体的情况,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

2.该结构体相对比较大,这里截图只留下要使用的部分header_in,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

3.通过header_in的结构继续寻找,找到cookies的定义,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

4.最后找到关于cookies的结构体情况,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

5.结合IDA中代码分析,v4就是cookies结构体,通过结构体偏移+32字节定位到输入的特征字符串,在这里我也没有分析的特别清楚,初步判断应该是ngx_pool_t结构体,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

重现后门

1.首先,我们要先获取cookies的结构,通过r->headers_in.cookies.elts即可获得,然后取到void *elts的内容,最后通过32字节偏移得到存储输入特征码的地址,取其值即可拿到输入的特征字符串的值,最后的代码形式,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

对这代码做个解释,首先v1和v2是long *的指针。

第一句代码(long *)r->headers_in.cookies.elts;将void *的elts指针转化为long *的指针。

第二句代码v2=(long *)*v1;*v1是取其值,在将其值转化为long*的指针。

第三句代码cookie =(char )(v2+4);v2+4是表示在v2的基础上,偏移4个long *个字节,如果你的v2定义为char *这里就是v2+32;*(v2+4)取该偏移的内容,最后转化为char *的指针。

以上代码只适用于64位Linux,以上代码只适用于64位linux,以上代码只适用于64位linux,重要的事情说三遍。

2.使用nginx的configure配置,只需要配置—prefix=/root/nginx即可,当configure运行完成后会生成Makefile文件。配置过程中,可能缺少很多的依赖,逐个安装即可,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

3.然后修改位于objs里的Makefile文件,修改为如下配置,否则编译会报错,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

4.此时使用make编译,等待编译完成,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

5.make install安装一下,安装的位置为之前配置的prefix路径,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

6.运行和调试nginx文件,能够成功获取输入的特征字符串,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

7.其中rsi为触发漏洞的输入,rdi为内置特征字符串,这里选择了printf打印,能够成功获取到输入的特征字符串,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

8.接下来准备复现反弹shell,添加功能代码,代码只能适用于带有nc命令的系统,编译后进行复现操作,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

9.现在的特征字符串被修改为123456,现在来触发该后门,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

10.成功接收到反弹的 shell,如下所示:

安全运维看过来!某 Nginx 后门分析与重现

自此后门重现成功,整个分析和复现过程到此结束。

后门排查

目前后门排查只能针对特定的版本,如果出现新 nginx 后门,排查手段大概率会失效。

1.本地验证 通过 grep 命令判断当前运行对 nginx 里面是否存在“/bin/sh”可疑字符串

$ which nginx |xargs grep "/bin/sh" –la

2. 将nginx文件提取出来,使用IDA分析查找ngx_http_header_filter,下载nginx源码和IDA F5做对比判断是否存在后门。

较好的效果是下载nginx对应的源码对比是否有增加或改动的地方,但是这份方法比较耗时耗力,但是效果比较好。

威胁情报

HASH

ab498686505dfc645e14c6edad280da7

这篇文章作者很早之前就发给我了,一直没时间编辑发布,后面作者也发布在了看雪论坛,链接地址:

https://bbs.pediy.com/thread-260954.htm

声明:文章收集于网络,版权归原作者所有,为传播信息而发,如有侵权,请联系小编删除,谢谢!

欢迎加入本站公开兴趣群

软件开发技术群

兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流

QQ群:26931708

未分类
0
为您推荐
HIVE数据仓库完美实战课程,资源教程下载

HIVE数据仓库完美实战课程,资源教程下载

课程名称【快速掌握HIVE视频教程】HIVE数据仓库完美实战课程课程目录├第一周:hive基…...

尚硅谷大数据Flink技术与实战,资源教程下载

尚硅谷大数据Flink技术与实战,资源教程下载

课程名称尚硅谷大数据Flink技术与实战课程目录理论_Flink基础 001__Flink理论_Flink…...

廖雪峰-2019大数据分析精品资料价值1980元,资源教程下载

廖雪峰-2019大数据分析精品资料价值1980元,资源教程

课程介绍:廖雪峰大神历时3个月打磨出来的《数据分析必备技能》的视频学习资料,由浅…...

尚硅谷-大数据项目之电商数仓教程下载

尚硅谷-大数据项目之电商数仓教程下载

课程介绍:本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以…...

小码哥李明杰Java版《恋上数据结构与算法》 ,资源教程下载

小码哥李明杰Java版《恋上数据结构与算法》 ,资源教

课程目录01-学前须知01-为什么要学习数据结构与算法02-编程语言的选择03-课程大纲04-…...

阿里云大数据分析师ACP认证视频教程下载

阿里云大数据分析师ACP认证视频教程下载

课程介绍阿里云大数据行业认证-大数据分析师认证(ACP-Alibaba Cloud Certified Prof…...

恋上数据结构与算法(第二季),视频教程下载

恋上数据结构与算法(第二季),视频教程下载

课程介绍:课程由MJ老师和名企算法大咖共同研发,在保证易懂的同时确保课程的系统全面…...

社交网络分析与挖掘,视频教程下载

社交网络分析与挖掘,视频教程下载

课程介绍:社交网络和数据挖掘是计算机学科相关研究中的热点,其具体研究涵盖理论、关…...