|
去年秋天,入侵我帮一个做外贸的服务朋友查他公司那台老旧的Windows Server 2012。登录日志里有个IP从乌克兰连过来,器教尝试了四百多次RDP登录。入侵密码是服务admin123。他跟我说“我们这种小公司谁看得上”,器教但攻击者根本不在乎你是入侵谁——自动化脚本每天扫全网IP段,撞上一个算一个。服务 入侵服务器这件事,器教技术门槛比大多数人想象的入侵低得多。真正需要的服务不是天赋,是器教耐心和对细节的敏感。 从端口开始 拿到一个IP,入侵第一步永远是服务端口扫描。nmap -sS -sV -p- 目标IP,器教这条命令跑完大概十几分钟。慢,但值得。很多服务器只开了22和80,看起来没什么搞头,可你要是扫到8080上跑着Jenkins,或者6379端口大剌剌地敞着Redis,那基本等于门没锁。 我印象最深的一次是2022年,一个客户的测试服务器开了MongoDB的27017端口,没设密码。连上去一看,里面存着他们整个用户数据库,包括手机号和加密后的密码。这种配置错误在小团队里太常见了——开发图省事,上线时忘了改。 弱口令是永恒入口 Hydra跑SSH爆破,字典用rockyou.txt加上一些针对性的组合。很多运维喜欢用公司名+年份做密码,比如“公司拼音+2023”。这种规律一抓一个准。我见过最离谱的是某台服务器root密码设成“1qaz2wsx”,键盘上从左到右划下来,三秒钟就能猜到。 但爆破动静大,容易被fail2ban封IP。更聪明的做法是找泄露的凭证库。领英、微博的数据泄露事件那么多,很多人所有平台用同一个密码。拿邮箱去Have I Been Pwned查一下,再配合社工库,成功率比盲爆高得多。 Web应用才是重灾区 服务器本身加固得再好,上面跑的Web应用有漏洞也白搭。SQL注入虽然老,但至今没死透。一个单引号扔进搜索框,报错信息直接把数据库版本和表名吐出来。sqlmap一挂,剩下的交给时间。 文件上传漏洞更直接。有些CMS的上传功能只在前端用JavaScript校验后缀名,抓包改成.php直接传上去,连上菜刀或者蚁剑,服务器就是你的了。我去年遇到一个站,上传目录还能直接访问,传个webshell上去,浏览器里就能执行系统命令。 横向移动与权限维持 拿到一台机器只是开始。翻配置文件找数据库密码、找SSH密钥、看history记录里有没有明文密码。Linux下cat /etc/shadow如果能读,拿回去慢慢跑john。Windows下用mimikatz抓内存里的明文密码或者哈希,域环境里一抓一大把。 权限维持这块,Linux下加个SSH公钥到authorized_keys,或者写个cron定时反弹shell。Windows下注册表加个自启动项,或者搞个计划任务。手法不复杂,关键是要隐蔽——别用默认端口,别用容易被发现的文件名。 防御比攻击难 说这些不是教人干坏事。恰恰相反,我写这篇文章是因为见过太多服务器被入侵后数据被加密勒索的案例。攻击者用的手法往往就是上面这些基础操作,但防御方连最基本的改默认密码、关不必要的端口都没做。 一台服务器要防住自动化扫描,其实只需要做到几点:SSH禁用密码登录改用密钥、防火墙只放行必要端口、Web应用及时打补丁、数据库不对外网开放。这些事花不了一个下午,但能挡掉99%的脚本小子。 真正定向攻击你的人,不会因为这几步就放弃。但大多数情况下,你根本不值得被定向攻击。让脚本小子绕道走,已经够了。 |