导读
网络安全攻击随着对抗技术的不断迭代更新,逐渐变得越来越复杂,网络安全攻击通常会给企业或个人造成严重的财务和声誉损失。
现在在网络中每天都在发生各种类型的网络攻击,并且网络攻击给企业和个人带来的影响越来越大。
在大多数的小公司中,信息安全充其量仅限于安装防病毒软件。并没有做好足够的网络安全攻击的防御。
下面就开始整理下常见的网络漏洞和防御网络漏洞安全思路。
一、sql注入漏洞
产生原因
应用程序将用户输入(如表单字段,URL参数,Cookie)未经充分验证或转义,直接拼接到sql查询语句中、开发者过度信任用户输入
漏洞原理
攻击者构造包含恶意的sql代码的特殊输入(payload),当恶意输入被拼接到sql语句中并发送到数据库中执行的时候,攻击者可以修改原始查询的逻辑,执行非预期的sql操作,比如查询,修改,删除数据,甚至执行数据库管理命令。
漏洞危害
- 数据泄露:窃取敏感信息(用户凭证,个人信息,商业机密)
- 数据篡改:修改,删除数据库内容,(如篡改价格,删除用户等)
- 权限提升:利用数据库特性执行系统命令,获取服务器控制权
- 拒绝服务:执行消耗大量资源的查询导致数据库瘫痪
防御措施
1.参数化查询:使用数据库驱动提供的参数化接口,将sql语句结构与数据分离
2.输入验证与过滤:对用户的输入进行严格的类型,格式,长度检查(白名单优于黑名单),但不能完全依赖
3.最小权限原则:数据库连接账户使用最低必要权限(避免使用root、sa)
4.ORM框架:使用成熟的ORM(如Hibernate,entity Framework)自动处理参数化
5.转义:在特定情况下(如无法参数化时)对特殊字符进行转义
6.web应用防火墙:部署WAF检测和拦截常见的sql注入攻击模式
二、RCE远程代码执行漏洞
产生原因
应用程序将用户可控的输入直接或间接传递给能执行系统命令,代码解释或反序列化的危险函数/接口
存在允许上传和执行恶意文件(如webshell)的漏洞,常与文件上传漏洞结合
依赖存在已知RCE漏洞的第三方组件(库,框架,服务器软件)
漏洞原理
攻击者构造特殊的输入,比如精心设计的命令参数,序列化数据,恶意脚本文件
当应用程序在处理这些输入的时候,调用了系统命令执行函数,如system(),exec(),代码执行函数如eval()或加载了恶意文件,导致攻击者的任意代码在服务器操作系统层面被执行。
漏洞危害
- 完全控制服务器:获取操作系统最高权限(root/Administrator)
- 数据窃取与破坏:读取,修改,删除服务器上所有文件
- 植入后门或挖矿木马:长期控制或利用服务器资源
- 内网渗透跳板:攻击内部网络其他系统
防御措施
1.避免使用危险函数,除非绝对必要且安全可控
常见危险函数有:
命令执行函数:system(),exec(),shell_exec()
代码执行函数:eval(),assert(),call_user_function()
2.严格输入验证与过滤:对传入的命令,代码,序列化数据的参数进行严格检查
3.最小权限原则:web服务器进程以低权限用户运行
4.文件上传安全:严格控制文件上传(类型,内容,存储位置,执行权限)
三、XSS跨站脚本攻击
产生原因
存储型、反射型:应用程序将用户提交的数据,未经验证或转义,直接输出到HTML页面当中
DOM型:客户端JS不安全的操作DOM,将URL参数等不可信数据当作HTML/JS代码插入到页面
漏洞原理
攻击者构造包含恶意JS代码的输入
当其他的用户访问包含此恶意代码的页面时,浏览器会将该代码当作页面的一部分执行
恶意脚本在受害用户的浏览器上下文中运行,可以窃取其cookie,会话token,修改页面内容,发起恶意请求,重定向到钓鱼网站等
漏洞危害
- 会话劫持:窃取用户的会话cookie,冒充用户登录
- 钓鱼攻击:伪造登录框窃取凭证
- 敏感信息窃取:窃取页面内容,表单数据,本地存储
- 键盘记录:记录用户输入
- 网站挂马/挖矿
防御措施
1.对输出进行编码或转义:根据输出位置(HTML正文、HTML属性、JavaScript、CSS、URL),使用对应的编码函数,如HtmlEncode, JavaScriptEncode, UrlEncode
2.对输入进行验证:对用户输入进行严格检查,如类型,长度,格式等,但是不能替代输出编码
3.HttpOnly Cookie:标记敏感cookie为httponly,防止JS访问
4.内容安全策略(CSP):通过HTTP头定义允许加载脚本,样式等资源的来源
5.使用安全框架:现代框架(React,Vue,Angular)通常有内置的XSS防护机制
四、CSRF跨站请求伪造
产生原因
当用户登录一个网站后,网站会认为来自该用户浏览器的请求都是经过用户授权的合法操作。这是因为浏览器在发送请求时会自动带上用户的会话信息(如 Cookie),而网站依赖这些信息来识别用户身份并提供服务。
攻击者可以利用用户对网站的信任,诱导用户访问恶意网站或执行恶意操作。例如,在论坛中发布包含恶意链接的帖子,或者通过邮件、即时通讯工具发送恶意链接。当用户点击这些链接时,攻击者就可以利用用户的会话信息来伪造请求。
漏洞原理
用户登录目标网站A,浏览器保存了会话cookie
用户访问了恶意网站B
网站B的页面中包含一个自动提交的表单或/
用户浏览器在访问B的时候,会自动携带网站A的cookie,向A发出这个请求
网站A的服务器收到带有合法cookie的请求,认为是用户自愿操作,执行了该请求(如完成转账)
漏洞危害
- 以用户身份执行非意愿操作:如修改密码,发送垃圾信息,更改账户设置,购买商品
- 数据篡改或泄露:攻击者可以篡改用户的数据,例如修改用户的密码、联系方式等,也可通过伪造请求来获取用户的敏感信息,如个人资料、账户余额等
- 服务中断和拒绝服务 :如果攻击者利用 CSRF 漏洞频繁发送大量无效的请求,可能会导致网站服务器资源耗尽
防御措施
1.CSRF Token:
服务端生成一个随机,唯一,与用户会话绑定的token,在渲染表单或涉及状态更改的请求页面时,将token嵌入表单的隐藏域或作为请求头(X-CSRF-Token),用户在提交请求的时候必须携带该token。服务端验证请求中的token是否与会话中存储的token匹配
2.检查Origin/Referer头: 验证请求是否来源于同源站点或可信来源(可被绕过或不总是存在)
3.关键操作使用POST请求: 避免用GET执行状态更改操作(但POST同样需要CSRF Token防护)
4.限制请求的有效期 :为用户的会话和请求设置较短的有效期,这样可以减少攻击者利用过期会话进行 CSRF 攻击的机会。同时,对于一些重要操作,可以要求用户在一定时间内重新验证身份,如输入密码等。
5.SameSite Cookie属性: 设置Cookie的SameSite属性为Strict或Lax(现代浏览器支持),限制第三方上下文发送Cookie,对GET请求防御效果较好
无、SSRF服务端请求伪造
产生原因
应用程序提供了用户可控的URL作为参数,如数据获取,文件下载,内网探测功能),服务端代码在发起网络请求的时候,未对用户提供的URL进行严格的过滤和限制
漏洞原理
攻击者构造一个指向内网资源或本地服务或特定协议的恶意url
应用程序服务器根据攻击者提供的url发起请求
导致攻击者能够通过受信任的服务器作为代理:
扫描或攻击内网应用/服务(数据库、管理界面)。
访问云服务实例元数据(获取敏感凭证)。
读取服务器本地文件(利用file://协议)。
利用协议特性进行端口扫描或与其他服务交互(如Redis未授权访问)。
反射型DDoS攻击。
漏洞危害
- 内网渗透: 绕过防火墙访问内部系统。
- 敏感信息泄露: 读取内网应用数据、服务器本地文件、云元数据。
- 内部服务攻击: 攻击内网中暴露的脆弱服务。
- 本地文件读取 (LFI): 通过file://协议读取服务器文件。
- 端口扫描。
- 间接造成RCE: 如果访问的服务存在漏洞(如Redis未授权)。
防御措施
1输入验证与过滤:对用户输入进行严格的校验和过滤,确保输入的 URL 或资源地址符合预期的格式和范围,防止注入攻击
2.设置黑白名单:
只允许访问特定的、已知安全的域名/IP地址列表 禁止访问内网IP段(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8, 169.254.0.0/16)、localhost、敏感域名(如云元数据地址169.254.169.254) 禁用危险协议: 只允许http(s)协议,禁用file://, gopher://, dict://, ftp://等。
3.解析URL: 使用安全的URL解析库,获取host、scheme、port进行验证,避免通过字符串匹配可能被绕过的URL。
4.身份验证: 如果必须访问内部资源,确保请求目标服务需要有效的身份验证(但这通常不适用于用户可控的场景)
5.统一错误信息:避免用户可以根据错误信息来判断远端服务器的端口状态。
六、文件上传漏洞
产生原因
应用程序允许用户上传文件
对上传的文件缺乏有效的验证:
仅检查客户端MIME类型(可伪造)。
仅检查文件扩展名(可绕过,如evil.php.jpg)。
未检查文件内容(Magic Number/文件头)。
未检查文件大小限制。
上传文件的存储位置不安全:文件被保存在web根目录下,且具有执行权限
未对上传的文件进行重命名:使用用户提供文件名,可能导致覆盖或路径穿越
漏洞原理
攻击者上传一个伪装成合法文件的恶意脚本
绕过前端或简单扩展名/MIME检查
上传的文件被存储在web服务器的可访问目录,如web的根目录或其子目录
攻击者直接访问上传的恶意脚本
漏洞危害
- WebShell植入: 完全控制Web服务器。
- 网站挂马: 传播恶意软件。
- 钓鱼: 上传伪装成正常页面的钓鱼页面。
- 拒绝服务: 上传超大文件耗尽磁盘空间。
- 配合其他漏洞: 如配合文件包含漏洞执行恶意代码。
防御措施
1.文件内容检查:检查文件内容的真实类型,与扩展名和MIME类型匹配
2.设置白名单:只允许必需的安全扩展名,禁止脚本扩展名
3.重命名文件:使用随机生成的文件名,和安全的扩展名,避免用户控制
4.安全存储文件 :
将上传的文件存储在web根目录之外的专用目录
通过后端脚本代理访问文件,避免直接执行
如果必须web访问,配置web服务器禁止执行上传目录中的脚本
5.设置文件大小限制
6.扫描恶意内容:对上传的图片,文档等进行病毒,恶意代码扫描
7.禁用危险执行权限:确保上传目录无脚本执行权限
七、文件包含漏洞
产生原因
应用程序使用用户可控的输入动态包含文件(如 配置文件,模版,本地化文件)
包含函数(如PHP的include(), require(), include_once(), require_once())未对用户输入 进行严格的路径限制和过滤
漏洞原理
本地文件包含(LFI):攻击者利用包含机制,通过路径遍历或其他技巧,包含服务器本地的敏感文件(如/etc/passwd, 配置文件, 日志文件, 源代码)
远程文件包含(RFI):包含并执行远程恶意脚本,等同于RCE
配合其他漏洞:如配合文件上传(上传恶意文件后包含执行)或日志注入(向日志写入PHP代码后包含日志文件)实现RCE
漏洞危害
- 远程代码执行 :攻击者可以通过包含恶意文件来在服务器上执行任意代码,从而控制整个服务器系统。
- 敏感信息泄露 :可以获取服务器上的敏感信息,如数据库连接信息、配置文件等。
- 网站被篡改 :篡改网站内容,插入恶意链接、广告或其他有害信息。
- 拒绝服务攻击 :可能引发服务器资源耗尽,导致拒绝服务攻击。
防御措施
1.严格过滤用户输入:
禁止路径遍历字符(…/, …, %00 - 空字节截断需注意PHP版本)
将输入限制为特定的目录,用basename()获取文件名
添加固定前缀和后缀,(如include(‘./templates/’ . $userInput . ‘.php’);)
2.白名单控制:建立允许包含的文件名或路径的白名单,避免引用外部或系统文件
3.禁止危险函数 :在代码中禁用或限制使用可能导致文件包含的危险函数,如 PHP 中的 include、require 等
4.最小化文件权限:确保服务器上的文件权限最小化,避免攻击者通过文件包含漏洞获取或修改敏感文件
八、XXE (XML外部实体漏洞)
产生原因
应用程序解析用户可控的XML输入
xml解析器默认启用了外部实体引用功能,且未进行安全配置
漏洞原理
xml允许在文档类型定义实体,外部实体可以引用外部文件或URL
攻击者在提交的XML数据中定义恶意外部实体,如<!ENTITY xxe SYSTEM "file:///etc/passwd">)
当服务器解析该xml时,会尝试加载并解析这些外部实体
导致攻击者能够读取服务器本地文件 ,发起ssrf请求,在某些情况下导致拒绝服务
漏洞危害
- 敏感信息泄露 :攻击者可读取服务器本地的敏感文件,如配置文件、数据库文件、密码文件等,获取其中的敏感信息,如数据库连接信息、管理员密码等,进而进一步渗透系统。
- 远程代码执行 :在某些情况下,攻击者可以利用 XXE 漏洞,在服务器上执行任意代码,完全控制服务器系统。
- 拒绝服务攻击 :攻击者可以构造恶意的 XML 文档,导致 XML 解析器在解析过程中消耗大量资源,引发服务器资源耗尽,从而无法正常响应服务请求,导致拒绝服务攻击。
- 数据篡改 :攻击者可以篡改 XML 文档中的数据,影响应用程序的正常逻辑和数据处理,导致数据不一致或错误。
防御措施
1.禁用外部实体:在xml解析器中显式禁用外部实体和DTD处理
PHP: 使用libxml_disable_entity_loader(true);禁用外部实体加载
Java: 设置DocumentBuilderFactory的setFeature(“http://apache.org/xml/features/disallow-doctype-decl”, true) 和 setFeature(“http://xml.org/sax/features/external-general-entities”, false) 等。
Python (lxml): parser = etree.XMLParser(resolve_entities=False, no_network=True)
2.使用更安全的数据格式:比如JSON格式
3.输入过滤:对用户提交的 XML 数据进行严格的验证和过滤,确保其不包含恶意的外部实体定义或其他危险内容。在服务端过滤xml数据中的<!DOCTYPE>和<!ENTITY>声明,但是此条容易被绕过
4.限制文件访问权限:在服务器上,合理设置文件的访问权限,避免应用程序有不必要的文件读取权限
5.使用安全的解析库 :优先选择安全、可靠的 XML 解析库,并确保及时更新解析库到最新版本,以获取最新的安全修复和防护功能
6.WAF: 配置WAF规则拦截包含DOCTYPE
或ENTITY
的请求
九、越权访问漏洞
产生原因
应用程序未在服务端对每个请求进行有效的权限验证。
过度依赖前端隐藏或禁用UI元素进行权限控制。
权限验证逻辑存在缺陷(如仅验证角色未验证资源所属)。
使用可预测的标识符(如连续用户ID、订单号)
漏洞原理
水平越权**:**用户A能够访问或操作属于用户B的同级别资源(如查看/修改用户B的订单、个人信息)。
垂直越权: 普通用户能够访问或执行需要更高权限(如管理员)才能访问的功能或资源(如访问管理后台、执行管理操作)。
攻击者通过修改请求参数(如URL中的ID、请求体中的对象ID)、直接访问未受保护的高权限URL、或利用功能逻辑缺陷来绕过权限检查。
漏洞危害
- 数据泄露: 访问他人敏感信息。
- 数据篡改/删除: 修改或删除他人数据。
- 未授权操作: 执行非授权的业务操作(如代他人支付、转账)。
- 权限提升: 获取管理员权限。
- 业务逻辑被破坏。
防御措施
1.服务端强制权限验证: 所有涉及数据访问或业务操作的请求,必须在服务端执行权限检查(基于用户角色、权限组和资源所有权)。
2.最小权限原则: 默认拒绝所有,显式授予必要权限。
3.使用不可预测的标识符: 如UUID、GUID代替连续数字ID。
4.避免在前端进行权限控制: 前端隐藏/禁用只是UI优化,后端必须有验证。
十、反序列化
产生原因
应用程序反序列化用户可控的或来自不可信来源的序列化数据。
被反序列化的类中存在危险方法(如构造函数construct()、析构函数destruct()、魔术方法wakeup(), __toString()),这些方法在反序列化过程中会被自动调用。
类中的方法或属性可能被用来执行任意代码、文件操作、发起网络请求等。
漏洞原理
序列化:将对象状态转换为可存储/传输的格式(字节流、字符串)。
反序列化:将序列化数据还原为内存中的对象。
攻击者构造一个精心设计的恶意序列化数据。
当应用程序反序列化这个数据时,会创建攻击者指定的对象。
在对象创建和还原过程中,其危险方法会被调用,攻击者通过在序列化数据中设置特定的属性值,控制这些方法的行为,最终导致任意代码执行或其他恶意操作。
漏洞危害
- 远程代码执行: 最常见和最严重的危害。
- 权限提升: 执行高权限操作。
- 文件操作: 读取、写入、删除文件。
- 拒绝服务: 通过构造特定对象耗尽资源。
- 绕过安全机制。
防御措施
1.避免反序列化不可信数据: 使用其他数据交换格式,如JSON。
2.签名与验证: 对序列化数据进行数字签名(如HMAC),在反序列化前验证数据完整性和来源。
3.严格类型约束: 在反序列化时,明确指定期望的具体类(白名单),而不是通用的基类。
4.代码审计: 检查自定义类中的魔术方法和其他方法是否包含危险操作。
5.运行时监控: 使用安全工具监控反序列化操作和潜在的危险行为。
6.使用安全库: 使用提供安全反序列化机制的库(如Java的SerialKiller, Jackson的@JsonTypeInfo注解配合多态类型处理)。
7.最小化暴露: 减少类中可被利用的“小工具链”。
读者福利
如果你是准备学习网络安全(黑客)或者正在学习,这里给你准备了腾讯大佬内部分享的资料,你应该能用得上:
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
一、网络安全(黑客)学习路线
网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网络安全教程视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
三、网络安全CTF实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
四、网络安全面试题
最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。
这份完整版的网络安全学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】