内网渗透基础
内网渗透,从字面上理解便是对目标服务器所在内网进行渗透并最终获取域控权限的一种渗透。内网渗透的前提需要获取一个Webshell,可以是低权限的Webshell,因为可以通过提权获取高权限。
在进行内网渗透之前需要了解一个概念,域环境。在内网中,往往可能存在几百上千台机器,例如需要对机器进行升级、打补丁、设置权限等,管理员不可能一台一台地更新修改。因此便衍生出了域环境。管理员以一台主机作为域控制器新建一个域,将所有其他主机加入域中,以域控来操作其他主机。因为域控的高权限,导致了域控所在的主机的管理员账号密码,可以登录任意一台主机,所以内网渗透的最终目标,往往便是拿下域控的权限。
然而我们想要外网getshell直接得到管理员权限的主机权限是基本很难的,所以就要在得到边缘主机的权限后横向渗透或是提权,也就是进行内网渗透
信息搜集
用常用的命令进行域判断,权限判断等
探针域内存活主机:
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL="
计算机用户Hash、明文获取:
mimikatz:Win;mimipenguin:Linux。
计算机各种协议、服务口令的获取:
LaZagne:适用于Windows、Linux、Mac。支持面广,但功能一般。
XenArmor:Win,付费。
探测域内存活主机及地址信息:
自带的内部命令(.bat)、nmap、masscan、powershell第三方脚本:empire、nishang。
需要注意的是,Mimikatz属于第三方软件,直接上传到目标主机可能被杀毒软件查杀,这时我们可以配合官方软件Procdump,将Procdump上传目标主机获取用户信息(该文件不可读),使用本地的Mimikatz打开Procdump获取的用户信息。
mimikatz下载:
https://github.com/gentilkiwi/mimikatz/releases
procdump下载:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
金银票据
Kerberos协议
这个的工作原理非常重要,内网渗透-(黄金票据和白银票据)详解(一)-CSDN博客这篇文件写的很全
所以直接快进到伪造
黄金票据伪造
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个
Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
当然这么强悍的东西,条件也是很苛刻的
所需条件:
1、域名称
2、域的SID值
3、域的KRBTGT账号的HASH
4、伪造任意用户名
(获取域的SID和KRBTGT账号的NTLM HASH的前提是需要已经拿到了域的权限)
这时候就不得不掏出我们的工具Mimikatz进行一把梭了
(没搭域环境,所以不实操了)
白银票据伪造
白银票据就是伪造的ST。
在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。
所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。
所需条件:
1.域名
2.域sid
3.目标服务器名
4.可利用的服务
5.服务账号的NTML HASH
6.需要伪造的用户名
金票和银票的区别
获取的权限不同
金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务,如CIFS
认证流程不同
金票:同KDC交互,但不同AS交互
银票:不同KDC交互,直接访问Server
加密方式不同
金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密
pass系列攻击
内网渗透中,有三种最常用的pass系列攻击:
- pass the hash(hash传递攻击,简称PTH)
- pass the ticket(票据传递攻击,简称PTT)
- pass the key(密钥传递攻击,简称PTK)
pass the hash
- 本地账号:默认只有管理员组内账号可以pth
- 域账号:默认均可pth
windows用户hash主要由以下部分组成,其中NTLM-HASH比LM-HASH的安全性要更高:
用户名称:RID:LM-HASH值:NTLM-HASH值
1
自Windows Vista和Windows Server 2008开始,Windows取消LM hash。另外,如果用户密码长度大于15,也无法生成LM hash。
使用wmiexec拿shell
wmiexec.exe地址:https://github.com/maaaaz/impacket-examples-windows/blob/master/wmiexec.exe
wmiexec.py地址:https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py
windows下使用wmiexec.exe通过pth方式拿shell:
wmiexec.exe -hashes 00000000000000000000000000000000:9c1xxxxxxxxxxxxxxxxxxxxfxxxxx8ea0 ./Administrator@192.168.xx.xx
此处是通过Administrator用户的NTLM HASH传递攻击拿shell,登录的域为.
代表本地域
crackmapexec是一个可以对多个目标机进行批量PTH扫描,且支持命令执行等功能,工具地址:https://github.com/byt3bl33d3r/CrackMapExec
批量扫描命令:
/usr/local/python3/bin/crackmapexec --timeout 3 smb target ip.txt -u Administrator -H 9c1xxxxxxxxxxxxxxxxxxxxfxxxxx8ea0 -d .
命令执行:
/usr/local/python3/bin/crackmapexec smb target 192.168.xx.xx -u Administrator -H 9c1xxxxxxxxxxxxxxxxxxxxfxxxxx8ea0 -d . -x ipconfig
pass the key
ptk是在域中攻击kerberos认证的一种方式,原理是通过获取用户的aes hmac,通过kerberos认证,可在NTLM认证被禁止的情况下用来实现类似pth的功能。具体还是使用mimikatz/wmiexec/crackmapexec等工具
1.使用mimikatz "privilege::debug" "sekurlsa::ekeys"
命令获取aes的hmac
2.使用mimi进行测试:sekurlsa::pth /user:xxx /domain:xxx /aes256:xxxxxxxx"
3.在弹出的cmd窗口中输入net use命令进行测试
pass the ticket
三种常见的攻击方法:
MS16-068,Golden ticket,SILVER ticket。
也就是msf框架的使用和金银票据的伪造,这里不多赘述
通过绕过UAC进行提权
用户账户控制(User Account control,UAC)是windows系统采用的一种控制机制,可以阻止自动安装未经授权的应用 并防止意外更改系统设置,有助于防止恶意软件损坏计算机。用户账户控制程序使应用程序和任务始终在非管理员账户的安全上下文中运行,除非管理员专门授权管理员级别的权限。开启用户账户控制后,每个需要使用管理员访问令牌的应用都必须征得用户同意
有时候我们拿到了一个非administrator的管理员用户权限,其实非administrator的管理员权限还是有限,运行某些程序或执行某些操作时会弹出用户账户控制,如果点击否或者不点击就会出现拒绝访问,那么也就没有成功执行操作,影响后续的内网渗透,所以要绕过UAC
UAC白名单
微软在用户账户控制中为一些系统程序设置了白名单机制,所有白名单中的程序将不再询问,以静默方式自动提升到管理员权限不弹出UAC框,如slui.exe、wusa.exe、taskmgr.exe、msra.exe、eudcedit.exe、eventvwr.exe、CompMgmtLauncher.exe、rundll32.exe、explorer.exe等。攻击者可以对这些白名单程序进行dll劫持、dll注入或注册表劫持等,绕过uac并提升权限
在寻找白名单程序时,可以使用微软工具sigcheck和Strings。
白名单程序拥有一个共同的特性,就是Manifest数据中autoElevate属性的值为True。
DDL劫持
windows系统中的很多应用程序并不是一个完整的可执行文件,被分割成一些相对独立的动态链接库(DLL)文件,其中包含程序运行所使用的代码和数据。当应用程序启动时,相应的DLL文件就会被加载到程序进程的内存空间。攻击者可以通过一些手段,欺骗合法的、受信任的应用程序加载恶意的DLL文件,从而造成DLL劫持。
当应用程序加载DLL时,如果没有指定DLL的绝对路径,那么程序会以特定的顺序依次在指定路径下搜索待加载的DLL。在开启安全DLL搜索模式(win xp后默认开启)的情况下,将按以下顺序进行搜索:程序安装目录 -> 系统目录(c:\windows\System32) -> 16位系统目录(c:\windows\system) -> windows目录(c:\windows) -> 当前工作目录 -> PATH环境变量中列出的各目录
如果将同名的恶意DLL文件放在合法DLL文件所在路径之前的搜索位置,当应用程序搜素dll时,就会以恶意dll代替合法的dll来加载。这就是经典的dll预加载劫持情景,但是前提是我们要有写入文件的权限
用DDL劫持来执行我们的payload就可以实现权限的持久化,也可以实现提权
但但但但但是系统怎么会这么轻易就让你写入呢,这些白名单程序所加载的dll文件几乎都位于系统可信任目录中,而这些目录对标准用户来说是不可写的,那么如果想要写入恶意文件,就要学习模拟可信任目录中的内容
模拟可信任目录中的内容
系统在检查可信任目录时,相关函数会自动去掉可执行文件路径中的空格。如果可执行文件位于“C:\windows \system32”目录(在windows后有一个空格,下文统称“模拟可信任目录”)中,系统在检查时会自动去除路径中的空格,这样就通过了最后一个条件的检查。
基于此原理,攻击者根据可信任目录来创建一个包含尾随空格的模拟可信任目录,将一个白名单程序复制到模拟可信任目录中,配合DLL劫持等技术即可成功绕过UAC。
工具
当然了只靠自己手测还是太烦人了,所以当然还是要上自动化工具
UACME:
这是一个专用于绕过uac的开源项目,目前已包含70多种Bypass uac的方法
cs插件SharpBypassUAC
msf中也内置了几个用于绕过uac的模块
持久化
当成功获取目标系统的访问权限后,需要寻找方法来恢复与目标主机的连接,而无需再进入目标系统。如果目标用户破坏了该连接,例如 重新启动计算机,此时使用后门将允许自动重新与目标系统建立连接, 不必每次都需要进行攻击取得 meterpreter 。 为了后续渗透方便,所以需要创建一个后门。这样,即使连接被中断,也不会影响工作。下面将介绍创建持久后门的几种方式。
通过msf框架的后门
通过persistence脚本安装后门
虽然但是话说回来,这个后门能被杀软识别,所以说不太好用,运维一重启杀软就炸缸了
通过metsvc服务的方式
同上
在靶机创造一个隐藏用户
1、进入靶机
meterpreter > shell
2、创建用户 ( 注意这里用户使用了$符号,可以起到隐藏创建用户的目的 )
C:\Windows\system32> net user hacker$ Hacker_123 /add
3、将创建的用户添加到管理员组
C:\Windows\system32> net localgroup administrators hacker$ /add
也是非常简单不吃操作,不查日志的话一般运维也看不出来
持久化后门netcat
这个也是很简单不吃操作,这里不再多说
然后还有一些从其他blog学来的小骚招
权限维持及后门持久化技巧总结 - FreeBuf网络安全行业门户
粘滞键后门
按五次shift,要是跳出粘滞键,那就中奖了
c:\windows\system32下存在粘滞键的exe
然后只要把它换成cmd.exe,那么当连按五次shift时就会跳出cmd
对于在 Windows Vista 和 Windows Server 2008 及更高的版本中,替换的二进制文件受到了系统的保护,因此这里就需要另一项技术:映像劫持
当我们双击运行程序时,系统会查询该IFEO注册表,如果发现存在和该程序名称完全相同的子键,就查询对应子健中包含的“dubugger”键值名,如果该参数不为空,系统则会把 Debugger 参数里指定的程序文件名作为用户试图启动的程序执行请求来处理。这样成功执行的是遭到“劫持”的虚假程序。
具体实现最简单的操作就是修改注册表,
以设置中心utilman.exe为例:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option中添加 utilman.exe 项,在此项中添加 debugger 键,键值为要启动的程序路径。对应的cmd命令如下:
REG ADD "HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\utilman.exe" /tREG_SZ /v Debugger /d "C:\test.bat" /f
注册表注入后门
注册表此路径中会存在普通用户权限下写入的后门程序和脚本路径,键名不固定
此方法可以采用Empire、CS、msf实现
WMI后门
WMI(Windows Management Instrumentation)全名Windows管理工具,它是Windows操作系统中管理数据和操作的基础模块
此类后门的优势在于无文件、无进程(即:代码加密存储于WMI;系统自启动powershell去执行后门,执行后极短的时间内进程消失),且只能由有管理员权限的用户执行,常用powershell编写
可以采用Empire进行利用
Empire下的Invoke-WMI模块(persistence/elevated/wmi)可创建WMI后门
计划任务后门
计划任务后门也是有管理员权限和普通用户权限的,管理员权限的后门可以执行更多种类的计划任务(废话)
之前我也介绍过计划任务提权等一些列操作
同样采用框架实现,如msf、Empire、PowerSploit
突然感觉我好像废物,什么都只能靠工具QaQ
内网渗透之权限维持 - anoldcat - 博客园从这篇文章中参考了很多
域控后门
不会捏,上面那篇文章里也有,等我后面研究了再补上
域内ACL攻防
也是不会捏
域内ACL攻防 - nice_0e3 - 博客园这篇文章挺好的
委派攻击
这个看起来也是不难,但是我没搭域环境(究其原因是电脑没有内存再多下两个虚拟机了)所以就不复现了,也许后面会补上
总之文章 - 内网渗透-委派攻击详解 - 先知社区这篇文章很详细
对不出网主机的处理
内网渗透:不出网渗透技巧 - FreeBuf网络安全行业门户
后面有时间再复现一下
以前的内网渗透一直是零零散散的学,感觉都串不起来,今天花了一下午捋了一遍终于是顺下来了,接下来就是打打复现,然后再多学一点内网渗透的拓展知识