游客发表
去年秋天,实例渗透我帮一家小电商公司做安全巡检。实例渗透他们的实例渗透后台登录接口,验证码是实例渗透前端生成的——就是那种用JavaScript画出来的四位数字,图片都没经过服务器。实例渗透我打开浏览器控制台,实例渗透把验证码校验函数直接改成返回true,实例渗透五秒钟就绕过去了。实例渗透这不是实例渗透什么高深漏洞,纯粹是实例渗透开发图省事。
渗透测试这行干久了,实例渗透你会发现大部分入口不是实例渗透靠什么0day打进去的,而是实例渗透靠这种“省事”。开发觉得方便,实例渗透运维觉得省心,实例渗透最后攻击者觉得开心。
那家电商用的是某开源商城系统,版本号还停留在两年前。我在页面底部看到“Powered by XXX v2.3.1”,顺手搜了一下这个版本的已知漏洞。结果出来一堆:SQL注入、文件上传、后台弱口令。先试了SQL注入,在商品搜索框输入一个单引号,页面直接报数据库错误——MySQL的报错信息完整回显。这意味着可以联合查询,把管理员表拖出来。
但我没急着拖库。先看看有没有更省力的路径。后台地址是/admin,默认账号admin,密码试了admin123、123456、admin888,第三个就进去了。后台有个“数据库备份”功能,备份文件直接生成在/backup/目录下,文件名是日期格式。我下载了最新的备份,解压后拿到用户表,密码是MD5,没加盐。用彩虹表跑了一下,80%的密码明文出来了。
整个过程不到二十分钟。没有用任何高级工具,就是浏览器加一个MD5解密网站。
很多人对渗透测试有误解,觉得是黑客坐在黑漆漆的房间里敲命令行,屏幕上一堆绿色代码滚动。真实情况往往相反——大部分成功入侵靠的是信息收集和耐心。你知道目标用了什么框架、什么版本、什么中间件,剩下的就是按图索骥。
另一个问题是“默认配置”。我见过太多服务器开着22端口,root密码是“root”;见过Redis没设密码,直接写SSH公钥;见过Elasticsearch暴露在公网,数据随便读。这些不是漏洞,是配置疏忽。但攻击者最喜欢的就是这种疏忽。
有个做安全的朋友跟我说过一句话:“你不需要跑得比熊快,你只需要跑得比同伴快。”放在这里就是:你不需要防御所有攻击,你只需要比隔壁公司做得稍微好一点。攻击者也是要算成本的,挑软柿子捏是本能。
说几个实际能落地的。第一,别用默认账号密码,后台路径也别用/admin、/manager这种。第二,所有用户输入的地方都要过滤,前端校验只是体验,后端校验才是安全。第三,及时更新组件版本,别觉得“能用就行”。第四,数据库备份文件别放在Web目录下,加个随机文件名,或者干脆存到对象存储里。
还有一点:日志要留。我那次渗透,如果对方开了WAF,或者至少记录了异常请求,我可能早就被发现了。但他们的日志只记了访问时间,没记请求参数。等于门被撬了,连个脚印都没留下。
渗透测试的本质不是炫技,是帮人发现问题。发现问题的方式越简单,说明问题越严重。一个单引号就能让数据库报错,这比任何花哨的exploit都值得警惕。
友情链接