限 时 特 惠: 本站每日持续稳定更新内部创业教程,一年会员只需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
# 编译openresty
ENV 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.1
export LUAJIT_LIB=/usr/local/lib
再次执行编译,又报错:
百度一下,把缺少的依赖装上:
yum -y install libxml2 libxml2-dev libxslt-devel
再次编译,双报错:
继续装:
yum -y install gd gd-devel
再次编译:
成功!如果叒报错,可能你的目标还有其他依赖,像上面一样百度-安装即可解决,百度不到就股沟。
编译后门
现在我们就可以在目标相同的编译签名下编译我们的动态模块了。上有大神现成的示例项目:
下载代码之后解压。我们需要的只有和
限 时 特 惠: 本站每日持续稳定更新内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410