去年冬天我接了一个电商后台的渗透渗透测试项目,客户拍着胸脯说“我们用了WAF,测试也做过等保”。漏洞类型结果第一天我就用一个最老套的解析SQL注入拿到了管理员权限——登录框的用户名参数没过滤,直接报错回显数据库版本。渗透这事说明一个道理:漏洞不挑新旧,测试只挑有没有被真正修掉。漏洞类型
SQL注入依然是解析渗透测试里出现频率最高的漏洞之一。它不复杂,渗透就是测试应用程序把用户输入直接拼进SQL语句。但很多人以为参数化查询就万事大吉,漏洞类型我见过一个系统用了ORM框架,解析却在排序字段上直接拼接用户传来的渗透order by参数,照样注入。测试这类漏洞的漏洞类型破坏力取决于数据库权限,如果连接账号是sa或root,那基本等于把整个数据库交出去了。
XSS跨站脚本攻击分存储型、反射型和DOM型。反射型需要诱导点击,存储型更危险——比如评论区插入一段script,每个访问页面的用户都会中招。我印象很深的是一个论坛系统,它过滤了<script>标签,但没过滤<img src=x onerror=alert(1)>,结果存储型XSS直接可以盗取Cookie。现在前端框架用得多,DOM型XSS反而容易被忽略,比如innerHTML直接赋值用户可控数据。
文件上传漏洞的利用方式很直接:上传webshell。但测试时经常遇到前端校验、MIME类型校验、后缀黑名单。绕过手段五花八门——改Content-Type、用.phtml或.php5后缀、在文件名里加%00截断、甚至配合解析漏洞。有一次客户上传目录不允许执行PHP,但服务器是Apache,我传了一个.htaccess文件把.jpg解析成PHP,照样拿到shell。这类漏洞的根因不是上传功能本身,而是上传后的文件被当作代码执行了。
越权漏洞分水平越权和垂直越权。水平越权是A用户能看B用户的数据,垂直越权是普通用户能干管理员的事。我测过一个OA系统,普通员工的Cookie里role=user,改成role=admin就能进后台。更隐蔽的是API层面的越权,前端隐藏了按钮,但接口没做权限校验,直接调接口就能删别人的数据。这类漏洞靠扫描器很难发现,得手工梳理业务逻辑。
SSRF服务端请求伪造,简单说就是让服务器替你发请求。它常出现在图片加载、URL预览、Webhook这些功能里。危害在于可以探测内网、读取云元数据。我遇到过一个小程序,它的“分享链接生成”接口接受一个url参数,服务器会去请求这个url并返回标题。我填了http://169.254.169.254/latest/meta-data/,直接拿到了云主机的临时凭证。SSRF的利用深度取决于内网有什么,有时候比RCE还致命。
逻辑漏洞是最考验渗透测试人员的地方。比如密码找回时验证码没绑定用户、支付时修改金额为负数、优惠券可以无限领取。这类漏洞没有固定特征,扫描器基本扫不出来。我测过一个投票系统,前端限制每个IP投一票,但后端没校验,我写个循环就刷了十万票。逻辑漏洞的修复往往比技术漏洞更麻烦,因为它涉及业务流程的重构。
反序列化漏洞在Java、PHP、Python里都出现过。Java的readObject、PHP的unserialize、Python的pickle.loads,一旦用户可控数据进入这些函数,就可能触发RCE。最经典的案例是Apache Commons Collections反序列化,影响了无数Java应用。这类漏洞利用链复杂,但一旦打通就是直接拿服务器。我建议开发人员永远不要反序列化不可信数据,如果必须用,就做白名单校验。
渗透测试不是拿着扫描器跑一遍就完事。工具能发现SQL注入和XSS,但越权、逻辑漏洞、SSRF的利用链,得靠人去看代码、抓包、分析业务。每个漏洞背后都是一个具体的疏忽——少写了一个过滤函数,少做了一次权限判断,少校验了一个参数。修漏洞也一样,不是加个WAF就完事,得从代码层面把问题堵住。