2023年某电商平台被拖库,见漏泄露数据在暗网标价12万美元。见漏溯源发现,见漏攻击入口是见漏一个三年前上线的优惠券领取接口——开发当时只做了前端校验,后端直接信任了用户传来的见漏userId。这类事我见过太多,见漏下面按实际遇到频率排一排。见漏
SQL注入:老而不死
某政务系统查询接口,见漏参数是见漏
id=1。测试时换成id=1' and 见漏1=1--,页面正常;换成id=1' and 见漏1=2--,报错。见漏再试id=1' order by 5--,见漏列数出来了。见漏最后用sqlmap跑出sa权限,见漏直接xp_cmdshell执行系统命令。整个过程不到二十分钟。现在预编译语句普及了,但order by、表名、字段名这些没法参数化的地方,拼接依然常见。我见过一个报表系统,排序字段直接从URL取,过滤只用了黑名单——把
select替换成空字符串。seleselectct绕过去,照样注入。XSS:存储型最要命
反射型XSS需要诱导点击,存储型不用。某论坛的富文本编辑器允许
<img>标签,但只过滤了onerror属性。攻击者用onload,或者更直接的<svg/onload=alert(1)>,payload就进了数据库。每个访问该帖子的用户都会中招。更隐蔽的是DOM型XSS。前端用
location.hash取值渲染页面,#<img src=x onerror=alert(1)>,服务端日志里连请求都看不到。WAF?不存在的,流量根本没出浏览器。CSRF:浏览器太信任你
某后台管理系统的密码修改接口,只验证了Cookie里的session。攻击者构造页面:
<img src="https://admin.site/changePwd?new=hacked">,管理员一访问,密码就改了。SameSite Cookie能防大部分,但老系统升级成本高,很多还在裸奔。有个细节:GET请求做敏感操作是原罪。我审计过一个银行系统,转账接口用GET,参数全在URL里。虽然加了CSRF Token,但Token可预测——基于时间戳的MD5,前六位固定。爆破一下午就进去了。
文件上传:绕过姿势比漏洞本身多
前端校验
accept="image/*"?改包就行。后端校验Content-Type?改成image/jpeg。校验后缀名?shell.php.jpg,或者shell.pHp,再不行shell.php%00.jpg(PHP 5.3以下)。最离谱的一次:上传目录有执行权限,但文件名被重命名为
时间戳.jpg。攻击者上传.htaccess,内容AddType application/x-httpd-php .jpg,然后传1.jpg,直接getshell。运维说“我明明禁了php后缀”。SSRF:内网探测的跳板
某图片加载功能,参数是URL。测试时填
http://127.0.0.1:6379,返回了Redis的版本信息。再填http://169.254.169.254/latest/meta-data/,AWS的临时凭证直接打出来。用凭证登录S3,整个公司的备份数据都在里面。SSRF的可怕在于它把外部请求带进了内网。Gopher协议还能打Redis写计划任务、打MySQL执行SQL。Java的
URLConnection支持file://,直接读本地文件。修复?白名单域名,禁止跳转,禁用危险协议。但业务需求往往要求“用户可自定义URL”,这就成了死结。越权:逻辑漏洞的重灾区
水平越权:
/api/user/1001/orders改成/api/user/1002/orders,看到了别人的订单。垂直越权:普通用户Cookie访问/admin/deleteUser?id=5,接口没做角色校验,直接删了管理员。有个案例:某SaaS系统用JWT做认证,payload里
role: "user"。攻击者改成role: "admin",签名算法改成none,服务端居然接受了。JWT的alg字段必须硬编码校验,这是基本操作,但总有人忘。漏洞这东西,本质是“信任了不该信任的输入”。前端传什么、Cookie带什么、URL写什么,都不能信。但业务要灵活,开发要效率,安全往往排在最后。等出事再补,成本是事前的一百倍。我见过太多团队,上线前不做测试,被打了才找安全公司。那时候数据已经在暗网流通了。
顶: 279踩: 326






评论专区