攻防演练中的代码审计实战
第一天:注入与哈希获取
在一次授权的攻防项目中,我们在渗透过程中发现目标存在 MSSQL 注入漏洞,通过注入获取了管理员的账号和密码哈希。
当时我们尝试对拿到的数据进行解密(天真地认为可以直接解密并 GetShell)。由于是攻防演练,报告提交越早分数越高,何况还是 GetShell。
erui/E7B8D79CB1F8267E98411A1081B75FBD
admin/154A70BBAD1377B256671E16CAF430ED
lchh/262BA2BFC886B171B5488CA6E9F25BB8
结果发现根本解不出。后来发现原来是加盐 MD5,想着先把盐值找到或许能有一线突破。最终找到的盐值和账号对应如下:
erui/E7B8D79CB1F8267E98411A1081B75FBD/24V0XZ
admin/154A70BBAD1377B256671E16CAF430ED/42V8XZ
lchh/262BA2BFC886B171B5488CA6E9F25BB8/J6ZT84
当时我们在这里卡了半天,甚至去网上搜索加盐 MD5 的破解方法,后面发现根本解不出来。
第二天:堆叠注入与 GetShell
那一晚我们一夜未眠,想了各种法子去解密,网上各种办法、脚本都试了一遍,发现完全不行。突然想到在上一次的攻防演练中,也是 MSSQL 注入,当时可以通过堆叠注入自己插入一条数据。于是开始整理思路:
思路一
通过堆叠注入插入一条数据,直接登录(但要自己找到一条加盐 MD5)。搭建这个 CMS,自己创建一个管理员账号,然后插入进去。
思路二
找到对应的 CMS 或网站源码,进行代码审计,试图找到加密流程或其他有用信息。
尝试思路
通过 MSSQL 注入的报错信息可以判断为 DTcms。在 GitHub 上搜罗了一番,找到了其源码。首先想到的搭建起来这个 CMS,由于对 .NET 环境不熟悉,加上搭建后各种报错,继续信息收集。发现源代码下面有个 SQL 文件,进去搜索找到一条加密的数据,并且前期信息收集到 DTcms 的默认密码是 admin888。于是开始行动全局搜索 salt。
INSERT [dbo].[dt_manager] ([id], [role_id], [role_type], [user_name], [password], [salt], [avatar], [real_name], [telephone], [email], [is_audit], [is_lock], [add_time]) VALUES (1, 1, 1, N'admin', N'87FA6AD6CBFDF3108E4DD6F47F5D04A4', N'24V0XZ', N'', N'超级管理员', N'13800138000', N'[email protected]', 0, 0, CAST(0x0000A73C00E1AC44 AS DateTime))
SET IDENTITY_INSERT [dt_manager] OFF
插入 Payload 如下:
https://url?id=; dt_manager(role_id,role_type,father_id,user_name,password,salt,is_lock) (,,,,,,);


