限 时 特 惠: 本站每日持续稳定更新内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410

Nginx 1.9.11开始支持动态模块

参考文章如下:

我们在本地编译自己的模块代码,将编译好的二进制模块文件放入目标运行环境,并在nginx.conf文件中引用,即可达到持久化控制的目的。

适用环境:当拿到目标Nginx服务器较高权限时,可以使用添加后门动态模块的方式进行持久化控制nginx编译,这样可以免去、计划任务、或者端口复用等容易被发现的方式。

搭建编译环境

这里实现针对的nginx后门编译,如果需要单独nginx则只需要下载编译nginx的源码即可。

1. 新建一个文件夹,将的目标版本源码下载到文件夹中:

https://openresty.org/download/openresty-1.19.9.1.tar.gz

(这里的版本号替换成目标相同的,官网未展示的也可以)然后解压:

2. 在文件夹中新建一个,内容为:

FROM centos:centos7 # 指定centos7镜像,这里根据目标的版本变更COPY openresty-1.19.3.1 /home/openresty-1.19.3.1# 将当前文件夹下的源码包复制到docker中RUN yum -y install perl readline-devel pcre pcre-devel openssl openssl-devel gcc curl GeoIP-devel wget# 安装编译所需依赖RUN cd /home/openresty-1.19.3.1 && chmod +x configure && ./configure --with-luajit --with-pcre --with-http_gzip_static_module --with-http_realip_module --with-http_geoip_module --with-http_ssl_module --with-http_stub_status_module && make && make install# 编译openrestyENV NGINX_HOME=/usr/local/openresty/nginx# 设置nginx环境变量ENV PATH $NGINX_HOME/sbin:$PATH# 将nginx环境变量加入PATH中EXPOSE 80# 暴露80端口

3. 在文件夹中执行

docker build -t openresty:build .   #注意最后有一个点!

会自动进行构建:

成功完成后,的基础编译环境就有了。

4. 在目标环境中运行nginx -V,查看他nginx的编译选项:

做这步的原因在于nginx编译,nginx加入动态模块时会检查模块签名,也就是检查模块编译时的 和nginx编译时的是否相同,如果不相同nginx会报错。将 : 后面的这一长串复制出来,我们后面简写为${V}

5. 进入我们刚才构建的中,cd到的nginx源码文件夹下执行编译命令:

cd /home/openresty-1.19.3.1/bundle/nginx-1.19.3/chmod +x configure./configure ${V}make && make install

代码中的${V}就是我们刚才获得的目标编译参数。这里我们一般会碰到找不到的问题

我们手动把加入PATH中:

export LUAJIT_INC=/usr/local/include/luajit-2.1export LUAJIT_LIB=/usr/local/lib

再次执行编译,又报错:

百度一下,把缺少的依赖装上:

yum -y install libxml2 libxml2-dev libxslt-devel

再次编译,双报错:

继续装:

yum -y install gd gd-devel

再次编译:

成功!如果叒报错,可能你的目标还有其他依赖,像上面一样百度-安装即可解决,百度不到就股沟。

编译后门

现在我们就可以在目标相同的编译签名下编译我们的动态模块了。上有大神现成的示例项目:

下载代码之后解压。我们需要的只有和

限 时 特 惠: 本站每日持续稳定更新内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410