前言
记录攻防演练的其中一个比较有意思的系统。
先点赞后关注以后学习不迷路
声明:
本账号技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
弱口令
登录页面没有验证码,选择直接爆破用户名密码。
登录系统发现文件上传功能。
任意文件上传
在附件上传处发现可以上传任意文件,但返回的path貌似是加密的。
如何解密该路径呢? 思路: 1、通过任意文件下载找到dll源文件 2、通过备份下载源代码
任意文件下载
利用备份字典并不存在www.zip、www.rar类似的应用备份。回到网站挖掘任意文件下载漏洞。 搜索历史数据包filename、filepath等关键字符串,发现一处任意文件下载。
找到上传FileUpload.aspx的源文件。
c#源代码一般在bin文件夹,根据返回的信息猜测dll为Sciyon.SyncPlant.Web.Frame.dll
或者 Sciyon.SyncPlant.Web.dll
成功下载到Sciyon.SyncPlant.Web.dll
利用 dnSpy 分析。
灰盒审计
直接查看FileUpload类。 在SaveFiles方法里可以看到path经过了des加密之后才返回给了服务端。
那我们需要寻找一下des加密之前的路径。即text4服务端存储文件的路径。
关键代码如下:
string text = Path.GetFileName(httpPostedFile.FileName);
string text4 = string.Concat(new string[]
{
"../UPLOADTEMP/",
DateTime.Now.ToString("yyyyMM"),
"/",
base.Request.QueryString["GUID"],
"_",
this.ViewState["TYPE"].ToString(),
"/"
});
text4 = text4 + now.ToString("yyMMddHHmmssfff") + "_" + text;
即
text4 = "../UPLOADTEMP/" + "当前年月" + "GUID值" + "TYPE值" + "当前日期和时间的格式化字符串" + "_" + "获取的文件名"
经过chatgpt的解释和数据包的结构可以猜测存储的路径。
类似于
/UPLOADTEMP/202309/8C5602C94DC1FBBC710260E464A5D1BB_file/230908181333111_1.txt
整个文件路径只有文件名是不固定的,是由年+月+日+时+分 + 秒 + 随机三位数 那么只需要爆破随机的三位数即可。
成功找到txt文件。随即上传aspx webshell。
经过尝试发现是一个黑名单的过滤。
绕过黑名单
代码层在证明了我们的判断,在看到拦截常用的文件后缀时,想到使用cer的webshell。 证明可行。但访问确实403状态码。
大概率是该目录有限制。尝试../../ 跳出该目录。 根据文件存储的结构,可以通过控制GUID实现目录的跳出。
上传的文件名即为_file/230909113931111_1.cer,枚举三位随机数即可发现成功执行。