网站常见安全漏洞 | 青训营

239 阅读3分钟

‌⁢‬⁣⁤‬⁣⁤‍‬⁡⁢‬⁢⁣⁢⁣‬‬⁣⁢⁡‬‬⁡⁡⁤‬‬⁢⁡⁢⁡⁤网站常见安全漏洞.pptx - 飞书云文档 (feishu.cn)

网站常见安全漏洞-客户端漏洞介绍 - 掘金 (juejin.cn)

漏洞

image-20230816160315034.png

安全事件

image-20230816160352823.png

image-20230816160755717.png

image-20230816160916333.png

漏洞分类

image-20230816160945854.png

image-20230816161004636.png

服务端漏洞

第三方组件漏洞

image-20230816161117925.png

第三方包等自身的漏洞 导致本身漏洞

image-20230816161245214.png 上面打印日志和解析json都是因为在字符串中有远方服务器的地址 解析的过程中有一些异常字符串的流程 导致下载了远程恶意的代码在本地执行

解决

image-20230816161516505.png

image-20230816162143500.png 发现第三方有漏洞可以进行升级 因为这种漏洞第三方一般都是会解决的

SQL注入

image-20230816162225543.png select 和 update 等sql可能会出现这种问题,执行了一些不可预期的sql语句

image-20230816162605054.png 上面order_id 和 sql语句进行拼接

image-20230816162727818.png java

image-20230816162835587.png

image-20230816163023556.png #与$区别

(1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是id,则解析成的sql为order by "id"。

(2)将传入的数据直接显示生成在sql中。如:orderby将传入的数据直接显示生成在sql中。如:order by user_id​$,如果传入的值是id,则解析成的sql为order by id。

(3)#方式在很大程度上能够防止sql注入。

(4)$方式无法防止sql注入。

(5)$方式一般用于传入数据库对象,例如传入表名。(这里得注意SQL注入问题

(6)一般能用#的就别用$。

golang

image-20230816183239808.png 下面是sql注入的问题 如果第一个条件为真 执行sleep 那么会延迟返回数据

解决

image-20230816183440906.png

命令执行

image-20230816183531742.png 恶意输入[1|id]之后可能获得某些信息 然后进行删除 更新等操作

解决

image-20230816184117080.png

越权漏洞

image-20230816184717816.png 业务场景中遇到的

未授权:没有进行过身份认证等 就直接获取到必须经过认证才能进行的操作

水平越权:访问到自己没有权限访问的,比如别人的数据信息(这个别人和自己相同等级)

垂直越权:普通用户访问到管理员的权限范围

水平越权

image-20230816185015466.png

垂直越权

image-20230816185050409.png

image-20230816185104110.png

SSRF

image-20230816185242383.png

image-20230816185402909.png 将上面的stockApi直接改成下面的进行访问

image-20230816185437231.png 在简单场景下可以通过白名单进行过滤

在复杂场景下 可以通过一些包进行host解析 判断如果是内网则拒绝访问

文件上传漏洞

image-20230816185739086.png 会把文件二进制和其他信息放在一个post包来执行

  1. 上传服务端的脚本

    image-20230816190021351.png 读取文件的脚本 可以读取到服务器文件的一些信息

  2. 创作风险

    image-20230816190114742.png 如果返回的图像和视频等都是直接的url 那么攻击这可以直接获取到视频链接放到其他地方 而不用花钱

解决

image-20230816190352425.png

客户端漏洞

开放重定向

image-20230816190546297.png 如果定向的链接外部可控 存在一定的风险,可能会跳转到不好的网站

XSS

image-20230816222418090.png

image-20230816222447075.png 可能通过这种方式获取到token等重要信息,只需要将username换成要做的事情,比如改密码等

比如下面的场景

image-20230816223021698.png

解决

image-20230816223240583.png 需要在不同的阶段进行防护

对一些特殊字符拦截 防止形成html或者是对html进行encode,实在不行的话需要提供富文本功能时可以加入白名单或者黑名单(对事件型做好过滤 如onchange)

CSP在浏览器的响应头里面配置 或者是html文件中配置

CSRF

image-20230816224101499.png 甚至可以修改转账的收款方等

例子

image-20230816224227947.png

image-20230816224235286.png

解决

image-20230816224303879.png

samesite 通过不同的程度设置 来让浏览器决策请求的时候要不要带cookie(但是可能会对某些业务造成影响)

点击劫持

一种障眼法

image-20230816224723305.png 例子

image-20230816224833790.png

image-20230816224900151.png

解决

image-20230816225004461.png

CORS 跨域配置错误

image-20230816225055628.png

image-20230816225128356.png 请求的时候会自动带上origin头 需要判断origin的合法性

image-20230816225303750.png 最终跳过跨域限制来不信任的origin来发起请求

比如要查询用户的key,后端会判断origin是否可以通过请求,如果是利用反射的话基本都会通过,这样就可以获取到key的信息,拿到账号信息

例子

image-20230816225433207.png

解决

image-20230816225714469.png

WebSocket

image-20230816225741991.png

image-20230816225829713.png 如果没有做好origin的限制 那么任意的origin都可以截取到消息

image-20230816230002625.png

解决

image-20230816230019675.png