安全分析与研究

专注于全球恶意软件的分析与研究

背景

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

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

样本分析

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

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

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

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

后门复现

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

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

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

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

原理分析

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

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

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

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

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

重现后门

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

对这代码做个解释,首先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文件。配置过程中,可能缺少很多的依赖,逐个安装即可,如下所示:

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

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

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

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

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

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

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

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

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

后门排查

目前后门排查只能针对特定的版本,如果出现新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

安全分析与研究专注于全球恶意软件的分析与研究,追踪全球黑客组织攻击活动,不忘初心,专注,专业,坚持,欢迎关注。

nginx header参数丢失_某Nginx后门分析与重现相关推荐

  1. nginx header参数丢失_nginx单节点部署

    服务安装 • 创建nginx用户 [root@localhost ~]# useradd -s /sbin/nologin nginx[root@localhost ~]# passwd nginxC ...

  2. nginx header参数丢失_Nginx 性能优化有这篇就够了!

    目录: 1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 g ...

  3. fegin 参数丢失_许多参数和丢失的信息

    fegin 参数丢失 代码越少越好? 对象越少越好? 是真的吗 像往常一样,这取决于. 在某些情况下,通过添加更多内容,我们会添加不必要的复杂性. 当我们仅出于"将来可能需要这种额外的灵活性 ...

  4. nginx lua mysql 性能_深入浅出 nginx lua 为什么高性能

    最近很多人问我nginx lua的优势是什么?为什么? 一.同步和异步.阻塞和非阻塞 如果要说清楚这个问题首先要了解:同步和异步.阻塞和非阻塞的关系 同步:php.java的正常代码都是同步执行的 异 ...

  5. nginx 负载 sessionid 不一致_你不知道的Nginx负载均衡算法,快进来迅速掌握

    关于负载均衡的三种算法,轮询法,随机法,最小连接法,这三种负载均衡的算法,但是关于负载均衡还有其他的算法,我们也需要你去看,而且在面试的过程中,很有可能是会问到的呦. 对于要实现高性能集群,选择好负载 ...

  6. nginx 还是欢迎界面_初识Nginx性能安全优化

    前言 最近小编的项目上线了官方网站,同大部分Web服务网站相同,小编项目的Web站采用了LNMP(Linux.Nginx.Mysql.PHP)架构.其中Nginx的作用是将静态资源进行解析返回给用户: ...

  7. nginx 防止恶意域名解析_配置nginx只允许域名访问,禁止ip访问【图文教程】

    平凡也就两个字: 懒和惰;成功也就两个字: 苦和勤;优秀也就两个字: 你和我.跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!每一篇文章都是心 ...

  8. 地址栏 输入 参数 刷新参数丢失_小米11 Pro屏幕参数曝光:2K屏幕+120Hz刷新率

    本周一,高通已经宣布将于12月初举行的骁龙技术峰会上正式发布新一代旗舰处理器--骁龙875.根据此前的曝光消息,小米11系列将首发搭载这颗芯片,网上也已经开始对这款新机进行曝光. 日前,海外知名论坛X ...

  9. 某乎搜索接口header参数x-zse-96、x-zst-81逆向分析

    文章目录 前言 一.抓包分析 二.参数解析 1.加密定位 2.参数分析 总结 前言 随缘发文~某乎搜索接口header参数x-zse-96.x-zst-81 JS逆向分析.本文章仅供学习研究,如若侵犯 ...

最新文章

  1. python网络爬虫_Python网络爬虫——爬取视频网站源视频!
  2. 发现asp.net 2.0 在MSDN中的多个BUG 关于无刷新窗体的
  3. FlvDownloader升级版DownloaderPlus发布
  4. 计算机考研哈理工好吗,哈尔滨理工大学考研难吗?一般要什么水平才可以进入?...
  5. POJ3978 Primes【素数筛选+前缀和】
  6. Spark提交代码的两种方式
  7. java语言操作Oracle数据库中的CLOB数据类型
  8. 计算机视觉实战(十三)停车场车位识别(附完整代码)
  9. java修改注册表_Java的Windows安装程序对注册表的修改
  10. 如何准备计算机二级-Java
  11. 计算机A类会议 icip,计算机视觉|中国计算机学会推荐国际学术刊物/会议
  12. CSS Cascading Style Sheets 层叠样式表:CSS了解 (一)
  13. 快速乘-在乘法溢出的边缘疯狂试探
  14. 插入数据报错: Incorrect string value: ‘\xE8\xB5\xB5\xE9\x9B\xB7‘ for column ‘Sname‘ at row 1
  15. 互联网运营必须掌握的专业术语
  16. ApplicationListener与ApplicationContextAware
  17. python做性能测试框架_python常用web框架简单性能测试结果分享(包含dja
  18. Python量化入门(1)- 开发环境的准备
  19. 【python简易小程序设计】设计一个 python程序,模拟投掷100次色子。若总点数大于300点时,则提前结束 统计最后投掷出的各点数数量(要求使用列表)并输出
  20. python统计emoji个数

热门文章

  1. psycopg2.errors.UndefinedTable: relation “xxxx“ does not exist
  2. java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...
  3. java rsa 公钥加密_java – 使用公钥进行RSA解密
  4. jq获取id的名称_查找 Linux 发行版名称、版本和内核详细信息 | Linux 中国
  5. ❤️JavaScript系列6部曲:流程控制(万字长文)❤️
  6. html里table的scope,HTML表格的运用
  7. 爱奇艺首页底部导航按钮android,仿爱奇艺/腾讯视频ViewPager导航条实现
  8. myeclipse怎么运行c语言,windows下MyEclipse安装配置C/C++开发环境
  9. 大学计算机在线答题,大学计算机基础网上考试答题卷理论部分(含答案)
  10. python跑一亿次循环_python爬虫爬取微博评论