当前位置:首页 > 百科

简述针对一个网站的渗透测试思路

某次授权测试中,简述目标是针对站一家年久失修的电商平台。我花了半小时扫目录,个网一无所获。渗透思路直到随手点开“忘记密码”功能,测试发现响应头里藏着X-Powered-By: PHP 5.6。简述那一刻我就知道,针对站这单活稳了——旧版本意味着至少二十个已知CVE等着我撞。个网

渗透测试从来不是渗透思路按图索骥,更像小偷踩点。测试第一步永远是简述信息收集,但别只盯着子域名和端口。针对站我习惯先看技术栈指纹:wappalyzer识别框架,个网看响应头,渗透思路翻JS文件里的测试注释。有一次在某个政府网站的main.js里发现一段被注释掉的API地址,直接指向内网管理后台。这种低级失误比任何漏洞扫描器都管用。

拿到基础信息后,别急着打点。把目标想象成一栋楼,你得先搞清楚哪扇门是虚掩的。我会同时做三件事:用gobuster跑目录,用burp抓登录包测逻辑漏洞,顺手查一下SSL证书历史记录。证书信息经常暴露子域名,而子域名往往是防护最薄弱的地方——大家都把精力花在主站上,测试环境的admin可能连密码都没改。

真正的高价值漏洞通常藏在业务逻辑里。SQL注入和XSS已经烂大街了,但越权漏洞依然是黑盒测试的盲区。试着注册两个账号,A账号修改B账号的个人资料,或者把订单号的数字改小一位。去年我测试一个外卖平台,发现遍历商户ID就能查看所有商家的营业流水,连加密都没做。这种漏洞扫描器永远发现不了,但危害比SQL注入严重得多。

如果目标有文件上传功能,别急着传webshell。先传一个1x1的jpg,再传一个带恶意代码的jpg,观察返回差异。有些系统只校验文件头,有些会二次渲染图片。我用过一个技巧:把PHP代码藏在EXIF信息里,配合文件包含漏洞,直接绕过所有WAF。当然,前提是你得先找到文件包含点——多翻翻index.php?page=这种参数。

到了后期,权限提升往往比突破边界更磨人。拿到低权限shell后,先看/etc/passwd和sudo -l,再找数据库连接文件。大多数开发会把数据库密码硬编码在配置文件里,而root用户往往用弱密码。有一次我拿到一个Django项目的settings.py,里面居然写着password = "root",结果数据库里躺着几十万条用户明文密码——连哈希都没做。

整个过程里,最容易被忽视的是第三方组件。目标网站可能本身很安全,但用了某个有漏洞的富文本编辑器,或者老旧的验证码插件。查一下页面底部的版权信息,去CVE库搜对应版本。去年某知名论坛被脱库,原因就是一个过期的CKEditor版本存在任意文件上传漏洞。这种问题,你扫描器跑三天都未必能发现,但看一眼版本号就懂了。

最后说点得罪人的话:很多所谓的渗透测试报告,不过是把Nessus的结果复制粘贴一遍。真正有价值的测试,应该花70%的时间在手工验证和逻辑梳理上。自动化工具只是拐杖,走不远的。你想想,黑客会老老实实按着扫描器的报告来攻击你吗?

分享到: