OWASP Top 10

注入 Injection

原理

通常由应用程序缺少对输入进行安全性检查所引起的。攻击者把一些包含攻击代码当做命令或者查询语句发送给解释器,这些恶意数据可以欺骗解释器,从而执行计划外的命令或者未授权访问数据。

包括SQL注入、LDAP查询、OS命令、程序参数等

预防措施

  • 使用安全的API,避免使用解释器或提供参数化的接口(预编译)
  • 使用白名单来规范化的输入验证方法(如正则)
  • 对输入的特殊字符(如*、(等)进行转义处理
  • 权限最小化,即使被注入也影响不大
  • 加装WAF

失效的身份认证和会话管理

原理

在开发web应用程序时,开发人员往往只关注Web应用程序所需的功能,所以常常会建立自定义的认证和会话方案。但是要正确的实现这些方案却是很难的。结果就在退出、密码管理、超时、密码找回、帐户更新等方面存在漏洞。

预防措施

  • 使用集中标准化的认证方式(建立中央认证体系)

  • 使用SSL

  • 添加会话管理

    会话管理:当用户不操作时,系统必须自动终止超时会话,必须有时间限制;必须提供退出功能,允许用户强制退出会话;会话标识足够随机,防止攻击者猜测到标识;用户登录后必须分配新的会话标识,不使用用户未登录前所使用的标识,防止会话攻击

跨站脚本 XSS

原理

服务器对用户提交的数据过滤不严,恶意用户的输入被服务器返回,并被客户端浏览器当成页面JS代码执行,从而实现对客户端攻击

分类

存储、反射、DOM

  • 存储型出现在信息修改添加等位置,如评论区一类,导致恶意代码存储在数据库中,用户访问就会触发执行
  • 反射型出现在url中,需要攻击者构造恶意链接欺骗用户点击,触发攻击代码
  • DOM型也是出现在URL中,直接输出到了用户浏览器的DOM节点中,其中不需要经过后端渲染

预防措施

  • 对输入数据进行HTML encode处理
  • 对输入的特殊字符(如*、(等)进行转义处理
  • 使用白名单来规范化的输入验证方法
  • 过滤js事件标签
  • 开启http-only
  • 加装WAF

不安全的直接对象引用

允许攻击者绕过网站的身份验证机制,并通过修改指向对象链接中的参数值来直接访问目标对象资源,这类资源可以是属于其他用户的数据库条目以及服务器系统中的隐私文件等等。

例如越权操作、篡改订单等

原理

系统在接受用户输入并利用输入信息获取对象之前没有对用户身份权限进行检测

预防措施

  • 使用基于用户或会话的间接对象访问,这样可防止攻击者直接攻击未授权资源
  • 对任何来自不受信源所使用的所有对象进行访问控制检查
  • 避免在url或网页中直接引用内部文件名或数据库关键字
  • 验证用户输入和url请求
  • 后端加强上下文关联(验证token等)

安全配置错误、安全设定缺陷

原理

不安全的默认配置、不完整的临时配置、开源云存储、错误的HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。

因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。

预防措施

  • 及时了解并部署每个环境的软件更新和补丁信息,包括所有的代码库。(自动化安装部署)
  • 实施漏洞扫描和安全审计
  • 避免向用户显示堆栈跟踪或其他过于丰富的错误消息信息

敏感信息泄露

传输中的数据、项目文件(如.idea、.vscode、.git)之类的,可能导致恶意用户据此构造出原项目,对资产进行黑入。

由于管理员或者技术人员等各种原因导致敏感信息泄露。许多web应用程序和app都无法正确保护敏感数据,攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。

检测方法

1、手工挖掘,查看web容器或网页源码代码,可能存在敏感信息。比如访问url下的目录,直接列出了目录下的文件列表,错误的报错信息包含了网站的信息。
2、工具挖掘,像爬虫之类的工具可以扫描到敏感文件路径,从而找到敏感数据。

防范措施

1、 对系统处理、存储或传输的数据进行分类,根据分类进行访问控制。
2、 对用户敏感信息的传输和存储进行加密
3、 强化安全意识

跨站请求伪造 CSRF

攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等

原理

服务端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的cookie等信息伪造用户请求发送至服务器

防范措施

  • 验证http referer字段
  • 在请求地址中添加token并验证(产生一个随机生成的token)
  • 在HTTP头中自定义一个属性拿来放token并验证

使用含有已知漏洞的组件

开发人员使用的组件也会含有漏洞,这些漏洞能够被自动化工具发现和利用。然后攻击者根据需要定制攻击代码并实施攻击。

防范措施

  • 识别所有正在使用的组建的版本及其依赖
  • 更新组件或其依赖至最新版
  • 建立使用组件的安全策略,禁止使用未经安全评估的组件
  • 在适当情况下,对组件进行安全封装,精简不必要的功能,封装易受攻击部分
  • 使用自动化工具对组件进行扫描

未验证的重定向和转发

重定向:
重定向是服务端根据逻辑,发送一个状态码(通常为3xx),告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。(重定向是在客户端完成的)
转发:
转发是在服务器内部将请求转发给另一个资源,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程是在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址。(转发是在服务器端完成的)

两者的区别:
1、重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址。
2、重定向有两次请求,不共享数据,转发是有一次请求且共享数据。
3、重定向后地址栏会发生变化,转发不会。
4、重定向的地址可以是任意地址,转发的地址只能是当前应用类的某一个地址。

预防措施

1、重定向外部网站需要验证是否在白名单。
2、转发内部网站要验证是否有权限,有权限才转发。

中间件

  • iis:put漏洞、短文件名猜解、远程代码执行、解析漏洞
  • apache:解析漏洞、目录遍历
  • nginx:文件解析、目录遍历、crlf注入、目录穿越
  • tomcat:远程代码执行、war后门文件部署
  • jboss:反序列化、war后门文件部署
  • weblogic:反序列化、ssrf、任意文件上传、war后门文件部署

国誉一面(电话面)

  • 用过什么安全设备

  • 给你一个登录框,可能有什么漏洞

    • sql注入、xss、csrf、会话劫持
  • sql注入的类型

    • 字符、布尔、报错、时间盲注、联合、堆叠、宽字节、XFF
  • 错误注入使用的方法有哪些

    • extractValue、updateXml、floor
  • 宽字节注入的编码格式是什么

    • GBK
  • 时间盲注不能使用工具或者脚本,怎么样注入较快

    • 尝试外带查询
    • 优化查询策略采用二分查找法
    • 简化数据集
  • sqlmap的level和risk有什么区别,level各个等级代表什么意思

    • –level和–risk是数字愈大级别越高,–level有1-5,–risk有1-3
    • level侧重点在于注入点。risk侧重点在于注入的方法和攻击者愿意承担的风险。
    • level默认等级会测试get和post请求中的参数。level2会测cookie。level3会测ua和refferer。level4-5会测各种payload和边界条件。
    • risk默认等级安全第一,风险低,只测默认的几种注入方法。risk2会尝试更多类型的注入,如时间盲注等。risk3会尝试更多方式的注入,有可能会更新数据库中的数据,使用时需要谨慎。
  • 验证码有什么缺陷

    img
  • 一个企业需要做暴露面处理,需要注意哪些地方

    • 资产全面梳理
    • 网络分段和隔离
    • 开放端口号等
    • 供应链风险管理
  • 什么是条件竞争型的文件上传,是怎么样导致的

    • 在某些文件上传情境中,后端代码会先保存我们所上传的文件,然后再检查我们上传的文件是否含有风险,如果有的话会被删除,这是我们就需要和删除函数(如unlink()函数)来进行时间与线程上的竞争,争取在删除文件之前访问到该文件,达到攻击效果。
    • 文件处理和文件保存之间存在时间差,且系统没有锁定文件的使用
  • csrf原理,验证token的目的

    • 原理:服务端没有对用户提交的数据进行随机值(token)校验,且队http请求包内的refer字段校验不严,导致攻击者可以利用用户的cookie信息伪造用户请求发送至服务器
    • 验证token是为了校验请求的合法性
  • 事件查看器中出现了大量id为4525的事件

    • 4625为登陆失败的用户,表示可以在被爆破

    • 附常见的安全事件id:

      1074,通过这个事件ID查看计算机的开机、关机、重启的时间以及原因和注释。
      6005,表示计算机日志服务已启动,如果出现了事件ID为6005,则表示这天正常启动了系统。
      104,这个时间ID记录所有审计日志清除事件,当有日志被清除时,出现此事件ID。
      安全:
      4624,这个事件ID表示成功登陆的用户,用来筛选该系统的用户登陆成功情况。
      4625,这个事件ID表示登陆失败的用户。
      4720,4722,4723,4724,4725,4726,4738,4740,事件ID表示当用户帐号发生创建,删除,改变密码时的事件记录。
      4727,4737,4739,4762,事件ID表示当用户组发生添加、删除时或组内添加成员时生成该事件。

  • 现在有一个服务器需要将ssh开放到公网上,如何进行加固

    • 修改配置禁止ssh直接登录root用户,改用公私钥形式
    • 修改默认ssh的22端口
    • 修改密码策略配置文件,加强密码设置规则,防止弱口令
    • 错误登录3次,锁定此账户5分钟
    • 禁止su非法提权,只允许root和wheel组用户su到root
  • mysql提权 MySQL提权的三种方法 - FreeBuf网络安全行业门户

    • 必要条件:mysql具有root权限、具有执行sql语句的权限
    • udf提权和mof提权
      • UDF(User Defined Funtion)用户自定义函数
      • MOF提权:利用了C:\Windows\System32\wbem\MOF目录下的nullevt.mof文件
  • weblogic有什么漏洞

    • 反序列化、ssrf、任意文件上传、war后门文件部署
  • shiro反序列化有几种

    • 两种,shiro550、721
    • 原理:apache shiro框架提供了记住我的功能
  • cs应急(失陷主机通用)

    • 收集信息,收集客户信息和主机中cs shell后的信息
    • 抑制范围,隔离机器使受害面不扩大
    • 深入分析,日志,进程,启动项,样本分析
    • 清除处置,杀进程,删文件,打补丁,删除异常程序服务,清除后门账号
    • 静置观察,看看有无外联现象
    • 恢复生产、写报告