bug70284.phpt 845 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. --TEST--
  2. Bug #70284 (Use after free vulnerability in unserialize() with GMP)
  3. --EXTENSIONS--
  4. gmp
  5. --FILE--
  6. <?php
  7. $inner = 'r:2;a:1:{i:0;a:1:{i:0;r:4;}}';
  8. $exploit = 'a:2:{i:0;s:1:"1";i:1;C:3:"GMP":'.strlen($inner).':{'.$inner.'}}';
  9. $data = unserialize($exploit);
  10. $fakezval = ptr2str(1122334455);
  11. $fakezval .= ptr2str(0);
  12. $fakezval .= "\x00\x00\x00\x00";
  13. $fakezval .= "\x01";
  14. $fakezval .= "\x00";
  15. $fakezval .= "\x00\x00";
  16. for ($i = 0; $i < 5; $i++) {
  17. $v[$i] = $fakezval.$i;
  18. }
  19. var_dump($data);
  20. function ptr2str($ptr)
  21. {
  22. $out = '';
  23. for ($i = 0; $i < 8; $i++) {
  24. $out .= chr($ptr & 0xff);
  25. $ptr >>= 8;
  26. }
  27. return $out;
  28. }
  29. ?>
  30. --EXPECTF--
  31. Fatal error: Uncaught Exception: Could not unserialize number in %sbug70284.php:6
  32. Stack trace:
  33. #0 %sbug70284.php(6): unserialize('%s')
  34. #1 {main}
  35. thrown in %sbug70284.php on line 6