Nginx本地权限提升(cve-2016-1247)复现分析

默认分类 2017-05-25

0x01 复现分析

1.进入Ubuntu 发现为普通用户权限,输入su,密码root
切换至root权限下操作

①查看生成日志文件的配置文件:

cat /etc/logrotate.d/nginx

nginx日志用logrotate命令自动切割
②查看www-data权限:输入 cat /etc/passwd |grep www-data
发现返回www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

2.切换至www-data用户操作
①输入

sudo su -s /bin/bash www-data(root切换至www-data)

②查看日志文件的用户及组 输入

ls -ld /var/log/nginx/*


③打开tmp目录,执行exp 输入


(由于logrotation脚本会在corn中每天6:25AM自动调用,因此如果/etc/logrotate.d/nginx已经设置了'daily'日志回滚,攻击者将在不需要任何系统管理员交互的情况下,在24小时内实现提权到ROOT)
看到出现Waiting for Nginx service to be restarted (-USR1) by logrotate called from cron.daily at 6:25am...时,我们可以直接调用logrotation脚本
3.重新打开一个终端
①切换至root (输入su,再输入root密码即可)
②调用logrotation脚本 输入

logrotate -f /etc/logrotate.d/nginx 

执行以后,www-data权限就提升至root权限了

③输入 whoami 查看当前权限已经为root

0x02 漏洞原理

Nginx 安装后分配的日志权限为安装时设定使用的用户权限,即“ …/log/nginx ”的目录权限为使用者权限,因此在实际运行过程中可以对目录下的文件进行操作。目录权限如下图所示: (输入ls -ld /var/log/nginx/*)

安装的Nginx会在/var/log/nginx路径使用www-data的权限新建Nginx日志目录。由上面的图可以发现Nginx目录下的error.log是root权限,本地用户可以通过symlink符号链接的方式替换为任意文件,由于Nginx在重启或收到USR1信号的时候会对链接到日志的文件进行写操作,因此可以使攻击者提权。USR1信号会由调用do_rotate()函数的logrotate脚本发送。而在默认安装的系统中,每天的 6 点 25 会执行 logrotate 脚本:

当时做的指导书:cve-2016-1247


本文由 sp4rk 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论