[网络安全]网鼎杯第五次培训——web网络安全

网鼎杯第五次培训——web网络安全

  • 初识WEB
  • Web构成
    • Web请求流程
    • 操作系统分类
    • Web中间件
    • Web编程语言
      • PHP
    • 数据库
      • 数据库分类
      • MySQL数据库
    • Web系统与数据库的关系
      • HTTP协议
        • HTTP特点:
        • HTTP协议之请求方法
        • 常用请求头
    • WEB服务器
      • WEB容器
      • 常见的web服务器
      • 不同web服务器在解析代码时的差异(apache&nginx)
    • web网站
  • web漏洞
    • OWASP介绍
    • OWASP Top 10
    • A1:2017-Injection(注入漏洞)
    • A2:2017-BrokenAuthentication(失效的身份认证和会话管理)
    • A3:2017-Sensitive DataExposure(敏感数据泄露)
    • A4:2017-XMLExternalEntities(XXE)XL外部处理器漏洞
    • A5:2017-Broken AccessControl(中断访问控制)
    • A6:2017-Securitylisconfiguration(安全配置错误)
    • A7:2017-Cross-SiteScripting(XSS)跨站脚本攻击
    • A8:2017-InsecureDeserialization(不安全的反序列化)
    • A9:2017-UsingComponents with Known Vulnerabilities(使用含有已知漏洞的组件)
    • A10:2017-InsufficientLogging&Monitoring(不足的记录和监控漏洞)
  • 常用工具
    • Nmap:
    • Metasploit
    • Burp Suite
    • SQLMap
    • Kali Linux
  • 文件上传漏洞
    • 漏洞原理:
    • 高危触发点:
    • Shell
    • WebShell
    • 检测与绕过
    • 前端JavaScript检测
      • 绕过前端JavaScript检测:
      • 服务器端上传检测:
        • 常规检测方法
        • 服务器上传检测与绕过
          • 后缀名检测
          • 后缀名黑名单绕过
          • 白名单
          • 文件头检测
          • 双文件检测
          • 00截断
          • 文件内容检测
          • win文件流(NTFS)特性
          • 其他绕过方式
        • 靶场演示
        • 防御
  • 文件解析漏洞
    • 原理:
    • 容器特性:
    • 操作系统特性:
  • 文件包含漏洞
    • 原理:
    • 文件包含漏洞的形成,需要满足两个条件
    • 注意
    • 常见文件包含函数
    • 分类
      • 简单区别
      • 参数开关设置
    • 本地文件包含(LFI)
      • 能够读取或执行包含本地文件的漏洞,称为本地文件包含漏洞(本地是指服务器本身)
        • 漏洞危害
      • 包含第三方服务器中的文件
        • 条件:开启fopen和include
      • 读取敏感信息
      • 远程包含GetShell
      • 本地包含配合文件上传
      • 其他方式
      • 靶场实战

初识WEB

  • Web是World Wide Web(万维网)的简称。不是缩写,万维网是基于HTTP协议进行交互的应用网络,互联网(Internet)是指连接计算机的网络(通过TCP/IP协议)。同理移动互联网是连接移动设备的网络。
  • 所以Web是运行于互联网之上的系统,互联网上还有很多其他的应用,比如FTP/邮件系统等。这些不算在Web里。进一步说,互联网是针对的计算机(点到点),Web是针对的计算机上的应用(端到端)。
  • 以前,web可以说就是通过使用浏览器访问的各种资源,有了移动互联网之后,就扩展了,很多手机app也是通过http进行交互的,也是web的一部分。
  • 我们经常讲的Wb安全中的Web,大部分指的是网站,一般可以使用市面上各种的浏览器进行访问。但Web安全也不局限于我们访间的各种网站,因为其目前还是在互联网还是占很大比重的,所以Web安全中的Web可以理解为互联网上各种应用系统服务的一种统称。

Web构成

Web请求流程

[网络安全]网鼎杯第五次培训——web网络安全_第1张图片

