作为一名安服/渗透仔(悲),难免会经常跟各种报告打交道,在写报告的时候经常花费大量时间在各种繁琐的漏洞描述、危害、修复建议上,每次遇到同样的漏洞又得再重复一遍,非常影响摸鱼效率;因此出现了这个Wiki,用以记录一些经常遇到的漏洞,以及其漏洞描述、漏洞危害、修复建议等。
地址:https://github.com/Y5neKO/Anfu-Vuln-Wiki
1、内网地址泄露
漏洞描述
由于网站配置原因,导致存在内网地址的文件或报错信息中存在内网地址。
漏洞危害
网站的内部IP地址,常常被攻击者通过信息收集,得到其内网的IP地址,对于渗透攻击,打下良好基础,如内网Ip地址段,IP路由等等。
修复建议
1、删除 js 文件中的内网地址。
2、禁止在回显中返回内网地址。
2、绝对路径泄露
漏洞描述
应用中泄露出应用在主机中的绝对地址路径,攻击者可通过获取网站物理路径,为下一步攻击做准备。
修复建议
1、媒体链接和超链接采用相对路径的表达方式;
2、报错信息中不对外输出网站物理路径等敏感信息。
3、sourceMap 源码泄露
漏洞描述
webpack 是一个 JavaScript 应用程序的静态资源打包器。它构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。大部分 Vue 等项目应用会使用 webpack 进行打包,使用 webpack 打包应用程序会在网站 js 同目录下生成 js.map 文件。将 sourceMap 文件暴露给公共网络时。sourceMap 文件提供了一种将压缩的、混淆的代码映射回原始源代码的方法,这有助于开发者在生产环境中调试问题。
漏洞危害
通过这样的源码,可以非常清晰地了解应用的前端业务,包括接口信息,如果前端包含加解密的逻辑的话,这样也非常有利于攻击者进行破解。
修复建议
1、在 scripts/build 下的 build.js 文件中添加如下配置再重新打包:
process.env.GENERATE_SOURCEMAP = 'false';
2、删除所有.map文件。
4、敏感信息泄露
漏洞描述
由于网站配置原因,存放敏感信息的文件被泄露或由于网站运行出错导致敏感信息泄露
漏洞危害
攻击者可通过泄露的数据获取服务器的相关,能配合其他漏洞发动进一步攻击,例如猜解系统账号、造成数据泄露风险。
修复建议
1、删除该示例页面或对页面进行鉴权。
2、不展示详细报错信息。
5、链接注入
漏洞描述
链接注入是将某个URL嵌入到被攻击的网站上,进而修改站点页面。被嵌入的 URL 包含恶意代码,可能窃取正常用户的用户名、密码,也可能窃取或操纵认证会话,以合法用户的身份执行相关操作。
漏洞危害
获取其他用户Cookie中的敏感数据。
屏蔽页面特定信息。
伪造页面信息。
拒绝服务攻击。
突破外网内网不同安全设置。
修复建议
1、过滤客户端提交的危险字符,客户端提交方式包含GET、POST、COOKIE、User-Agent、Referer、Accept-Language等,客户端提交的变量一般从以上函数获得,严格限制提交的数据长度、类型、字符集。
2、严格控制输出:HtmlEncode:对一段指定的字符串应用HTML编码。UrlEncode:对一段指定的字符串URL编码。XmlEncode:将在XML中使用的输入字符串编码。XmlAttributeEncode:将在XML属性中使用的输入字符串编码。escape:函数可对字符串进行编码。decodeURIComponent:返回统一资源标识符的一个已编码组件的非编码形式。encodeURI:将文本字符串编码为一个有效的统一资源标识符 (URI)。
6、XSS漏洞
漏洞描述
XSS漏洞(Cross-Site Scripting)是一种常见的Web应用程序安全漏洞,它允许攻击者在受害者的浏览器中注入恶意脚本。
漏洞危害
当受害者访问包含恶意脚本的网页时,攻击者就可以利用该漏洞来执行任意的代码,例如窃取用户的敏感信息、修改网页内容或进行其他恶意活动。
修复建议
1、输入验证和过滤:对用户输入的数据进行有效的验证和过滤,以确保不会包含恶意的脚本代码。可以使用正则表达式、编码函数或专门的输入过滤器来实现。
2、输出编码:在将用户输入的数据显示在网页上之前,对其进行适当的输出编码,以防止浏览器将其解析为脚本代码。可以使用HTML实体编码、URL编码或JavaScript编码等方法。
3、设置HTTP头:在网页中设置Content-Security-Policy(CSP)头,限制页面中可以加载和执行的资源,包括脚本文件、样式表和图片等。这可以防止恶意脚本被加载和执行。
4、使用Web应用防火墙(WAF):部署WAF可以对传入的请求进行检测和过滤,以防止XSS攻击。WAF可以根据已知的攻击模式和签名来识别和阻止恶意请求。
5、设置cookie的HttpOnly属性:将cookie的HttpOnly属性设置为true,可以防止通过JavaScript访问和窃取cookie信息,从而减少 XSS 攻击的可能性。
7、swagger-ui 泄露
漏洞描述
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。相关的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。
漏洞危害
Swagger 生成的 API 文档,是直接暴露在相关 web 路径下的。所有人均可以访问查看。通过这一点即可获取项目上所有的接口信息。那么结合实际业务,例如如果有文件读取相关的接口,可能存在任意文件下载,相关的业务访问可能存在未授权访问等。
修复建议
1、在生产节点禁用 Swagger
2、在maven中禁用所有关于Swagger包(不建议)
3、结合SpringSecurity/shiro进行认证授权,将Swagger-UI的URLs加入到各自的认证和授权过滤链中,当用户访问Swagger对应的资源时,只有通过认证授权的用户才能进行访问。
8、目录浏览
漏洞描述
目录浏览漏洞是指Web服务器配置不当,允许用户查看服务器上的文件目录结构,从而可能下载敏感文件。这种漏洞通常由于服务器端配置错误,如未去除中间件(如IIS、Apache、Tomcat)的文件目录索引功能,或者设置不当的目录权限,导致能够获取服务器上的文件列表。
漏洞危害
黑客能够获取服务器上的文件列表,进而攻击敏感文件
修复建议
1、修改配置文件,去除中间件的文件目录索引功能。
2、设置目录权限,确保只有授权的用户才能访问特定目录。
3、在每个目录下创建一个空的index.html页面,以防止目录浏览。
9、未授权访问
漏洞描述
未授权访问漏洞是指在没有得到适当授权的情况下,用户或系统能够访问到敏感数据或执行某些操作的情况。这种漏洞通常是由于安全配置不当、认证页面存在缺陷,或者在启动过程中未配置认证导致的。
漏洞危害
当企业对外服务和端口对公网开放,且对用户的访问没有做任何限制时,可能会泄露业务数据或内部敏感信息,部分数据可能被攻击者进一步利用以执行系统命令、操作系统文件,进而对系统造成破坏或重大数据泄露威胁。
修复建议
1、限制对外开放的端口,仅允许必要的IP地址访问。
2、实施适当的身份验证和授权机制来限制对API的访问。
3、限制对敏感或特权API端点的访问,确保只有具有特定权限的用户或角色才能访问。
任意文件读取
漏洞描述
任意文件读取漏洞是指攻击者可以通过web应用程序读取服务器上的任意文件而不受访问控制限制的漏洞。这种漏洞可能导致敏感信息泄露、系统崩溃等问题。
漏洞危害
攻击者可以利用任意文件读取漏洞访问服务器上的任意文件,包括密码文件、配置文件等,从而获取系统权限和敏感信息。
修复建议
1、严格校验文件路径:确保用户输入的文件路径符合预期,并且不包含恶意内容。例如,在Java应用程序中,可以通过检查文件路径是否包含父目录引用(如"..")或者是否以预期的路径开头来校验路径的合法性。
2、使用open_basedir(针对PHP):在PHP中,可以通过设置open_basedir来限制脚本可以访问的目录,从而防止它们读取不应该被访问的文件。
3、如果确实需要读取用户指定的文件,可以考虑将文件放在特定的目录中,并通过映射或代理的方式提供给用户。这样,即使用户输入了恶意路径,也无法直接访问到敏感文件。
10、接口文档泄露
漏洞描述
接口文档泄露漏洞是指API(Application Programming Interface,应用程序编程接口)的接口文档被未经授权的用户或攻击者获取,从而可能导致敏感信息泄露、安全风险增加等问题。
漏洞危害
通过接口文档,攻击者可以了解并利用API的具体功能和参数,进而实施攻击。
修复建议
1、删除接口文档
2、对接口文档界面添加鉴权,防止直接访问
11、Nginx alias配置不当路径遍历
漏洞描述
在Nginx中,配置alias指令时如果没有正确处理URL的前缀,可能会导致目录遍历漏洞。
漏洞危害
alias的错误配置可能允许攻击者读取存储在目标文件夹之外的文件、根目录下的所有文件都可以访问,还可以下载至本地进行分析利用。
修复建议
1、修改/usr/local/nginx/conf/nginx.conf,location末尾使用/闭合。
12、备份文件泄露
漏洞描述
当备份文件存储在不安全的地点或网络位置,且没有适当的访问控制机制时,任何能够接触到这些文件的人都有可能将其内容泄露或不当使用。
修复建议
1、删除备份文件
2、不将备份文件保存在服务器自身,使用专门的备份位置
13、log4j2远程代码执行
漏洞描述
Log4j2是一个流行的Java日志框架,于2021年12月31日发布安全更新,修复了一个远程代码执行(RCE)漏洞,该漏洞是由于Log4j2中的JNDI功能不当使用而导致的。攻击者可以通过构造恶意的日志信息利用这个漏洞远程执行任意代码。
修复建议
1、立即升级Log4j2到安全版本:更新到Log4j 2.15.0-rc2或更高版本
2、如果无法立即升级,可以暂时禁用JNDI查找功能,通过在Log4j2配置文件中设置log4j2.formatMsgNoLookups=true
14、短信验证码绕过
漏洞描述
短信验证码绕过漏洞主要涉及到通过修改或绕过正常的验证码验证过程,使得用户能够使用错误的或虚构的验证码完成验证,从而获得未经授权的访问权限或执行未经授权的操作。这种漏洞的存在允许攻击者或未经授权的用户绕过正常的验证码验证机制,进而可能对系统造成安全威胁或获取敏感信息。
修复建议
1、禁止通过前端返回结果作为验证码校验凭证。
15、Host头攻击
漏洞描述
Host首部字段是HTTP/1.1新增的,旨在告诉服务器,客户端请求的主机名和端口号,主要用来实现虚拟主机技术。运用虚拟主机技术,单个主机可以运行多个站点。为了方便获取网站域名,开发人员一般依赖于请求包中的Host首部字段。例如,在php里用_SERVER["HTTP_HOST"],但是这个Host字段值是不可信赖的。
漏洞危害
如果应用程序没有对Host字段值进行处理,就有可能造成恶意代码的传入。
修复建议
1、对Host字段进行检测
2、Nginx,修改ngnix.conf文件,在server中指定一个server_name名单,并添加检测。
3、Apache,修改httpd.conf文件,指定ServerName,并开启UseCanonicalName选项。
4、Tomcat,修改server.xml文件,配置Host的name属性。
16、SQL注入
漏洞描述
SQL注入主要形成的原因是在数据交互中,站点针对前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到 SQL 语句中后,被当作 SQL 语句的一部分执行。从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
漏洞危害
攻击者可以在 Web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
修复建议
1、使用参数化查询或存储过程。
2、对输入进行验证,确保输入的数据类型和格式与预期匹配。
3、使用ORM(对象关系映射)工具或安全的数据库抽象层来减少手动拼接SQL的需要。
4、限制数据库账户权限,只提供必要的访问权限。
17、用户名遍历
漏洞描述
通常出现在身份验证和访问控制机制存在缺陷的系统中,允许攻击者通过尝试不同的用户名来枚举系统中的用户账户。
漏洞危害
攻击者可以利用这一漏洞,通过构造特定的请求,尝试访问或利用系统中的用户资源,从而可能导致未经授权的访问或其他安全风险。
修复建议
1、限制尝试次数:系统应设置尝试登录的最大次数,以防止暴力破解。
2、隐藏或模糊处理:对于不存在的用户名,系统应采取措施隐藏或模糊处理,不直接给出用户名是否存在的反馈。
18、任意文件上传
漏洞描述
任意文件上传漏洞的成因主要包括程序员在实现文件上传功能时对用户文件上传部分的控制不足或处理缺陷,导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件。
漏洞危害
攻击者可以利用这种漏洞上传一句话木马,然后通过特定的工具连接过去,获得webshell,进而控制服务器或执行恶意代码,进行数据库操作、服务器文件管理、命令执行等恶意活动。
修复建议
1、对用户上传的文件内容进行安全检查,例如使用杀毒软件扫描文件,或检查文件内容是否包含敏感字符等。这有助于防止恶意代码的潜入和执行。
2、对用户上传的文件类型进行严格限制,只允许上传预定义的安全文件类型。可以通过检查文件扩展名、MIME类型等方式实现。同时,应注意防止攻击者使用伪装的文件类型绕过检查
19、源代码泄露
漏洞描述
很多webserver对大小写是敏感的,但对后缀的大小写映射并没有做正确的处理。只要在URL中将JSP或者JHTML文件后缀从小写变成大写,Web服务器就不能正确处理这个文件后缀,而将其做为纯文本显示,攻击者可能得到这些程序的源代码。
修复建议
1、对所有的可能的大小写后缀增加handler处理
20、明文传输
漏洞描述
明文传输一般存在于web网站登陆页面,用户名密码采取明文传输并未采取加密。
漏洞危害
容易被嗅探软件截取如果加密方式是常见的加密也可以解密的比如MD5,base64等
修复建议
1、如对密码传输过程中进行加密使用加密方式传输,如使用javascript做密码加密然后进行传输。
21、jQuery跨站脚本
漏洞描述
jQuery在Web中广泛应用,当jQuery的版本大于或等于1.2且小于3.5.0的时候,即使执行了消毒(sanitize)处理,也仍会执行将来自不受信任来源的HTML传递给jQuery的DOM操作方法(即html()、.append()等),从而导致xss漏洞。jQuery中过滤用户输入数据所使用的正则表达式存在缺陷,可能导致 location.hash 跨站漏洞。
漏洞危害
当受害者访问包含恶意脚本的网页时,攻击者就可以利用该漏洞来执行任意的代码,例如窃取用户的敏感信息、修改网页内容或进行其他恶意活动。
修复建议
1、升级jQuery版本为最新版。
22、平行越权
漏洞描述
由于系统后端权限校验不严格,导致攻击者可使用一个账号尝试访问与他拥有相同权限的用户的资源。
漏洞危害
攻击者可查看其他账号的信息,造成信息泄露或向其他账号中修改、插入、删除数据的风险。
修复建议
1、后端严格校验每个用户的权限。
23、token未失效
漏洞描述
由于系统配置问题,导致token在超时、退出账号等操作之后未即使失效。
漏洞危害
这种长期有效的token被攻击者获取后可以获得持久的账号控制权限。
修复建议
1、设置适当的会话过期时间:确保会话标识在一定时间后过期。根据应用的需求和风险评估,为会话设置合理的过期时间,并确保在过期后,用户需要重新进行身份验证才能继续访问会话。
2、用户退出后使token失效。
24、SSRF漏洞
漏洞描述
服务端请求伪造(Server Side Request Forgery, SSRF)指的是攻击者在未能取得服务器所有权限时, 利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。
漏洞危害
SSRF可以对外网、服务器所在内网、本地进行端口扫描,攻击运行在内网或本地的应用,或者利用File协议读取本地文件。内网服务防御相对外网服务来说一般会较弱,甚至部分内网服务为了运维方便并没有对内网的访问设置权限验证,所以存在SSRF时,通常会造成较大的危害。
修复建议
1、严格校验用户输入的URL,可以使用白名单过滤来限制输入,只允许特定的协议、主机和端口,列如限制请求的端口为 http 常用的端口,80、443、8080、8090 等。
2、不要把原始的响应数据返回给客户端,且过滤返回信息,在把返回结果展示给用户之前先验证返回的信息是否符合标准。
3、限制Web应用能够访问的URL范围,避免访问内网或其他敏感地址。可以配置网络访问控制列表(ACL),限制Web应用只能访问指定的外部服务。
25、URL跳转
漏洞描述
开放重定向(Open Redirect),也叫URL跳转漏洞,是指服务端未对传入的跳转url变量进行检查和控制,导致诱导用户跳转到恶意网站,由于是从可信的站点跳转出去的,用户会比较信任。
漏洞危害
url重定向主要用来钓鱼,比如url跳转中最常见的跳转在登陆口,支付口,也就是一旦登陆将会跳转任意自己构造的网站,如果设置成自己的url则会造成钓鱼。
修复建议
1、最有效的方法之一就是使用白名单严格控制将要跳转的域名;
2、限制referer、添加token,这样可以避免恶意用户构造跳转链接进行散播。
26、垂直越权
漏洞描述
垂直越权是一种基于URL的访问控制设计缺陷引起的漏洞,又叫做权限提升攻击。垂直越权是不同权限或者不同级别之间的越权,例如普通用户通过某种攻击手段访问到了管理员权限才能访问的功能。
漏洞危害
未授权权限提升:垂直越权允许攻击者将其权限从低级别提升到高级别,可能获取对系统中更敏感和关键资源的未经授权的访问权限。这可以导致攻击者执行危险的操作,如更改配置、访问敏感数据、甚至获取对整个系统的控制权。敏感信息泄露:如果攻击者能够以高级别的权限越权访问敏感信息,可能会导致信息泄露问题。这可能包括用户隐私数据、商业机密或其他敏感信息。
修复建议
1、细化权限控制:将项目中的权限控制细化到接口层面,对每个接口进行权限校验,确保当前登录用户具有操作该接口的权限。
2、使用安全框架:如Spring Security或Shiro,这些框架提供了完善的权限控制机制。
3、用户操作权限校验:在用户进行操作时进行权限校验,防止通过修改参数进入未授权页面或进行非法操作