一、SQL注入漏洞
1.漏洞描述
SQL 注入攻击是指攻击者通过向 Web 应用程序的输入框中插入恶意 SQL 语句来执行未经授权的操作。导致参数中的特殊字符破坏了SQL语句原有逻辑,攻击者可以利用该漏洞执行任意SQL语句,如查询数据、下载数据、写入webshell、执行系统命令以及绕过登录限制等。
2.漏洞危害
1、数据泄露:攻击者可以利用SQL注入漏洞获取数据库中的敏感信息,如用户账号、密码、个人信息等,从而导致用户隐私泄露。
2、数据篡改:攻击者可以通过注入恶意的SQL语句来修改数据库中的数据,包括增加、删除、修改等操作,从而破坏数据的完整性和准确性。
3、服务器攻击:攻击者可以通过注入恶意的SQL语句来执行任意的操作,包括执行系统命令、获取服务器权限等,从而对服务器进行攻击或控制。
拒绝服务:攻击者可以通过注入大量的恶意SQL查询来消耗服务器资源,导致服务器性能下降,甚至崩溃,从而导致服务不可用。
4、信任问题:当应用程序存在SQL注入漏洞时,用户对该应用程序的信任将受到影响,可能导致用户流失和声誉损失。
3.漏洞修复建议
(1)使用预编译语句,使用PDO需要注意不要将变量直接拼接到PDO语句中。所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
(2)对进入数据库的特殊字符(’”<>&*;等)进行转义处理,或编码转换。
(3)确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。
(4)数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。
(5)网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
(6)严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
(7)避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
(8)过滤危险字符,例如:采用正则表达式匹配union、sleep、and、select、load_file等关键字,如果匹配到则终止运行。
二、XSS(跨站脚本攻击)
1.漏洞描述
跨站点脚本攻击是指攻击者通过向 Web 应用程序的输入框中插入恶意脚本来窃取用户数据或执行未经授权的操作。攻击者可以利用该漏洞执行恶意HTML/JS代码、构造蠕虫、篡改页面实施钓鱼攻击、以及诱导用户再次登录,然后获取其登录凭证等。
2.漏洞危害
1、钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者通过注入钓鱼JavaScript脚本以监控目标网站的表单输入,甚至攻击者基于DHTML技术发起更高级的钓鱼攻击。
2、网站挂马:跨站时,攻击者利用Iframe标签嵌入隐藏的恶意网站,将被攻击者定向到恶意网站上、或弹出恶意网站窗口等方式,进行挂马。
3、身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS攻击可以盗取用户的cookie,从而利用该cookie盗取用户对该网站的操作权限。
4、盗取网站用户信息:当窃取到用户cookie从而获取到用户身份时,攻击者可以盗取到用户对网站的操作权限,从而查看用户隐私信息。
5、垃圾信息发送:在社交网站社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
6、劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,从而监视用户的浏览历史、发送与接收的数据等等。
7、XSS蠕虫:借助XSS蠕虫病毒还可以用来打广告、刷流量、挂马、恶作剧、破坏数据、实施DDoS攻击等。
3.漏洞修复建议
xss漏洞本质上是一种html注入,也就是将html代码注入到网页中。那么其防御的根本就是在将用户提交的代码显示到页面上时做好一系列的过滤与转义
(1)过滤输入的数据,对例如:“ ‘ ”,“ “ ”,” < “,” > “,” on* “,script、iframe等危险字符进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
(2)不仅验证数据的类型,还要验证其格式、长度、范围和内容。
(3)不仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
(4)对输出到页面的数据进行相应的编码转换,如HTML实体编码、JS编码等。对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行检查。
三、CSRF(跨站请求伪造)
1.漏洞描述
CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。通常由于服务端没有对请求头做严格过滤引起的。CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。绝大多数网站是通过 cookie 等方式辨识用户身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。CSRF攻击会令用户在不知情的情况下攻击自己已经登录的系统。
2.漏洞危害
-
未经授权的操作:攻击者可以通过伪造请求来执行用户未经授权的操作,如修改用户密码、发表恶意言论、转账等,从而导致用户的账号被盗、个人信息泄露等问题。
-
数据篡改:攻击者可以通过伪造请求修改用户的数据,如修改个人资料、订单信息等,从而破坏数据的完整性和准确性。
-
用户隐私泄露:攻击者可以通过伪造请求获取用户的敏感信息,如登录凭证、个人资料等,从而导致用户隐私泄露。
-
信任问题:当应用程序存在CSRF漏洞时,用户对该应用程序的信任将受到影响,可能导致用户流失和声誉损失。
-
恶意操作:攻击者可以通过伪造请求执行恶意操作,如发送垃圾邮件、发起网络攻击等,从而对用户和系统造成损害。
3.漏洞修复建议
-
使用CSRF令牌:为每个用户生成一个唯一的CSRF令牌,并将其嵌入到表单或请求中。在服务器端验证请求中的CSRF令牌,确保请求来源于合法的页面。
-
验证请求来源:在服务器端验证请求的来源,可以通过检查Referer头部或自定义头部来判断请求是否来自合法的页面。
-
添加验证码:在敏感操作(如修改密码、转账等)前,要求用户输入验证码进行验证,以防止恶意请求的执行。
-
限制敏感操作:对于一些敏感操作,可以要求用户进行二次确认或者增加额外的安全措施,如短信验证码、邮箱确认等。
-
同源策略:使用同源策略来限制页面对其他域的请求,防止跨域请求的执行。
-
设置Cookie属性:将Cookie的SameSite属性设置为Strict或Lax,以限制跨站请求。
-
定期更换会话ID:定期更换会话ID,降低攻击者利用CSRF漏洞进行攻击的可能性。
四、SSRF(服务器端请求伪造)
1.漏洞描述
SSRF(Server-Side Request Forgery,服务器端请求伪造):通俗的来说就是我们可以伪造服务器端发起的请求,从而获取客户端所不能得到的数据。SSRF漏洞形成的原因主要是服务器端所提供的接口中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进行过滤。
2.漏洞危害
(1)、可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
(2)、攻击运行在内网或本地的应用程序(比如溢出);
(3)、对内网Web应用进行指纹识别,通过访问默认文件实现;
(4)、攻击内外网的Web应用,主要是使用Get参数就可以实现的攻击(比如Struts2漏洞利用,SQL注入等);
(5)、利用File协议读取本地文件。
3.漏洞修复建议
1、禁用不需要的协议,只允许HTTP和HTTPS请求,可以防止类似于file://, gopher://, ftp:// 等引起的问题。
2、白名单的方式限制访问的目标地址,禁止对内网发起请求
3、过滤或屏蔽请求返回的详细信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
4、验证请求的文件格式
5、禁止跳转
6、限制请求的端口为http常用的端口,比如 80、443、8080、8000等
7、统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
五、XXE(xml 外部实体注入漏洞)
1.漏洞描述
XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。
XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
2.漏洞危害
-
敏感信息泄露:攻击者可以利用XXE漏洞读取服务器上的敏感文件,如配置文件、密码文件、数据库文件等,从而导致敏感信息泄露。
-
远程文件读取:攻击者可以利用XXE漏洞读取远程系统上的文件,如访问其他服务器上的文件、读取云存储上的文件等。
-
服务器资源耗尽:攻击者可以通过XXE漏洞发起大量的外部实体引用请求,导致服务器资源耗尽,如CPU占用率过高、内存溢出等。
-
远程命令执行:在某些情况下,攻击者可以通过XXE漏洞执行远程命令,从而完全控制服务器。
3.XXE的特征
特征1 --- .ashx
看到url是 .ashx后缀的
特征2 --- 响应体是xml
4.漏洞修复建议
-
禁用外部实体解析:在XML解析器的配置中禁用外部实体解析,例如在Java中可以通过设置"FEATURE_SECURE_PROCESSING"属性为true来禁用外部实体解析。
-
使用白名单过滤:限制XML中可解析的实体和DTD定义,只允许解析合法的实体和DTD。可以通过使用白名单过滤来实现,例如使用XML外部实体白名单或DTD白名单。
-
输入验证和过滤:对于接收XML输入的应用程序,进行输入验证和过滤是必要的。确保只接受预期的合法输入,过滤掉潜在的恶意内容。
-
使用安全的XML解析器:选择使用安全性较高的XML解析器,如Xerces、SAX等。这些解析器通常会实现一些防护措施来减少XXE漏洞的风险。
-
更新和升级相关组件和库:及时更新和升级XML解析器和相关组件,以获取最新的安全补丁和修复。
-
配置安全策略:在服务器或应用程序的配置中,设置合适的安全策略,限制XML解析器的功能和权限。
六、RCE(命令执行漏洞)
1.漏洞描述
命令或代码执行漏洞是指代码未对用户可控参数做过滤,导致直接带入执行命令和代码,通过漏洞执行恶意构造的语句,执行任意命令或代码。攻击者可在服务器上执行任意命令,读写文件操作等,危害巨大。
2.漏洞危害
-
完全控制服务器:攻击者可以通过RCE漏洞执行任意系统命令,从而完全控制受影响的服务器。这意味着攻击者可以执行任意操作,包括修改、删除、读取敏感文件,操纵数据库,上传恶意文件等。
-
敏感信息泄露:攻击者可以利用RCE漏洞读取服务器上的敏感文件,如配置文件、密码文件、数据库文件等,从而导致敏感信息泄露。
-
网站篡改和破坏:攻击者可以通过RCE漏洞修改网站的内容、注入恶意代码,从而篡改网站,破坏网站的正常运行。
-
远程攻击其他系统:攻击者可以利用RCE漏洞作为跳板,进一步攻击其他系统。例如,攻击者可以在受影响的服务器上安装恶意软件或后门,用于进一步渗透网络。
-
数据泄露和损失:攻击者可以通过RCE漏洞访问、修改或删除数据库中的数据,导致数据泄露或数据损失。
-
服务器资源滥用:攻击者可以利用RCE漏洞滥用服务器资源,如执行大量计算任务、发送垃圾邮件、发起DDoS攻击等,导致服务器负载过高,影响正常的服务提供。
3.漏洞修复建议
-
输入验证和过滤:对于所有用户输入的数据,进行严格的输入验证和过滤,确保只接受预期的合法输入。例如,对于文件上传功能,应该验证文件类型和大小,并确保只允许上传到安全的目录。
-
参数化查询:对于数据库查询,使用参数化查询或预编译语句,而不是拼接字符串的方式。这可以防止SQL注入攻击,从而减少RCE漏洞的风险。
-
最小权限原则:确保应用程序在运行时拥有最小的权限。例如,不要使用具有管理员权限的用户来运行应用程序,而是使用具有最少权限的用户。
-
安全编程实践:遵循安全编程实践,如输出编码、使用安全的函数和API、避免使用eval()等危险函数,以减少RCE漏洞的存在。
-
更新和升级相关组件和库:及时更新和升级应用程序使用的所有组件和库,以获取最新的安全补丁和修复。
-
配置安全策略:在服务器或应用程序的配置中,设置合适的安全策略,限制应用程序的功能和权限。例如,禁用危险的函数和特性,限制文件系统和网络访问等。
七、文件上传漏洞
1.漏洞描述
文件上传漏洞通常由于代码中对文件上传功能所上传的文件过滤不严或web服务器相关解析漏洞未修复而造成的,如果文件上传功能代码没有严格限制和验证用户上传的文件后缀、类型等,攻击者可通过文件上传点上传任意文件,包括网站后门文件(webshell)控制整个网站。
2.漏洞危害
-
代码执行:攻击者可以通过上传恶意文件,并利用文件上传漏洞来执行恶意代码,从而完全控制受影响的服务器。攻击者可以执行任意命令、操作文件系统、访问敏感数据等。
-
网站篡改和破坏:攻击者可以上传恶意文件,包括恶意脚本、恶意网页等,从而篡改网站内容,破坏网站的正常运行,甚至导致网站完全瘫痪。
-
数据泄露和损失:攻击者可以上传恶意文件,通过读取、修改或删除服务器上的敏感数据,导致数据泄露或数据损失。
-
远程攻击其他系统:攻击者可以利用上传的恶意文件作为跳板,进一步攻击其他系统。例如,攻击者可以在受影响的服务器上安装后门,用于进一步渗透网络。
-
服务器资源滥用:攻击者可以上传大量的恶意文件,导致服务器资源被滥用,如占用大量磁盘空间、消耗带宽、执行计算任务等,从而影响服务器的正常运行。
3.漏洞修复建议
-
检查文件类型和大小限制:对上传的文件进行类型检查,只允许特定类型的文件上传,如图片、文档等。同时,设置文件大小限制,避免上传过大的文件。
-
检查文件名:对上传的文件名进行检查,避免文件名中包含特殊字符,如../等,防止利用文件名进行目录遍历攻击。同时,对文件名进行加密处理,避免文件名泄露导致信息泄露。
-
存储文件路径的安全性:上传的文件应该存储在服务器端的安全目录下,禁止上传到Web根目录或其他公共目录下。同时,禁止直接链接到上传的文件,避免直接访问上传的文件。
-
文件上传处理程序的安全性:开发人员应该编写安全的文件上传处理程序,避免利用文件上传漏洞进行攻击。同时,对上传的文件进行病毒扫描,防止上传病毒文件。
-
对上传文件进行重命名:为了防止上传文件与现有文件重名,应该对上传的文件进行重命名处理。
-
隐藏上传文件路径:为了避免上传文件路径暴露,应该将上传文件保存在服务器端的非Web根目录下,并禁止直接访问上传的文件。
八、文件包含漏洞
1.漏洞描述
本地文件包含是指程序在处理包含文件的时候没有严格控制。利用这个漏洞,攻击者可以先把上传的文件、网站日志文件等作为代码执行或直接显示出来,或者包含远程服务器上的恶意文件,进而获取到服务器权限。
2.漏洞危害
-
执行任意代码:攻击者可以通过包含恶意文件来执行任意代码,包括系统命令、远程代码执行等。这可能导致服务器被完全控制,进而导致数据泄露、服务器崩溃等严重后果。
-
敏感信息泄露:攻击者可以利用文件包含漏洞来读取服务器上的敏感文件,如配置文件、数据库凭据等。这些信息可以被用于进一步攻击服务器或者滥用用户数据。
-
访问控制绕过:攻击者可以利用文件包含漏洞绕过应用程序的访问控制机制,访问未经授权的文件或页面。这可能导致未经授权的数据访问、越权操作等安全问题。
-
服务器资源滥用:攻击者可以通过包含大量文件来占用服务器资源,导致服务器负载过高,甚至崩溃。这可能导致服务不可用,影响用户体验。
-
恶意文件上传:攻击者可以通过文件包含漏洞来上传恶意文件到服务器,然后执行该文件。这可能导致恶意软件传播、远程控制等风险。
3.漏洞修复建议
1、严格检查变量是否已经初始化。
2、对所有输入提交可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现./和../等目录跳转符。
3、严格检查文件包含函数中的参数是否外界可控。
九、PHP反序列化漏洞
1.漏洞描述
php反序列化漏洞也叫PHP对象注入,形成原因为程序未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行、文件操作、执行数据库操作等不可控后果。这一类攻击在java、python等面向对象语言中均存在。
2.漏洞危害
-
执行任意代码:攻击者可以通过构造恶意的反序列化数据来执行任意代码,包括系统命令、远程代码执行等。这可能导致服务器被完全控制,进而导致数据泄露、服务器崩溃等严重后果。
-
敏感信息泄露:攻击者可以利用反序列化漏洞来读取服务器上的敏感文件,如配置文件、数据库凭据等。这些信息可以被用于进一步攻击服务器或者滥用用户数据。
-
访问控制绕过:攻击者可以利用反序列化漏洞绕过应用程序的访问控制机制,访问未经授权的文件或页面。这可能导致未经授权的数据访问、越权操作等安全问题。
-
服务器资源滥用:攻击者可以通过反序列化漏洞来占用服务器资源,导致服务器负载过高,甚至崩溃。这可能导致服务不可用,影响用户体验。
3.漏洞修复建议
1、对传入的对象进行严格的过滤检查
2、在反序列化过程执行的文件读写、命令或代码执行函数中是否有用户可控的参数。