当前位置:首页 > 时尚

网络渗透教学

去年秋天,网络我帮一个做外贸的渗透朋友看他的服务器。登录日志里有个IP,教学凌晨三点连续试了四百多次密码,网络用户名从admin到root再到他公司缩写。渗透没成功,教学但那种锲而不舍的网络劲头让我想起自己刚学渗透时的样子——拿着扫描器到处乱捅,以为工具跑起来就等于会了。渗透

渗透测试跟很多人想的教学不一样。它不是网络拿个现成工具点几下就能出结果的事。我见过太多新手,渗透装完Kali,教学打开MSF,网络对着教程敲一遍命令,渗透然后问:为什么没拿到shell?教学问题往往出在中间某个环节——可能是版本不对,可能是防火墙拦了,也可能是目标根本没开那个端口。但他们不看回显,不分析报错,只盯着最后那行“exploit completed”。

真正有用的第一步,是学会看。看什么?看目标暴露了什么。一个网站,先看它用什么框架,WordPress还是ThinkPHP,版本号藏在哪。看它开了哪些端口,22和3306同时开着,大概率有戏。看它的robots.txt,有时候管理员忘了删,里面列着后台地址。这些信息不需要任何高级工具,浏览器加一个curl就够。我习惯在终端里敲curl -I http://target.com,看返回头里的Server字段。如果是老版本Apache,心里就有数了。这种手动收集的过程,比跑一堆扫描器更能建立对目标的直觉。

说到工具,Nmap是绕不开的。但很多人只记-sS和-sV,不知道--script能调出多少东西。有一次我扫一个内网机器,用nmap --script http-enum,直接列出一串目录,其中/backup/下面躺着一个db.sql。下载下来,用户表里的密码是MD5,拿去cmd5一查,明文是admin123。整个过程没用任何漏洞利用,就是配置疏忽。这行里,配置问题比漏洞多得多。

再往深走,要懂点代码。不用写到能开发项目的程度,但至少能看懂PHP里的$_GET怎么被拼接进SQL,能看出JavaScript里前端校验只是摆设。我碰到过一个登录框,前端限制只能输数字,抓包改成字母,后端直接报SQL语法错误。这就是典型的只做前端校验。用sqlmap跑,-r带上请求文件,几分钟就出库名。但我不建议新手一上来就sqlmap,先手动加单引号,看报错,判断注入类型,再决定用不用工具。这个过程慢,但能让你知道为什么能注入。

提权是另一个坎。拿到webshell,权限是www-data,想读/etc/shadow,没权限。这时候要翻系统信息,uname -a看内核,find / -perm -4000找suid文件。有次我遇到一个老Ubuntu,内核2.6,直接用脏牛提权,编译运行,等几分钟,root到手。但更多时候是找不到现成exp的,得自己翻配置文件,看有没有明文密码,看cron任务里有没有可写脚本。这些活枯燥,但渗透的大部分时间都花在这上面。

写报告比拿shell还重要。客户不关心你用了什么炫酷手法,他们只想知道:哪些资产有风险,风险等级多高,怎么修。我见过一份报告,通篇“成功渗透”“获取权限”,但没写具体IP和修复建议。这种报告交出去,下次人家不会再找你。好的报告要具体到某个URL的某个参数存在什么类型的注入,给出修改代码的示例。哪怕只是建议加个mysql_real_escape_string,也比空喊“加强输入验证”有用。

这行有个错觉,以为工具越新越厉害。其实不是。老漏洞用对了地方照样有效。关键是理解原理,知道数据从哪来,到哪去,在哪断了。剩下的,就是耐心。那个凌晨三点扫我朋友服务器的IP,后来我查了下,是个没打补丁的旧版Jenkins,被人批量扫。你看,攻击者很多时候也不挑,就是广撒网。防守方要做的,就是别当那条最容易上钩的鱼。

分享到: