2023年11月,一个做外贸独立站的朋友半夜给我发消息,说网站首页被挂了一个博彩页面,服务器上多出几个没见过的aspx文件。我让他查一下DTCMS版本,果然是V3.3——那个已经两年没更新过的老版本。这事不新鲜,但每次遇到还是觉得可惜,因为DTCMS本身底子不差,栽在安全上实在冤枉。
DTCMS是国内一款老牌的开源内容管理系统,基于.NET开发,早年做企业站和商城的人用得不少。它的代码结构说不上优雅,但功能齐全,二次开发也算方便。问题出在安全审计上——官方更新慢,社区贡献的补丁零零散散,很多用户装完就不管了,版本停留在V2.x或V3.x的大有人在。
最典型的漏洞是文件上传。DTCMS后台的上传接口对文件类型做了白名单,但校验逻辑写在了客户端JavaScript里。抓包改个后缀,直接传aspx马上去,服务器照单全收。我见过一个案例,攻击者用默认管理员账号admin/123456登录后台,传了个伪装成jpg的webshell,路径是/upload/202311/xxx.aspx。从登录到拿shell,全程不到三分钟。
SQL注入也跑不掉。V3.2之前的版本里,/tools/submit_ajax.ashx这个接口处理用户提交的数据时,直接把参数拼进SQL语句。构造id=1 and 1=2 union select ...就能拖库。有个做机械设备的客户,网站被拖走了全部产品数据,连带客户询盘记录一起泄露。攻击者后来拿这些数据去敲诈,开口要两个比特币。
还有个容易被忽略的点:DTCMS默认数据库是Access,文件放在/data/目录下,文件名是dtcms.db。如果服务器没配好MIME类型,直接访问这个路径就能下载整个数据库。里面存着管理员密码的MD5哈希,拿去cmd5.com一查,弱密码瞬间还原。我试过十几个DTCMS站点,至少三个能直接下到数据库文件。
后台路径也是明牌。/admin/或者/manage/,默认账号密码写在官方文档里。很多站长装完不删install目录,不改进后台路径,不改默认密码。这三件事只要做一件,攻击成本就能翻好几倍,但偏偏大多数人一件都不做。
修复方案其实不复杂。升级到最新版,哪怕官方更新慢,社区也有非官方的安全补丁。后台目录改名,加IP白名单。上传接口重写,服务端做文件头校验,禁止执行权限。数据库换成SQL Server或者MySQL,别用Access。Web.config里把/data/和/upload/目录的脚本执行权限关掉。
说句不中听的,DTCMS的漏洞大部分不是技术难题,是态度问题。官方停更了,用户也不上心,装完就往那一扔。等被挂马了、被拖库了、被搜索引擎标红了,才想起来找人修。修一次的钱,够请人做十次安全加固。这笔账,很多人算不过来。
我现在遇到用DTCMS的客户,第一件事就是查版本,第二件事就是翻日志看有没有异常上传。十次里有八次能翻出点东西,有时候是几年前的webshell,有时候是没清理干净的测试文件。这些站点就像没锁门的仓库,路过的人推一把就开了。技术债这东西,欠着不还,迟早要连本带利吐出来。