某.NET程序代码审计过程中,发现后门并对其进行分析,最终实现后台权限获取。
拿到代码后,马上开始审计工作,由于该Web系统是后台系统,在测试过程中并未提供账号密码,于是想着找到一些未鉴权的接口,并利用漏洞获取权限。
权限校验代码:
寻找没有权限认证的接口,最终发现一个叫做checksecword的接口,没有权限认证,具体代码如下:
只需要满足secs和secs2的密文与内置密文相等,且IP满足11.*.*.232,就能执行其功能,于是翻看起加密功能:
加密解密代码都有,而且sKey写死在程序里面,于是copy出来修改,编写解密程序:
继续跟进代码,看IP怎么来的:
在存在VIA头的时候,则先从X-FORWORDED-FOR中取IP,因此存在绕过的可能性。
继续分析代码,看其checkKeyword的功能:
跟进GetModeList:
发现其从user表里面取出账号密码。然后返回到前端。看到这里,恍然大悟,这不就是个后门嘛?
于是尝试利用,却:
猜测原因要么是解密错误,要么是XFF伪造的问题,于是修改dll,替换到Web中,进行排错:
发现自己编写程序解密后的明文少了几位,也不知道是什么原因。不过拿到真实的明文后,构造接口,访问后门:
成功获取账号密码,打完收工。
刚才看到在程序里面写死的IP,想着说查一下,发现:
存活着3389,也就意味着,该程序的作者确实通过该后门控制着所有的系统。
所以,使用开源程序要慎重。
夯实安全责任
共筑网络安全
原文始发于微信公众号(川云安全团队):某Web系统后门分析