Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从 0 开始学 V8 漏洞利用之环境搭建(一)

从 0 开始学 V8 漏洞利用之环境搭建(一)

作者头像
Seebug漏洞平台
发布于 2022-02-23 05:48:59
发布于 2022-02-23 05:48:59
87100
代码可运行
举报
文章被收录于专栏:Seebug漏洞平台Seebug漏洞平台
运行总次数:0
代码可运行

作者:Hcamael@知道创宇404实验室

最近因为某些原因开始学V8的漏洞利用,所以打算写一个系列的文章来记录一下我的学习过程。

概述

在开始研究V8之前肯定得有相应版本的环境,搭建v8环境的教程网上挺多的。在国内搭建环境,因为众所周知的原因,我们会遇到第一个瓶颈,网络瓶颈。不过也挺好解决的,把环境搭在vps上,网速是最快的。不过随后就会遇到第二个瓶颈,性能瓶颈,自用的vps一般性能都是1c1g左右,编译一次将近1h吧。

我是打算学V8的漏洞利用,不用的漏洞版本基本都会有区别,总不可能研究一个就花1h左右的时间在编译上吧。所以我就考虑是否有现成的docker环境,这样就不需要花时间在编译上了,不过并没有找到合适的docker,只找到一个叫docker-v8(https://github.com/andreburgaud/docker-v8)的项目,不过只有很少的几个版本,这个Dockerfile和Makefile写的也不对,只能编译最新版的,没法编译任意一个版本。所以我对这个项目进行了一些改编,打算在我的mbp上来编译,自己构建相关的docker。但是没想到i9的CPU也不太行,挺垃圾的,一热就降频,10s左右就可以煮鸡蛋了。编译一次差不多半小时吧,再加上网络因素,完整跑一趟流程也差不多1h。

随后想起前段时间给女朋友配了个AMD 5950x的台式机,随后又研究了一波WOL,但是发现在断电一段时间后,WOL会失效,最后使用小米智能插座,台式机设置通电自动开机,来让我远程访问。

这个台式机是买来给女朋友打游戏,所以装的是windows,也没装虚拟机。不过装了WSL,直接在WSL上编译,路由器是openwrt,让台式机走全局代理,这样又解决了网络瓶颈,最后一整套流程下了,只需要5分钟左右就能生成任意版本的v8环境。然后把d8拖到本地,就能构建好相应版本的docker了。

环境搭建

下面就来详细说明我在WSL编译v8环境的过程:

  • 首先装好相关依赖: sudo apt install bison cdbs curl flex g++ git python vim pkg-config
  • 获取depot_tools: git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
  • 设置depot_tools的环境变量: echo "export PATH=
  • 运行fetch v8, 这个命令会把v8克隆下来,v8挺大的,所以这个命令的速度视网络情况而定
  • 安装v8相关的依赖,字体依赖就算用代理也会遇到一些网络问题,但是我目前没有研究字体类的漏洞,我就没有去解决这个问题,所以直接不装字体的依赖:./v8/build/install-build-deps.sh --no-chromeos-fonts

以上算通用步骤,也就是不管什么版本,上面的命令执行一次就好了。

网上的环境搭建的教程里面,之后应该就是执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd v8
$ gclient sync
$ gn gen out/x64.release --args='v8_monolithic=true v8_use_external_startup_data=false is_component_build=false is_debug=false target_cpu="x64" use_goma=false goma_dir="None" v8_enable_backtrace=true v8_enable_disassembler=true v8_enable_object_print=true v8_enable_verify_heap=true'
ninja -C out/x64.release d8

如果编译出来的v8环境需要迁移,建议设置v8_monolithic=true,这样只需要迁移一个d8程序就好了。要不然还得迁移其他(snapshot)依赖。

上面是编译最新版环境运行的命令,不过我是需要编译任意版本的,所以我把第二阶段的内容写成了一个build.sh脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat build.sh
#!/bin/bash
VER=$1
if [ -z $2 ];then
        NAME=$VER
else
        NAME=$2
fi
cd v8
git reset --hard $VER
gclient sync -D
gn gen out/x64_$NAME.release --args='v8_monolithic=true v8_use_external_startup_data=false is_component_build=false is_debug=false target_cpu="x64" use_goma=false goma_dir="None" v8_enable_backtrace=true v8_enable_disassembler=true v8_enable_object_print=true v8_enable_verify_heap=true'
ninja -C out/x64_$NAME.release d8

以下是我运行一次该脚本的时间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ time ./build.sh "9.6.180.6"
HEAD is now at 67eacd3dce Version 9.6.180.6
Syncing projects: 100% (29/29), done.
Running hooks: 100% (27/27), done.
Done. Made 178 targets from 98 files in 244ms
ninja: Entering directory `out/x64_9.6.180.6.release'
[1839/1839] LINK ./d8
./build.sh "9.6.180.6"  4581.36s user 691.20s system 1586% cpu 5:32.41 total

然后是我修改过后的Makefile:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat Makefile 
TAG:=$(tag)
IMAGE:=hcamael/v8

default: help

help:
    @echo 'V8/D8 ${TAG} Docker image build file'
    @echo
    @echo 'Usage:'
    @echo '    make clean           Delete dangling images and d8 images'
    @echo '    make build           Build the d8 image using local Dockerfile'
    @echo '    make push            Push an existing image to Docker Hub'
    @echo '    make deploy          Clean, build and push image to Docker Hub'
    @echo '    make github          Tag the project in GitHub'
    @echo

build:
    docker build --build-arg V8_VERSION=${TAG} -t ${IMAGE}:${TAG} .

clean:
    # Remove containers with exited status:
    docker rm `docker ps -a -f status=exited -q` || true
    docker rmi ${IMAGE}:latest || true
    docker rmi ${IMAGE}:${TAG} || true
    # Delete dangling images
    docker rmi `docker images -f dangling=true -q` || true

push:
    docker push docker.io/${IMAGE}:${TAG}
    docker tag ${IMAGE}:${TAG} docker.io/${IMAGE}:latest
    docker push docker.io/${IMAGE}:latest

deploy: clean build push

github:
    git push
    git tag -a ${TAG} -m 'Version ${TAG}'
    git push origin --tags


.PHONY: help build clean push deploy github

然后是修改过后的Dockerfile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat Dockerfile
FROM debian:stable-slim

RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update && apt-get upgrade -yqq && \
    DEBIAN_FRONTEND=noninteractive apt-get install curl rlwrap vim -yqq gdb && \
    apt-get clean
ARG V8_VERSION=latest
ENV V8_VERSION=$V8_VERSION

LABEL v8.version=$V8_VERSION \
      maintainer="test@admin.com"
WORKDIR /v8

COPY /v8_$V8_VERSION/d8 ./

COPY vimrc /root/.vimrc

COPY entrypoint.sh /

RUN chmod +x /entrypoint.sh && \
    mkdir /examples && \
    ln -s /v8/d8 /usr/local/bin/d8

ENTRYPOINT ["/entrypoint.sh"]

参考

https://github.com/andreburgaud/docker-v8

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Seebug漏洞平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
从 0 开始学 V8 漏洞利用之 starctf 2019 OOB(三)
从 0 开始学 V8 漏洞利用之环境搭建(一) 从 0 开始学 V8 漏洞利用之 V8 通用利用链(二)
Seebug漏洞平台
2022/02/23
1K0
从 0 开始学 V8 漏洞利用之 starctf 2019 OOB(三)
一键部署 SpringCloud 微服务,yyds!
一键部署springcloud微服务,需要用到 Jenkins K8S Docker等工具,自行安装即可。
码猿技术专栏
2024/01/29
2960
一键部署 SpringCloud 微服务,yyds!
Gitlab-CICD实践篇(下)
该实践方案主要介绍微服务项目使用gitlab自带的GitLab Continuous Integration (CI) & Continuous Delivery (CD)功能,在gitlab提供的runner里面进行打包、测试、发布。
陈不成i
2021/06/07
8430
kubernetes集群之微服务tomcat服务
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
王先森sec
2023/04/24
3600
kubernetes集群之微服务tomcat服务
云计算运维一步步编译安装Kubernetes之交付dubbo微服务
dubbo提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
王先森sec
2023/04/24
3840
云计算运维一步步编译安装Kubernetes之交付dubbo微服务
分布式编译系统的搭建
由于MySQL 源码编译单机耗费的时间过于长,最近MySQL 变成8.0.27 以后编译时间明显更耗时了,并且办公室内有多余的空闲机器。
GreatSQL社区
2023/08/10
5640
分布式编译系统的搭建
性能环境之docker操作指南6(全网最全)
ubuntu容器内运行着的SSH Server占用22端口,对外为50022端口。
高楼Zee
2019/07/17
7850
Devops实践中的CICD工具
如何实践Devops? 我觉得肯定是先玩起来,在实践中探索学习和总结Devops文化,不同体制的团队或者公司在Devops文化的理解上都有自己道理,有的人说devops是跨职能团队,也有的说是敏捷团队
公众号: 云原生生态圈
2021/11/15
3470
Devops实践中的CICD工具
Docker构建Yapi镜像并部署
YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。
Ryan-Miao
2019/04/01
3.4K2
从0开始学 V8 漏洞利用之 CVE-2021-21225(九)
作者:Hcamael@知道创宇404实验室 相关阅读: 从 0 开始学 V8 漏洞利用之环境搭建(一) 从 0 开始学 V8 漏洞利用之 V8 通用利用链(二) 从 0 开始学 V8 漏洞利用之 starctf 2019 OOB(三) 从 0 开始学 V8 漏洞利用之 CVE-2020-6507(四) 从 0 开始学 V8 漏洞利用之 CVE-2021-30632(五) 从 0 开始学 V8 漏洞利用之 CVE-2021-38001(六) 从 0 开始学 V8 漏洞利用之 CVE-2021-30517(七)
Seebug漏洞平台
2022/03/24
7130
docker 镜像制作示例
本文以将 rustdesk-server-demo 制作为 docker 为例,讲述 docker 镜像制作过程。
谛听
2021/11/20
3.8K0
翻新篇:Dockerfile
Dockerfile 是用来 构建 Docker 镜像 的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
看、未来
2022/05/28
7400
翻新篇:Dockerfile
08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
https://www.cnblogs.com/you-men/category/1789332.html
iginkgo18
2020/10/10
1K0
08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
Docker(三):Dockerfile 命令详解
上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用。 Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像。FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个基础镜像。 FROM语法格式为: FROM <image>
纯洁的微笑
2018/04/18
1.5K0
Docker: SRS支持x86/armv7/aarch64镜像
最近我发现有个趋势哈,就是ARM server越来越多,但是ARM好像不像x64平台那么好识别,总是有各种各样的arm识别不了。如果SRS能出ARM的docker镜像,那会比较容易跑起来。 SRS已经支持了多CPU架构的docker镜像,如下图所示: 下面是用法和技术背景。 Usage 现在SRS支持了多个CPU架构,参考ossrs/srs[1]: •  linux/amd64 这就是x86_64架构,Intel的64位服务器,目前主要的Linux服务器都是这种类型,无论任何操作系统只要是这个芯片都可以用
Winlin
2022/06/16
3K0
Docker: SRS支持x86/armv7/aarch64镜像
自定义构建基于.net core 的基础镜像
nuget的包源无法访问(无法ping通),而我在一台服务器上访问https://api.nuget.org/v3/index.json时则会自动重定向到https://nuget.cdn.azure.cn/v3/index.json。
易墨
2019/09/29
1.7K0
自定义构建基于.net core 的基础镜像
3.Docker学习之Dockerfile
描述:Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。 用户可以使用Dockerfile快速创建自定义的镜像;通过它所支持的内部指令,以及使用它创建镜像的基本过程,Docker拥有”一点修改代替大量更新”的灵活之处;
全栈工程师修炼指南
2022/09/28
1.4K0
3.Docker学习之Dockerfile
探索Nginx+FastDFS+RTMP的Docker镜像搭建
在本篇博客中,我们将深入探讨如何利用Docker构建Nginx、FastDFS以及RTMP的集成环境。我们将从Dockerfile的编写开始,一步步搭建起这个环境,并说明如何使用这个镜像来部署服务。
默 语
2024/11/20
1530
Dockerfile安装的几个实例 原
等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为mysql,标签为5.6的镜像。
拓荒者
2019/03/11
9420
Docker 学习系列二之基本管理
---- 概述 之前对docker的基本的工作原理进行了简单的介绍和学习Docker工作原理 今天开始不断的学习Docker的容器、镜像和仓库管理。 Docker容器管理 Docker 常用管理操作 test@dev:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
吕海峰
2018/04/03
7690
相关推荐
从 0 开始学 V8 漏洞利用之 starctf 2019 OOB(三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验