渗透测试这行干久了,渗透方法会发现一个挺有意思的渗透方法现象:真正能撕开口子的,往往不是渗透方法什么高深漏洞,而是渗透方法一些被人忽略的细节。去年我给一家中型电商做授权测试,渗透方法目标站点用了WAF,渗透方法端口扫了一遍只开了80和443,渗透方法看起来密不透风。渗透方法结果我在登录页的渗透方法“忘记密码”功能里发现,重置链接的渗透方法token是base64编码的邮箱地址加时间戳,时间戳精确到秒,渗透方法而且服务端没有校验token是渗透方法否过期。我写了个脚本,渗透方法把目标邮箱和前后三天的渗透方法所有秒级时间戳组合起来暴力枚举,四十分钟后拿到了管理员账户的渗透方法重置链接。
这就是渗透的本质——你不需要攻破城墙,只需要找到一扇没锁的窗。
信息收集不是走过场
很多人一上来就掏sqlmap、nmap猛扫,这跟拿大锤砸保险柜没区别。真正有价值的信息藏在公开渠道里。目标公司的招聘信息会告诉你他们用什么技术栈,GitHub上的代码仓库可能泄露内网IP和测试账号,甚至员工在技术论坛的提问都能暴露系统架构。我习惯先花两三天只做被动信息收集,不碰目标任何系统。有一次从目标公司一个离职员工的博客里,看到他抱怨“公司VPN用的还是默认的admin/admin”,试了一下,真进去了。
漏洞利用要讲“手感”
工具输出的结果只是起点。比如SQL注入,sqlmap跑出注入点很容易,但怎么把数据带出来、带多少、什么时候停,全靠经验判断。有次遇到一个盲注点,布尔型,响应时间差异只有几十毫秒,sqlmap跑得极慢。我手动构造payload,发现数据库是MySQL,于是用
if(substr(database(),1,1)='a',sleep(0.1),0)这种二分法逐字符猜,反而比工具快。渗透有时候像钓鱼,你得感受线的松紧,不能光看浮漂。权限维持和痕迹清理
拿到shell只是开始。你得考虑目标会不会重启、补丁会不会打上、蓝队会不会发现。我习惯在拿到权限后立刻做三件事:确认系统版本和补丁情况、找隐蔽的持久化位置、清理操作日志。Windows下计划任务和注册表Run键太明显,我更喜欢用WMI事件订阅,触发条件设成系统启动后五分钟,执行一个看起来像正常服务的脚本。Linux下就简单些,往/etc/rc.local或者cron.d里塞一行,文件名伪装成logrotate之类的。
痕迹清理不是把日志删干净就完事。有一次我忘了清除bash_history,结果蓝队通过命令历史还原了我的整个攻击路径。后来我养成了习惯,每次操作完执行
history -c && echo > ~/.bash_history,再把文件时间戳改成和周围文件一致。报告比攻击本身更重要
客户不关心你用了多炫的技巧,他们只想知道:风险在哪、影响多大、怎么修。我写报告会把每个漏洞拆成“位置-复现步骤-危害-修复建议”四块,复现步骤精确到点击哪个按钮、输入什么内容。修复建议不给模棱两可的“加强输入验证”,而是直接写“在login.php第23行,将
$username = $_POST['user'];改为$username = mysqli_real_escape_string($conn, $_POST['user']);”。渗透方法说到底是人和系统的博弈。系统是死的,人是活的。你比开发多想一步,比运维多走一步,比蓝队多看一步,就能找到那条别人没注意到的路。
顶: 631踩: 749






评论专区