funfuzz学习笔记

funfuzz是 Mozilla 开源的一个JavaScript fuzzer 工具集合,提供了一个针对 Mozilla 的 Spidermonkey 的有力fuzz工具。

SpideMonkey

SpiderMonkey是世界上第一款JavaScript引擎,由前网景公司的布兰登·艾克设计,后期由Mozilla基金会维护,以开放源代码发布。目前为Mozilla Firefox网页浏览器所使用的JavaScript引擎,并也被嵌入到其他许多环境,例如GNOME 3桌面。

From Wikipedia

官方文档:SpiderMonkey: The Mozilla JavaScript runtime

在 Mozilla 官方对 SpiderMonkey 的文档中提到,这个JavaScript引擎是用C/C++写的,而在这上,还有构建的一个JS Shell,还没闹明白是咋用的呢。

安装文档 Building SpiderMonkey

Build 过程

clone funfuzz仓库到本地

# 我是直接保存到了根目录下
git clone https://github.com/MozillaSecurity/funfuzz.git

通过 pip 安装所需的软件包(可能出现问题,后文有说)

cd ~/funfuzz
pip install -r requirements.txt
# or
pip3 install -r requirements.txt

下载 Mozilla - central

mkdir -p ~/trees/
hg clone https://hg.mozilla.org/mozilla-central/ ~/trees/mozilla-central/

在这个mozilla-central中,有 Mozilla 自家的多功能构建工具mach以及一系列在进行 Mozilla 相关操作的时候需要用到资源。

开发者(debug) Build

设定一个 MOZCONFIG

mkdir -p ~/mozconfigs

新建一个debug文件,文件内容是

# Build only the JS shell
ac_add_options --enable-application=js

# Disable Optimization, for the most accurate debugging experience
ac_add_options --disable-optimize
# Enable the debugging tools: Assertions, debug only code etc.
ac_add_options --enable-debug

设置环境变量

export MOZCONFIG=$HOME/mozconfigs/debug

Building

使用 Mozilla - central 中的mach工具进行构建

cd ~/trees/mozilla-central/
./mach build

过程中可能会提示需要先进行一步(关于bootstrap是啥我刚刚也查了一下,相关资料在后面)

./mach bootstrap

在安装的过程中有一系列选项,我粗略看了一下,恩,都看不懂,直接一路回车选默认了。

安装完bootstrap之后,就可以通过一些指令来补充安装一些 build 过程所必需的内容了。

JS Shell

官方文档:JavaScript Shell 简介

这一部分还没有时间仔细看…

funfuzz

在 GitHub 的文档中有如下提示

  1. 为了确保当多个实例同时崩溃时核心转储不会混淆,请运行:
echo -n 1 | sudo tee /proc/sys/kernel/core_uses_pid
  1. 安装32位库以编译32位二进制文件:
  • Debian / Ubuntu: sudo apt-get install lib32z1 gcc-multilib g++-multilib
  • Fedora :(已知可以使用Fedora,但是目前尚不知道确切的库名称。)
  1. 安装gdb:
  • Debian / Ubuntu: sudo apt-get install gdb
  • Fedora:请确保已安装所有开发包(请参阅参考资料rpm -qa "*devel")并运行yum install gdb
  1. 为clang / ASan构建安装clang:
  • Debian / Ubuntu: sudo apt-get install clang
  • Clang用于64位版本,而GCC用于某些较旧的32位版本

过程踩坑

pip 版本

如果本地的 pip 对应的是 python2,可能会出现失败的情况。需要手动下载一个 python3 对应的 pip。

关于 pip 的一些参考命令 pip简单教程

除了如何搞定 pip3 ,我还找到了一些其他可能会用到的东西。

Linux-Ubuntu16.04下Python3.5安装pip3以及scrapy、numpy、itchat

bootstrap 是啥

bootstrap 中文网

根据各种网上资料的描述

Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的。

Bootstrap 是一个工具包,其中包括很多内容

  • 基本结构:Bootstrap 提供了一个带有网格系统、链接样式、背景的基本结构。这将在 Bootstrap 基本结构 部分详细讲解。
  • CSS:Bootstrap 自带以下特性:全局的 CSS 设置、定义基本的 HTML 元素样式、可扩展的 class,以及一个先进的网格系统。这将在 Bootstrap CSS 部分详细讲解。
  • 组件:Bootstrap 包含了十几个可重用的组件,用于创建图像、下拉菜单、导航、警告框、弹出框等等。这将在 布局组件 部分详细讲解。
  • JavaScript 插件:Bootstrap 包含了十几个自定义的 jQuery 插件。您可以直接包含所有的插件,也可以逐个包含这些插件。这将在Bootstrap 插件部分详细讲解。
  • 定制:您可以定制 Bootstrap 的组件、LESS 变量和 jQuery 插件来得到您自己的版本。