渗透技巧——通过命令行开启Windows系统的匿名访问共享
纪念一下今天圈子里提前过大年了!!!dddd,But渗透依旧不能停啊!!!
00x00 前言
在渗透测试中,尤其是内网渗透,通常需要在内网开启一个支持匿名访问的文件共享,配合漏洞利用。
所以需要一种通用的方法,不仅要使用便捷,还要能够在命令行下运行。
这里通过win7
进行实验。
00x01 利用场景
开启支持匿名访问的文件共享后,其他用户不需要输入用户名和口令,可以直接访问文件服务器的共享文件
通常有以下两种用法:
- 作为数据传输的通道
- 配合漏洞利用,作为Payload的下载地址
文件共享服务器需要能够在不同操作系统上搭建
对于Linux
系统,可借助Samba
服务搭建可匿名访问的文件共享服务器
这里给出Kali
系统下的使用方法:
修改文件/etc/samba/smb.conf
,内容如下:
[global]
map to guest = test1
server role = standalone server
usershare allow guests = yes
idmap config * : backend = tdb
smb ports = 445
[smb]
comment = Samba
path = /tmp/
guest ok = yes
read only = no
browsable = yes
开启服务:
service smbd start
service nmbd start
对于Windows
系统,则需要考虑域环境和工作组环境。同时为了支持匿名访问,还需要开启Guest
用户,允许Guest
用户访问文件共享服务器的内容。
00x02 通过界面开启可匿名访问的文件共享服务器
1.启用Guest用户
win+r
打开运行窗口,运行gpedit.msc
,打开组策略
位置:Computer Configuration->Windows Settings->Security Settings->Local Policies->Security Options
,也即:计算机配置->Windows
设置->安全设置->本地策略->安全选项
选择策略Accounts: Guest account status
,设置为Enabled
,即修改“帐户:来宾帐户状态”为“禁止”。
2.将Everyone权限应用于匿名用户
位置:Computer Configuration->Windows Settings->Security Settings->Local Policies->Security Options
选择策略Network access:Let Everyone permissions apply to anonymous users
,设置为Enabled
,即修改“网络访问:将Everyone
权限应用于匿名用户”为“禁止”,一般默认为禁用状态。
3.指定匿名共享文件的位置
位置:Computer Configuration->Windows Settings->Security Settings->Local Policies->Security Options
选择策略Network access:Shares that can be accessed anonymously
,设置名称,这里可以填入smb
,即修改“网络访问:可匿名访问的共享”的名称为:smb
。
4.将Guest用户从策略“拒绝从网络访问这台计算机”中移除
位置:Computer Configuration->Windows Settings->Security Settings->Local Policies->User Rights Assignment
,也即:计算机配置->Windows
设置->安全设置->本地策略->用户权限分配
选择策略Deny access to this computer from the network
,即从“拒绝从网络访问此计算机”中,移除用户Guest
5.设置文件共享
新建一个共享的文件夹名为smb
,右键打开“属性”,进入“共享”页面设置高级共享,共享名为smb
共享权限组或用户名为Everyone
至此,可匿名访问的文件共享服务器开启成功,访问的地址为//<ip>/smb
00x03 通过命令行开启可匿名访问的文件共享服务器
1.启用Guest用户
net user guest /active:yes
2.将Everyone权限应用于匿名用户
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 1 /f
3.指定匿名共享文件的位置
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionShares /t REG_MULTI_SZ /d smb /f
4.将Guest用户从策略“拒绝从网络访问这台计算机”中移除
导出组策略:
secedit /export /cfg gp.inf /quiet
修改文件gp.inf
,将SeDenyNetworkLogonRight = Guest
修改为SeDenyNetworkLogonRight =
,保存
重新导入组策略:
secedit /configure /db gp.sdb /cfg gp.inf /quiet
强制刷新组策略,立即生效(否则,重启后生效):
gpupdate/force
5.设置文件共享
icacls C:\share\ /T /grant Everyone:r
net share share=c:\share /grant:everyone,full
至此,可匿名访问的文件共享服务器开启成功,访问的地址为//<ip>/smb
00x04 开源代码
代码在以下操作系统测试成功:
- Windows 7
- Windows 8
- Windows 10
- Windows Server 2012
- Windows Server 2012 R2
- Windows Server 2016
支持域环境和工作组环境的Windows
操作系统
需要本地管理员权限执行
开启可匿名访问的文件共享服务器:
Invoke-BuildAnonymousSMBServer -Path c:\share -Mode Enable
关闭可匿名访问的文件共享服务器:
Invoke-BuildAnonymousSMBServer -Path c:\share -Mode Disable
注:
关闭可匿名访问的文件共享服务器实现了以下操作:
- 关闭指定目录的共享权限
- 禁用Guest用户
- 禁用将Everyone权限应用于匿名用户
- 删除组策略中指定的匿名共享文件位置
- 将Guest用户添加至策略“拒绝从网络访问这台计算机”
在导出组策略时,如果策略“拒绝从网络访问这台计算机”中的内容为空,那么不会有这一选项,当我们需要添加这个策略时,需要手动添加一行内容SeDenyNetworkLogonRight = Guest
在代码实现上,我采用了以下方法:
将SeDenyInteractiveLogonRight = Guest
替换为
SeDenyNetworkLogonRight = Guest
SeDenyInteractiveLogonRight = Guest
对应的Powershell
示例代码:
(Get-Content a.txt) -replace "SeDenyInteractiveLogonRight = Guest","SeDenyNetworkLogonRight = Guest`r`nSeDenyInteractiveLogonRight = Guest" | Set-Content "a.txt"