操作系统分类

[网络安全]网鼎杯第五次培训——web网络安全_第2张图片

Web中间件

  • 中间件是一类连接软件组件和应用的计算机软件,它包含一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演讲,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括Web服务器、事务监控器和消息队列软件。
  • 中间件(Middleware)是基础软件的一大类,属于可复用软件的范畴,顾名思义,中间件处于操作系统软件与用户的应用软件的中间。
    [网络安全]网鼎杯第五次培训——web网络安全_第3张图片

Web编程语言

Web编程语言,根据解释执行的位置可以分为前端语言和后端语言。Web前端语言是指在浏览器上解释执行的Web编程语言,包括TL,JS等。Web后端语言是指在Web服务器上解释执行的Web编程语言,包括JSP、PHP、ASP、ASP.NET、Python、Golang等。
[网络安全]网鼎杯第五次培训——web网络安全_第4张图片

PHP

[网络安全]网鼎杯第五次培训——web网络安全_第5张图片

数据库

  • 数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。
  • 简单来说是本身可视为电子化的文件柜-存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。

数据库分类

[网络安全]网鼎杯第五次培训——web网络安全_第6张图片

MySQL数据库

  • MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。
  • 关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库中,这样就增加了速度并提高了灵活性。
    MWS0L数据库特点:
  • 开源
  • 支持大型的数据库
  • 使用标准的SQL数据语言形式
  • 开源运行于多个系统上,并且支持多种语言
  • 对PHP有很好的支持
  • 可以定制

Web系统与数据库的关系

[网络安全]网鼎杯第五次培训——web网络安全_第7张图片

HTTP协议

  • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(面:Torld Wide Web)服务器传输超文本到本地浏览器的传输协议。
  • HTTP是一个基于TCP/IP通信协议来传递数据(HTL文件,图片文件,查询结果等)。
  • HTTP是一个属于应用层的面向对象的协议,由于其便捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。

HTTP特点:

  • 简单快速
  • 灵活
  • 无状态
  • 支持B/S及C/S模式

HTTP协议之请求方法

[网络安全]网鼎杯第五次培训——web网络安全_第8张图片

常用请求头

  • Host:服务器名。一般为域名或者ip。
  • User-Agent:用户代理,此信息内一般带有客户端的操作系统,浏览器、渲染引擎、语言等等。
  • Accept-Encoding:要求服务器响应以自身可以接受的方式编码。
  • Content-Type:请求数据内容的媒体类型(MIME-Type)
  • Referer:告知服务器当前请求是从哪个页面跳转而来
  • Client-IP:客户端IP
  • XForwarded_for:客户端真实IP(链),一般在通过http代理或者负载均衡时,会添加此项。
  • Content-Length:请求数据长度
  • Cookie:网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。

WEB服务器

Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个T页面。为了处理一个请求,Teb服务器可以响应一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端技术。无论它们(脚本)的目的如何,这些服务器端的程序通常产生一个TML的响应来让浏览器可以浏览。

WEB容器

  • 如果一定要将web server与web容器区分开,那么web服务器仅仅是解析HTTP请求、索引资源、封包返回响应的应用程序,web容器将在web server的基础上,提供与后端api通信的接口,容器将web server解包获得的参数和数据信息交付给后端语言的api接口,然后运行web语言,按照代码逻辑处理数据后,再将数据返回给web server,由其完成HTTP协议通信。
  • 一般来说,现代常见的web服务器都提供了与web语言相结合的接口,所以在实际使用上,对两者的区分度较低。

常见的web服务器

  • apache2
  • nginx:高性能的HTTP和反向代理服务器
  • tomcat:Java Web服务器、Servlet容器
  • Iis:微软
  • lighttpd
    ·Tengine:Tengine是由淘宝网发起的eb服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性
  • Jetty:servlet容器

