看雪论坛
发新帖

[原创]才知道栈也可以执行,写了个小练习分享一下

OxCL 6天前 303

#include <stdio.h>


int main()
{
    long putsAddr = (long)puts;
    unsigned char *func = (unsigned char*)&putsAddr;

    unsigned char shellcode[] = {
        0xE8, 0x00, 0x00, 0x00, 0x00,               // push     shellcode
        0xB8, func[0], func[1], func[2], func[3],   // mov      eax, func
        0xFF, 0xD0,                                 // call     eax
        0x83, 0xC4, 0x04,                           // add      esp, 4
        0xC3,                                       // ret
        0x01, 0x0D,
        0x6B, 0x6F, 0x6E, 0x20,
        0x6E, 0x69, 0x20,
        0x63, 0x68, 0x69, 0x20,
        0x77, 0x61, 0x2C, 0x20,
        0x4C, 0x20,
        0x63, 0x68, 0x61, 0x6E, 0x7E, 0x00
    };
    
    ((void(*)())(long)shellcode)();
    return 0;
}

开头通过 call 0x000000 把 shellcode 地址 push 进去,字符串用 \r (0x0D) 回车到行首打印实际的内容

感觉自己十分机智 ^_^ 虽然这玩意儿并没有什么乱用 /_\


链接器要加上 /NXCOMPAT:NO 取消数据执行保护

本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (0)
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 知道创宇带宽支持 | 微信公众号:ikanxue
Time: 0.010, SQL: 8 / 京ICP备10040895号-17