网站万能密码
去年冬天,网站万一个做运维的密码朋友半夜给我打电话,说他们公司官网后台被人登进去了。网站万我问他怎么进去的密码,他沉默了两秒,网站万说:“对方用admin/admin就进去了。密码”
这不是网站万段子。很多网站的密码后台登录框,至今仍然接受这种组合。网站万所谓“网站万能密码”,密码从来不是网站万什么高深漏洞,而是密码人类懒惰的产物。
那些年我们试过的网站万万能密码
早期互联网有个流传很广的列表:admin、123456、密码password、网站万root、test。有人做过统计,全球暴露在公网的设备里,超过三成用默认凭证就能登录。2016年Mirai僵尸网络搞瘫半个美国互联网,靠的就是扫描物联网设备,试那几十组默认账号密码。摄像头、路由器、DVR,出厂设置全是admin/admin或者root/12345。厂商懒得改,用户也懒得改,两边一拍即合。
我自己的经历更直接。前年帮一个客户做安全评估,他们内部OA系统的管理员账号是system,密码是system888。我登录进去的时候,后台显示有四百多个员工账号,考勤、工资、合同全在里面。客户后来问我怎么发现的,我说:“你猜我试了第几个?”
万能密码背后的逻辑漏洞
严格来说,“万能密码”分两种。一种是弱口令,就是上面说的默认账号密码。另一种是真正的逻辑绕过,比如SQL注入里的' OR '1'='1' --,输入这个,有些老系统的登录验证直接失效。我见过一个政务网站,登录框输入这个payload,直接跳转到管理员首页。开发人员把用户输入拼进SQL查询,连参数化都懒得做。
还有更离谱的。某电商平台早期版本,登录时如果密码字段传空数组,后端password == ''判断为真,直接放行。这种漏洞在PHP应用里尤其常见,因为PHP的松散比较类型。你输入一个空数组,它跟空字符串比较,返回true。开发人员以为密码为空就拒绝,结果被一个[]绕过去了。
为什么这些漏洞一直存在
我观察下来,核心原因就一个:开发阶段没人管安全,上线之后没人改默认配置。很多中小企业的网站是外包做的,交付的时候管理员账号密码写在文档里,文档丢在共享盘上,三年没人动。运维换了一茬又一茬,新来的人不知道后台地址,更不知道密码。等到被入侵了,才发现登录凭证还是初始那套。
另一个原因是“反正没人会试”的侥幸心理。我见过一个后台,登录路径是/admin_login.php,账号admin,密码admin123。我问负责人为什么不改,他说:“这路径这么偏,谁能找到?”实际上,Google一天能扫到几万个这种路径。自动化工具批量扫描,几秒钟就试完了。
怎么防
改密码。强制复杂密码。加登录失败锁定。上双因素认证。这些措施老生常谈,但真正做的没几个。我自己的服务器,SSH端口改了,密码登录关了,只留密钥。后台登录加了TOTP,每次输六位动态码。麻烦是麻烦,但比半夜被叫起来强。
还有一点:别用同一个密码。很多人后台密码跟邮箱密码一样,一个泄露全泄露。密码管理器生成随机字符串,每个站点独立。记不住就写在纸上锁抽屉里,比复用强。
网站万能密码这东西,本质上不是技术问题,是人的问题。只要还有人偷懒,它就永远存在。
(责任编辑:百科)