不同web服务器在解析代码时的差异(apache&nginx)

  • apache是通过mod_php来解析php,PHP在apache中是以1ib-php.so这样一个动态链接库的形式存在的,这个so库其实是一个PP解释器,所以每次处理请求时,PIP都会被嵌入到apache进程中,如果apache认为当前请求的资源应该交给PIP解析,则会调用so库中的函数来执行代码,这种模式最大的弊端时内存占用大
  • nginx是通过php-fpa(fast-cgi)来解析php,cgi、fastcgi通常指Web服务器与解释器通信的协议规范,而php-fom是fastcgi协议的一个实现。php-fpm以独立的进程的形式运行,当nginx认为当前请求应解析php时就通过fast-cgi协议与php-fpm进程(9000端口)进行通信,代码执行结果再通过fast-cgi协议传回nginx.

web网站

[网络安全]网鼎杯第五次培训——web网络安全_第9张图片

web漏洞

OWASP介绍

  • 开放式web应用程序安全项目(OWASP.Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。
  • 开放式web应用程序安全项目(OWASP)是一个非营利组织,不附属于任何企业或财团。因此,由0TASP提供和开发的所有设施和文件都不受商业因素的影响。OWASP支持商业安全技术的合理使用。

OWASP Top 10

  • 0WASP项目最具权成的就是其“十大安全漏洞列表”(OWASPTop10),OWASP Top10不是官方文档或标准,而只是一个被广泛采用的意识文档,被用来分类网络安全漏洞的严重程度,目前被许多漏洞奖励平台和企业安全团队评估错误报告。这个列表总结了Web应用程序最可能、最常见、最危险的十大漏洞。可以帮助IT公司和开发团队规范应用程序开发流程和测试流程,提高Teb产品的安全性。[网络安全]网鼎杯第五次培训——web网络安全_第10张图片

A1:2017-Injection(注入漏洞)

  • 当不可信的数据作为命令或查询语句的一部分被发送给解释器的时候,会发生注入漏洞,包括SL、NoSQL、OS以及LDAP注入等。攻击者发送的恶意数据可能会诱使解释器执行计划外的命令,或在没有适当授权的情况下访问数据。
  • 检测应用程序是否存在注入漏洞的最好的办法就是确认所有解释器的使用都明确地将不可信数据从命令语句或查询语句中区分出来。在许多情况下,建议避免解释器或禁用它(例如XXE)。对于SQL调用,这就意味着在所有准备语句(prepared statements)和存储过程(stored procedures)中使用绑定变量(bind variables),并避免使用动态查询语句。

A2:2017-BrokenAuthentication(失效的身份认证和会话管理)

与认证和会话管理相关的应用函数经常被错误地实现,从而允许攻击者破坏密码、密钥或是会话令牌,或者利用其他的应用漏洞来暂时或永久地获取用户身份信息。
以下情况可能产生漏洞:

  • 1.用户身份验证凭证没有使用哈希或加密保护。详见A3
  • 2.认证凭证可猜测,或者能够通过薄弱的的帐户管理功能重写。
  • 3.会话ID暴露在URL里(例如,URL重写)。
  • 4.会话ID容易受到会话固定(session fixation)的攻击
  • 5.会话ID没有超时限制,用户会话或身份验证令牌特别是单点登录令牌在用户注销时没有失效。
  • 6.密码、会话ID和其他认证凭据使用未加密连接传输。详见A3。

A3:2017-Sensitive DataExposure(敏感数据泄露)

许多web应用程序和APl不能正确的保护敏感数据,如金融、医疗保健和PII(个人身份信息)等。
攻击者可能会窃取或算改这些弱保护的数据,从而进行信用卡欺诈、身份盗窃或其他犯罪行为。在缺少额外保护(例如,在存放和传输过程中加密,且在与浏览器进行交换时需要特别谨慎)的情况下,敏感数据可能会受到损害。

A4:2017-XMLExternalEntities(XXE)XL外部处理器漏洞

许多过时的或配置不当的XL处理器在L文档内进行外部实体引用。外部实体可用于泄露内部文件,通过使用文件URI处理器、内部文件共享、内部端口扫描、远程代码执行以及拒绝服务攻击等手段。

A5:2017-Broken AccessControl(中断访问控制)

限制“认证的用户可以实现哪些操作”的命令没有得到正确的执行。攻击者可以利用这些漏洞访问未经授权的功能和数据,例如访问其他用户的账户,查看敏感文件,靠改其他用户的数据,更改访问权限等。

A6:2017-Securitylisconfiguration(安全配置错误)

安全配置错误是最常见的问题。这通常是由不安全的默认配置,不完整配置,开放云存储,错误配置的HTTP标头,以及包含敏感信息的详细错误信息造成的。所有的操作系统、框架、库、应用程序都需要进行安全配置外,还必须要及时进行系统更新和升级。

A7:2017-Cross-SiteScripting(XSS)跨站脚本攻击

如果应用程序在未经适当验证或转义的情况下,能够在新网页中包含不受信任的数据,或是使用可以创建HTML或者JavaScript的浏览器API更新包含用户提供的数据的现有网页,就会出现XSS漏洞。XSS允许攻击者在受害者的浏览器中执行脚本,这些脚本可以劫持用户会话、破坏网站或将用户重定向到恶意网站中。

A8:2017-InsecureDeserialization(不安全的反序列化)

不安全的反序列化漏洞通常会导致远程代码执行问题。即使反序列化错误不会导致远程代码执行,也可以被用来执行攻击,包括重放攻击、注入攻击以及权限提升攻击等。

A9:2017-UsingComponents with Known Vulnerabilities(使用含有已知漏洞的组件)

组件(如库、框架和其他软件模块)是以与应用程序相同的权限运行的。如果存在漏洞的组件被利用,这种攻击可能会导致严重的数据丢失或服务器接管危机。使用己知漏洞组件的应用程序和API可能会破坏应用程序的防御系统,从而启动各种形式的攻击,造成更为严重的影响。

A10:2017-InsufficientLogging&Monitoring(不足的记录和监控漏洞)

不足的记录和监控漏洞,再加上事件响应能力欠缺以及缺少有效的整合,使得攻击者可以进一步攻击系统,维持其持久性,转而攻击更多的系统,并慕改、提取或销毁数据。大部分的数据泄露研究显示,检测出发生数据浪漏的时间通常需要超过200天,而且通常是外部机构率先发现数据泄漏的事实,而不是通过内部的审计流程或监控发现的。

常用工具

Nmap:

  • nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称fingerprinting).它是网络管理员必用的软件之一,以及用以评估网络系统安全。
  • 正如大多数被用于网络安全的工具,nmap也是不少黑客及骇客(又称脚本小子)爱用的工具,系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。
  • Nmap常被跟评估系统漏洞软件Nessus 混为一谈。Nmap以隐秘的手法,避开闻入检测系统的监视,并尽可能不影响目标系统的日常操作。

Metasploit

Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,代码审计,web应用程序扫描,社会工程。团队合作,在Metasploit和综合报告提出了他们的发现。

Burp Suite

Burp Suite是用于攻击web应用程序的集成平台,包含了许多工具。Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP消息、持久性、认证、代理、日志、警报。

SQLMap

SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的RL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBMDB2,SQLite,Firebird,Sybase和SAP MaxDB.采用五种独特的SQL注入技术

Kali Linux

按照官方网站的定义,KaliLinux是一个高级渗透测试和安全审计Linux发行版。作为使用者,简单的把它理解为,一个特殊的Linux发行版,集成了精心挑选的渗透测试和安全审计的工具,供渗透测试和安全设计人员使用。也可称之为平台或者框架。

文件上传漏洞

漏洞原理:

  • 在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。
  • 文件上传漏洞对web应用来说是一种非常严重的漏洞。一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果面eb应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等WebShell,从而达到控制Web网站的目的。
    [网络安全]网鼎杯第五次培训——web网络安全_第11张图片

高危触发点:

  • 相册、头像上传
  • 视频、照片分享
  • 附件上传(论坛发帖、邮箱)
  • 文件管理器
  • 存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。
    论坛发帖和邮箱等可以上传附件的地方也是上传漏洞的高危地带。另外像文件管理器这样的功能也有可能被攻击者所利用。
  • 如果移动端也存在类似的操作的话,那么相同的原理,也存在文件上传漏洞的风险。

Shell

  • Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。因为系统内核使我们不能直接操作的,shell就给我们提供了一个接口,通过shell我们可以把命令送入到内核,shell管理用户与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
  • 传统意义上的shell指的是命令行式的shell,以后如果不特别注明,shell是指命令行式的shell。

WebShell

  • 黑客在入侵了一个网站后,通常会留下一个asp或php后门文件与网站reb服务器进行交互,得到一个命令执行环境,以达到控制网站服务器的目的。这个后门文件就是所谓的webshell。

  • 传统意义上的shell指的是命令行式的shel1,以后如果不特别注明,shel1是指命令行式的shel1,口类别:

  • 一句话木马(体积小,代码少,不易被发现,功能少)
    [网络安全]网鼎杯第五次培训——web网络安全_第12张图片
    [网络安全]网鼎杯第五次培训——web网络安全_第13张图片

  • 小马(代码量较少,体积较小,基本功能都有:文件管理、命令执行、数据库管理)
    [网络安全]网鼎杯第五次培训——web网络安全_第14张图片

  • 大马(代码量多,体积大,易发现,功能多)
    [网络安全]网鼎杯第五次培训——web网络安全_第15张图片

  • 图片马(一般包含一句话木马,只是隐藏在图片中,文件格式为图片,不会被解析)
    [网络安全]网鼎杯第五次培训——web网络安全_第16张图片

  • 一句话木马搭配管理工具
    [网络安全]网鼎杯第五次培训——web网络安全_第17张图片
    [网络安全]网鼎杯第五次培训——web网络安全_第18张图片
    [网络安全]网鼎杯第五次培训——web网络安全_第19张图片

检测与绕过

常见文件上传检测方式:

  • 前端JavaScript验证
  • 文件扩展名检测
  • MIME-type检测
  • 文件头检测
  • 文件加载检测
    [网络安全]网鼎杯第五次培训——web网络安全_第20张图片

前端JavaScript检测

[网络安全]网鼎杯第五次培训——web网络安全_第21张图片
[网络安全]网鼎杯第五次培训——web网络安全_第22张图片

绕过前端JavaScript检测:

web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端JavaScript代码完成的。由于恶意用户可以对前端JavaScript进行修改或者是通过抓包软件靠改上传的文件,就会导致基于JavaScript的校验很容易被绕过。
绕过方法:

  • 修改、副除或者禁用JavaScript
  • 使用代理上传文件,比如Burp Suite

服务器端上传检测:

  • 前面介绍的两种文件上传漏洞都比较简单,大多数网站都能很好的避免此类问题。但是仍然有比较多的网站存在后端代码校验绕过的问题。此类文件上传漏洞较为复杂,一般根据绕过Web应用校验的方法可以分成下面几种:

常规检测方法

  • MTE文件类型校验
  • 扩展名验证
  • 文件头校验
    [网络安全]网鼎杯第五次培训——web网络安全_第23张图片

服务器上传检测与绕过

后缀名检测
  • 黑名单{php php3 php4 asp html jsp}:
  • 1.找一种不在黑名单中的文件后缀名,同时要保证文件可以被解析
  • 2.后缓名大小写
  • 3.利用windows特性绕过
  • 4.00截断
    php版本要小于5.3.4,5.3.4及以上已经修复该问题magic_quotes_gpc需要为0FF状态
  • 5.通过修改解析规则绕过黑名单检测
    .hatcess
后缀名黑名单绕过
  • iis6:.asp,.asa,.cer,.cdx
  • php:ph[2-57a-z]lphp[2-57a-z],phtml,phtm,phpal,inc,paml,ini
  • jsp:jspx
  • apache2:htaccess
  • 大小写绕过
  • 非递归替换为空串时,可在敏感后级中再插入一次敏感后缀绕过,如:phphpp。
白名单
  • 利用文件解析
文件头检测
  • 修改文件头
双文件检测
  • 在一个文件上传的地方,右键审查元素,首先修改action为完整路径,然后复制粘贴上传浏览文件(
00截断

00截断的两种利用方式:

  • 1、更改filename,xx.php.jpg,在burp suit中将空格对应的hex 20改为00
  • 2、更改filename,xx.php%00.jpg,在burp suit中将%00进行右键转换-urlurldecoder
    [网络安全]网鼎杯第五次培训——web网络安全_第24张图片
文件内容检测

[网络安全]网鼎杯第五次培训——web网络安全_第25张图片
[网络安全]网鼎杯第五次培训——web网络安全_第26张图片

win文件流(NTFS)特性
  • test.php内容:一句话:
    [网络安全]网鼎杯第五次培训——web网络安全_第27张图片

  • 在windows环境下,xx.jpg[空格]或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单.若上传成功,空格和点都会被windows自动消除,这样也可以getshell

其他绕过方式
  • 图片渲染检测
    绕过方式:

    • 1.渲染检测绕过,经过特殊处理的图片马
    • 2.文件加载器攻击(溢出)
  • htaccess写入

    • 如果在Apache中.htaccess可被执行。且可被上传.那可以尝试在。htaccess中写入:
    • Setlandler application/x-httpd-php
    • 然后再上传shell.jpg的木马,这样shell.jpg就可解析为php文件。

靶场演示

  • DVWA靶场-low:
    • basename(path,suffix):函数返回路径中的文件名部分,如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名。
    • 可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。
  • DVWA靶场-Medium:
    • Medium级别的代码对上传文件的类型、大小做了限制,要求文件类型必须是jpeg或者png,大小不能超过100000B(约为97.6KB)

防御

  • 1.对上传文件格式进行严格校验及安全扫描,防止上传恶意脚本文件:
  • 2.设置权限限制,禁止上传目录的执行权限
  • 3.严格限制可上传的文件类型;
  • 4.严格限制上传的文件路径。
  • 5.文件扩展名服务端白名单校验。
  • 6.文件内容服务端校验。
  • 7.对图片进行重绘或二次渲染。
  • 8.随机数改写文件名和文件路径,不回显。
  • 9.设置单独的文件服务器或者使用云存储服务。

文件解析漏洞

原理:

解析漏洞主要是一些特殊文件被IIS、Apache、Nginx等服务在某种情况下解释成脚本文件格式并得以执行而产生的漏洞。
[网络安全]网鼎杯第五次培训——web网络安全_第28张图片

容器特性:

  • Apachel.X2.X中解析文件名的方式是从后向前识别扩展名,直到通到pache可识别的扩展名为止。比如shel1.php.omf.rar“.owf”和”.rar”这两种后缀是apache不可识别解析,apache就会把shell.php.owf.rar解析成php,这个漏洞在黑名单过滤中非常好用。
  • IIS6.0两个解析缺陷:
    • 目录名包含,asp、.asa、.cer的话,则该目录下的所有文件都将按照asp解析
    • 文件名中如果包含,asp:、.asa;、.cer:则优先使用asp解析。比如1.asp.jpg,利用此漏洞需要上传文件不被重命名。
  • Nginx 解析漏洞1:
    • Nginx 0.5.、Nginx 0.6.、Nginx 0.7<=0.7.65、Nginx 0.8<=0.8.37
    • 如上版本中上传一个在af白名单之内扩展名的文件shel1.jpg,然后以shell.jpg%00.php进行请求,则会按照php进行解析。
  • Nginx 解析漏洞2:
    • Nginx 0.8.41-1.5.6
    • 以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件shell.jpg,然后以shell.jpg%20%00.php进行请求,则会按照php进行解析。
  • IIS 7.0/7.5&Nginx<0.8.3解析漏洞:
    • 以上的容器版本中默认php配置文件cgi.fix pathinfo=1时,上传一个存在于白名单的扩展名文件shell.jpg,在请求时以shell.jpg/shell.php请求,会将shell.jpg以php来解析。
  • iis处理多个Content-Disposition:
    • 在IIS的环境下,上传文件时如果存在多个Content-Disposition的话,IIS会取第一个Content-Disposition中的值作为接收参数,如果waf只是取最后一个的话便会被绕过。

操作系统特性:

  • indoors特殊字符:
    • 上传一个文件的filename为shel1.php(%80-%99]时:
    • 如果waf为黑名单校验,则该文件在最终写入到硬盘时,文件末尾的特殊字符会被自动去除,类似的还有.php[space],.php.这两种后级在windows文件命名中同样不被允许,最后的字符会被去除,留下.php

文件包含漏洞

原理:

  • 在通过PHP的相应函数(比如include())引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
    include($_POST["file])

文件包含漏洞的形成,需要满足两个条件

  • 用户能够控制这个动态变量(且过滤不完全)
  • include()等函数通过动态变量的方式引入需要包含的文件

注意

  • 包含过来的文件,不管是什么类型的文件,只要文件中有PHP格式的代码均可被解析。

常见文件包含函数

  • include()函数:
    当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
  • include_once()函数:
    功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次。
  • require()函数:
    require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只有程序执行到该函数时才调用。
  • require_once()函数:
    它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

分类

简单区别

  • include() include_once()#错误依然执行
  • require() require_once()#错误退出程序
  • include() require()可以重复调用
  • include_once() require_once()#程序只调用一次

参数开关设置

  • File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include,require和include_once,require_once)
    利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
  • 文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

本地文件包含(LFI)

能够读取或执行包含本地文件的漏洞,称为本地文件包含漏洞(本地是指服务器本身)

在这里插入图片描述

漏洞危害

  • 敏感信息泄露。可以读取敏感信息(配置文件、服务器上配置文件等)
  • GetShell
  • 获取源码。
    • 利用:有后缀名限制的文件包含:%00截断(php<5.3)、?、#
    • 有前级限制的文件包含:目录跳转…/./

包含第三方服务器中的文件

  • 如果php.ini的配置选项allow_url_fopen,allow_url_include为0N的话,文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。

条件:开启fopen和include

  • allow_url_include是否允许引用UL文件
  • allow_url_fopen是否允许打开URL文件
  • 危害:利用远程文件包含漏洞,可以直接执行任意命令。
  • 注意:在php.ini中,allow_url_fopen默认一直是on,而allow_url_include从php5.2之后默认为off

读取敏感信息

[网络安全]网鼎杯第五次培训——web网络安全_第29张图片

远程包含GetShell

[网络安全]网鼎杯第五次培训——web网络安全_第30张图片

本地包含配合文件上传

[网络安全]网鼎杯第五次培训——web网络安全_第31张图片

其他方式

[网络安全]网鼎杯第五次培训——web网络安全_第32张图片

靶场实战

[网络安全]网鼎杯第五次培训——web网络安全_第33张图片
[网络安全]网鼎杯第五次培训——web网络安全_第34张图片
[网络安全]网鼎杯第五次培训——web网络安全_第35张图片
[网络安全]网鼎杯第五次培训——web网络安全_第36张图片
[网络安全]网鼎杯第五次培训——web网络安全_第37张图片
[网络安全]网鼎杯第五次培训——web网络安全_第38张图片
[网络安全]网鼎杯第五次培训——web网络安全_第39张图片
[网络安全]网鼎杯第五次培训——web网络安全_第40张图片

你可能感兴趣的:(网络安全)