红帆ioffice渗透测试利用技巧

前言

最近在审计红帆ioffice .net 的代码,发现了许许多多的漏洞。如多处的未授权的SQL注入,前后台的任意文件下载,前台的任意文件写入,已经被修复的前台任意文件上传,还有任意用户登录漏洞。因此写下自己对红帆ioffice漏洞利用技巧。

红帆ioffice利用技巧

红帆ioffice在测试过程中的问题

用户密码解密

过程分析

红帆ioffice的默认数据库是ioffice,默认用户名是ioffice,存放用户数据的表是mrbaseinf

如当我们测到SQL注入时,想要进后台,所以直接使用命令

python3 sqlmap.py -r 2.txt -D ioffice -T mrbaseinf -C "loginid,Pwd,sysSam,CheckSam" --dump

sqlmap传送门

image

拿到密码后,这个时候就应该考虑到解密的问题了。

红帆的默认密码是96-E7-92-18-96-5E-B7-2C-92-A5-49-DD-5A-33-01-12,即111111

实际上这里是md5(111111),即每两个字符中添加一个-。

image

image

从代码层面分析发现,这段算法就是md5,不可逆,因此只能考虑去掉-后,在通过cmd5hash值,得到明文。

image

cmd5传送门

image

当然cmd5也不是所有hash都能查到的,这里就得借助sam了。

注:sam的全称是security account manager,即安全账号管理

红帆在设计的时候,可能考虑到了hash不可逆的因素,怕用户忘记密码,导致密码无法被解,因此在数据表字段设计的时候,增加了sysSamcheckSam。简单的说,这两个值解出来后,可能就是pwd字段的明文。

image

通过查询默认的checkSam或者sysSam的值时,会发现。
image

在使用sql语句更新时,又增加了sysSam

注:此处文档中admin的密码是111111

image

因此如果解密不出密码时,覆盖密码最好是添加一个sysSam

image

利用总结

用sql注入获取数据,进后台时,可以利用该方法尝试解密密码。

配置文件dbpwd解密

过程分析

.net的配置文件是web.config数据库连接信息是在appSettings节点中。

查看ioffice的配置文件,发现数据库的连接密码被加密了,因此就需要解密该密码了。

image

.net加载web.config的节点,是通过System.Web.Configuration.WebConfigurationManager

如这里需要加载appSettings,那么则需要调用WebConfigurationManager下AppSettings方法去获取到配置文件的相关参数的。

通过dnspy反编译/ioffice/bin目录下的dll文件

dnspy传送门

iOWebCSP.dll文件中,即iOWebCSP对象下的GetWebDbConnectString方法中,我们可以看见ioffice是如何连接数据库的。

image

可以看见,在第131行中有这样一段代码

1
text3 = this.b(WebConfigurationManager.AppSettings["dbpwd"]);

获取到dbpwd后,调用当前对象下的b方法进行解密操作。

image

跟进后,发现也就是一个des加解密的问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private string b(string A_0)
{
if (Operators.CompareString(A_0, "", false) == 0)
{
if (true)
{
}
}
else
{
try
{
byte[] array = Convert.FromBase64String(A_0);
return Encoding.UTF8.GetString(this.des.CreateDecryptor().TransformFinalBlock(array, 0, array.Length));
}
catch (Exception ex)
{
return "";
}
}
return "";
}

跟进到des后发现,密钥和偏移量是直接在构造方法iOWebCSP中被初始化了。

image

直接编写解密脚本。

image

拿到明文密码就就想着要登录数据库咯。

cnstr中,server=.代表server=127.0.0.1:1433database="ioffice",还不知道数据库连接用户是谁。

继续往下看。

image

变量d是直接在构造方法中被初始化成了ioffice,即当前数据库用户(默认数据库用户)是ioffice

最终成功连上数据库

image

利用总结

ioffice任意文件下载漏洞,当获取到web.config时,可解密密码,恰好1433开放,就能直接起飞。

当拿到服务器权限时,进不去后台,可通过此方法连上数据库,再解密用户密码,能登录后台。

webshell 解析问题

过程分析

审计时发现了任意文件写入和任意文件上传漏洞后(不会重命名),尝试利用,默认写入和上传路径都是在/ioffice/upfiles/目录下,分析代码和实际测试发现,文件不会重命名。

最开始是在/ioffice/upfiles/目录下传aspxashxasmx.net 可解析的脚本文件。直接访问,发现是会被重定向的。

image

注:文件存在和不存在都会被重定向

后来有师傅告诉我说,红帆都是传的asp马。

但是实际测试发现,asp马的执行权限非常的低,所以还是得传.net的马。

image

最后测试发现,可以传到/iOffice/Identity/目录下。

image

利用总结

直接跨目录将webshell写到/iOffice/Identity/即可。

总结

红帆ioffice,现在互联网产品的案例是很少了的,代码大概也都是七八年前的那批程序员写的,所以漏洞许许多多各种各样。通过审计前人留下的坑,增长了自身对漏洞代码的认识,这个还是很不错的。

在审计红帆OA时,还发现可能存在xxe漏洞和Newtonsoft.Json反序列化漏洞。但是由于默认配置原因,利用不成功,还是比较遗憾的。

Author: jdr
Link: https://jdr2021.github.io/2022/09/09/红帆ioffice渗透测试利用技巧/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.