实习第八天报告(9.4)

目录

知识点

Docker

虚拟化

优势

安装Docker

使用docker

RCE漏洞

代码审计

Vulhub漏洞复现

Tomcat

Weblogic任意文件读取漏洞

Apache HTTPD 换行解析漏洞

Apache Druid代码执行漏洞


知识点

Docker

Docker是一组平台即服务(PaaS)的产品。它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。托管容器的软件称为Docker引擎。Docker能够帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离高效工作。
简单来说,Docker 通过对应用组件的封装、分发、部署、运行等生命周期的管理使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“次封装,多次运行。
Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包达到应用程式跨平台间的无缝接轨运作。

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。

虚拟化

虚拟机技术
虚拟机(virtual machine)就是带环境安装的一种解决方案。 它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。虚拟机的缺点:资源占用多;冗余步骤多;启动慢。

容器化

由于虚拟机存在这些缺点,Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩写为LXC)。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

优势

更快速的应用交付和部署
传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

更便捷的升级和扩缩容
随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

更简单的系统运维

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。
更高效的计算资源利用
Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

安装Docker

Ubuntu系统下:

apt install docker.io

一般使用该条命令安装就可以了,快速且安全,但由于个人服务器原因无法启动环境,若遇到相同情况可执行这条命令

sudo apt-get install docker-ce

安装成功后,使用docker version查看docker信息

安装docker-compose

pip install docker-compose

安装成功后,使用docker-compose -v查看

基本安装成功后,配置阿里云镜像加速服务(仅阿里云服务器适用)

配置完成后,使用docker info查看配置情况

使用docker

docker常用命令

docker info                                                                           --输出docker信息
docker image ls                                                                --列出本地主机镜像
docker search                                                        --在docker hub中查询镜像
docker pull 镜像名                                                 --在docker hub中拖取镜像
docker rmi 镜像名                                                                    --删除某个镜像
docker run 镜像名/镜像ID                                                        --启动某个容器
docker ps -a                                                                             --查看所有容器
docker start/restart/stop/kill/rm 容器名ID        --启动/重启/停止/杀死/删除容器

docker-compose命令

docker compose build                                                           --自动化编译环境
docker compose up -d                                                              --启动整个环境
docker compose down -v                                                         --删除整个环境

安装靶场

这里我们安装了pikachu和sqli-labs,靶场,步骤为:

docker search查找镜像资源
选择点赞数最高的资源,使用docker pull *imageID*拖取
拖取完成后,使用docker run -itd -p *port*:*port* containerID配置端口映射
配置完成后,使用docker ps -a查看配置情况

本地尝试访问,成功访问,验证配置成功

配置vulhub

直接git后查看

选择zabbix/CVE-2020-11800环境测试,成功拉取,说明运行成功

测试完成后,删除整个环境

RCE漏洞

RCE漏洞,即远程代码执行漏洞,是一种严重的安全漏洞,允许攻击者在目标系统上远程注入并执行任意代码。这种漏洞的产生,通常是由于应用系统在处理用户输入或与外部环境交互时,未能进行充分的安全验证和过滤,导致攻击者能够提交恶意输入,进而触发代码执行。

原理

RCE漏洞的产生,通常是由于应用系统在处理用户输入或与外部环境交互时,未能进行充分的安全验证和过滤。当应用程序接受用户输入,并在后端执行这些输入时,如果输入没有经过适当的安全验证和处理,攻击者可以提交恶意输入,导致远程代码执行。这些恶意输入可能包括操作系统命令、恶意脚本或任何可执行的代码片段,在大多数情况下,RCE漏洞的产生是由于以下几种原因:

输入验证不足:开发者在编写代码时,未能对用户输入进行充分的安全验证和过滤,导致攻击者能够提交恶意输入。

动态代码执行:某些应用需要动态执行用户提交的代码或命令,如果在这个过程中未进行适当的安全控制,就可能导致远程代码执行。

命令注入:当应用程序接受用户输入,并将这些输入直接传递给操作系统或其他命令行工具时,如果未对输入进行适当的转义或验证,攻击者可以通过提交恶意输入来注入并执行任意命令。

利用

RCE漏洞的利用通常涉及以下几个步骤:

寻找目标:攻击者首先需要找到存在RCE漏洞的目标系统或应用。这可能通过扫描公开的网络资产、利用已知的漏洞信息、或通过社会工程手段获得访问权限。

探测漏洞:攻击者使用特定的技术或工具来探测目标系统或应用是否存在RCE漏洞。这可能涉及到发送特定的请求、构造特定的输入,观察目标系统的响应,以判断是否存在可利用的漏洞。

注入代码:一旦确认存在RCE漏洞,攻击者会尝试注入恶意代码。常有手段有在用户输入中夹带恶意代码、利用现有功能提交恶意请求等。如果目标系统未对用户输入进行适当的安全验证和处理,攻击者的恶意代码将被执行。

控制目标:一旦恶意代码被执行,攻击者通常能够获得对目标系统的完全控制权。他们可以执行任意命令、访问敏感数据、安装后门、甚至进一步控制受影响的其他系统。

满足如下条件的话很可能存在命令注入的风险:
传入exec()或者ProcessBuilder()的参数用户前端可控
服务端未对传入参数进行检查
常见业务场景
业务逻辑处理时会直接拼接用户可控参数,然后去执行系统命令或者拼凑回调函数代码达到对应的业务效果。常见的场景如下:
截屏操作(例如调用系统命令执行PhantomJs并对其传参实现截图)
图片处理(例如通过命令进行文件的复制、剪切、删除等)
大文件压缩解压(例如zip、unzip命令)
网站监测(例如常见的curl、ping、telnet等)

防范

尽量不要使用命令执行函数,对所有输出进行适当的编码和转义,防止攻击者注入恶意代码或标签,确保输出的安全性

确保应用程序和服务以最小的权限运行。避免赋予不必要的权限,只授予必要的权限以完成必要的任务。这将限制潜在攻击者的破坏范围和影响,不要让用户控制参数。

执行前做好检测和过滤:对所有用户输入进行严格的安全验证和过滤。确保应用程序只接受预期的输入,并对所有其他输入进行适当的拒绝或转义。并且对用户提交的数据、命令和参数进行严格的验证和过滤,以防止恶意输入的注入和执行。

对系统和服务进行安全配置,限制潜在的攻击面,关闭不必要的端口和服务、限制网络访问,保持系统和应用程序的最新状态;及时应用安全更新和补丁,修复已知的漏洞和缺陷;定期进行安全审计和渗透测试,确保系统的安全性;实施全面的监控和日志记录机制,及时检测和响应可疑的活动和异常行为,并对其及时采取措施应对潜在的攻击。

代码审计

定义:代码审计(Code Audit)是一种以发现安全漏洞、程序错误和程序违规为目标的源代码分析技能。在实践过程中,可通过人工审查或者自动化工具的方式,对程序源代码进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议,是产品上线之前必须要做的一个工作,防止产生一些可以避免的安全漏洞。

方法概述:

首先使用工具对代码进行扫描,然后根据设定好的一些规则进行一个匹配,从而找到可能存在漏洞的一些地方,然后结合人工审查匹配,确定这个地方是不是有漏洞,代码里我们使用工具能发现一些常规的漏洞,但不是所有的漏洞都能找得到,所以还需要结合人工审计的方式来对代码进行审计;为了在应用代码中寻找目标代码的漏洞,需要有明确的方法论做指导。方法论的选择则要视目标程序和要寻找的漏洞类型而定。

黑白盒测试

黑盒测试又称为功能测试,主要检测软件的每一个功能是否能够正常使用;在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否按照设计需求以及说明书的规定能够正常打开使用。

白盒测试也称为结构测试,主要用于检测软件编码过程中的错误;程序员的编程经验、对编程软件的掌握程度、工作状态等因素都会影响到编程质量,导致代码错误。

举例

黑盒测试相当于你去验收一个工程,比如:强能防爆多少顿炸药,我们就拿多少的炸药试一下就行了,墙被炸了,就不合格。可以使用任何方式对这个项目来进行渗透和测试;

而白盒测试是假设我作为一个甲方人员来进行测试,开发方就必须把所有资料给到我,设计图纸,那一块多少混泥土,多少钢筋,用的是什么型号都要告诉我。那我就知道这个墙能够承受多少,力学模型都知道了,我结合所有的资料就可以知道你这个工程是不是合格的。或者说那些地方可能存在哪些问题。

就是给你源代码,你结合工具或者经验对代码进行分析。

代码审计流程

前期准备阶段  --> 源代码审计阶段实施 --> 复测阶段实施 --> 成果汇报阶段

代码审计报告

报告应包含关键信息:

1.审计日期
2.应用程序名称、版本号、审计的代码模块。
3.审计人员姓名
4.任务或特征名称 (TFS、 GIT、 Subversion、 Trouble Ticket 等)。
5.修复建议,需要一段概要描述来对软件漏洞进行分类和排序。
6.提供链接或相关的文档,包括需求、设计、测试和威胁建模文件.
7.代码审计清单
8.使用的工具

Vulhub漏洞复现

Tomcat

Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。其中,欲访问后台,需要对应用户有相应权限。

Tomcat7+权限分为:

 - manager(后台管理)
 - manager-gui 拥有html页面权限
 - manager-status 拥有查看status的权限
 - manager-script 拥有text接口的权限,和status权限
 - manager-jmx 拥有jmx权限,和status权限
 - host-manager(虚拟主机管理)
 - admin-gui 拥有html页面权限
 - admin-script 拥有text接口权限

这些权限的作用详情阅读 http://tomcat.apache.org/tomcat-8.5-doc/manager-howto.html

vulhub进入tomcat目录

拖取tomcat环境

查看tomcat容器

windows本地访问服务器,成功访问

尝试使用tomcat - tomcat弱口令登录

成功登录到后台后,准备上传木马文件,使用命令:jar -cvf AntSword.war AntSword.jsp将蚁剑默认木马AntSword.jsp压缩为AntSword.war,Deploy

成功上传后,可以在应用列表里看到我们刚才上传的蚁剑木马

使用蚁剑连接

连接成功后,可使用蚁剑查看后台文件,综上,我们可知该漏洞成因是存在弱口令和任意文件上传

Weblogic任意文件读取漏洞

拖取weblogic环境

拖取完成后查看端口情况

本机访问服务器

使用弱口令weblogic - Oracle@123登录

读取后台用户密文与密钥文件

weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.datconfig.xml,在本环境中为./security/SerializedSystemIni.dat./config/config.xml(基于当前目录/root/Oracle/Middleware/user_projects/domains/base_domain)。

SerializedSystemIni.dat是一个二进制文件,所以一定要用burpsuite来读取,用浏览器直接下载可能引入一些干扰字符。

浏览器访问http://47.98.243.158:7001/hello/file.jsp?path=security/SerializedSystemIni.dat,BP监听抓包,切换响应为Hex页面,选取最后64为,右键copy to fil保存成SS.dat文件

再访问http://47.98.243.158:7001/hello/file.jsp?path=config/config.xml,BP抓包找到其中的<node-manager-password-encrypted>的值,即为加密后的管理员密码

获取两项内容后,使用本环境的decrypt目录下的weblogic_decrypt.jar,解密密文

后台上传webshell

获取到管理员密码后,登录后台。点击左侧的部署,可见一个应用列表,点击安装,选择“上载文件”,上传war包。值得注意的是,我们平时tomcat用的war包不一定能够成功,你可以将你的webshell放到本项目的web/hello.war这个压缩包中,再上传。上传成功后点下一步。

继续一直下一步,最后点完成,应用目录在war包中WEB-INF/weblogic.xml里指定(因为本测试环境已经使用了/hello这个目录,所以你要在本测试环境下部署shell,需要修改这个目录,比如修改成/jspspy),使用蚁剑连接,成功连接

使用蚁剑连接,查看后台文件,在这里我们还可以下载之前的用户的密文与加密时的密钥,还可以看到之前上传的文件,综上,我们可以将漏洞成因归结为weblogic后台存在一个弱口令,并且前台存在任意文件读取漏洞。

Apache HTTPD 换行解析漏洞

Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

拖取镜像

启动容器

本机访问网页

选择蚁剑php一句话木马上传,BP抓包,使用重放器发送,被拦截,提示Bad file

查看网页index.php源代码,发现黑名单如下:

<?php

    if(isset($_FILES['file'])) {

        $name = basename($_POST['name']);

        $ext = pathinfo($name,PATHINFO_EXTENSION);

        if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {

            exit('bad file'); #黑名单

        }

        move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);

}

在evil.php之后插入一个\x0A,发送,不再拦截

使用蚁剑连接,成功

使用蚁剑查看后台配置文件,结合上一次文件上传漏洞课的.htaccess绕过知识,我们很明显就能发现前三行的内容意思是将所有以“.php”为后缀的文件内容当作PHP代码进行解析,但是却使用了“$”进行文件匹配,这个符号在正则表达式中是匹配字符串中结尾的位置,若存在换行则匹配换行符为结尾,也就是说可以利用换行符使“$”与其匹配从而绕过黑名单机制实现文件上传,漏洞因此产生

Apache Druid代码执行漏洞

由于个人服务器太垃圾了,这边用一下别人的服务器。
访问页面,Apache Druid是一个专为大数据集的快速切片分析(OLAP查询)而设计的实时分析数据库。Druid作为数据库,最常用于支持以下用例:实时摄取、快速查询和高运行时长。例如,Druid一般用于支持分析型应用程序的GUI,或是需要快速聚合的高并发API后台。Druid最适合用于面向事件的数据。
Apache Druid包括执行嵌入在各种类型请求中的用户提供的JavaScript代码的能力。这个功能是为了在可信环境下使用,并且默认是禁用的。然而,在Druid 0.20.0及以前的版本中,攻击者可以通过发送一个恶意请求使Druid用内置引擎执行任意JavaScript代码,而不管服务器配置如何,这将导致代码和命令执行漏洞。

使用BP在首页截取数据请求包,将以下数据包代替请求包

得到响应,可见id命令已成功执行,若想执行不同命令,只需要将id换成任何命令即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值