shellcode加载之使用栈溢出加载shellcode
2023-8-4 19:26:3 Author: www.freebuf.com(查看原文) 阅读量:16 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

最近在看pwn和免杀,发觉可以使用栈溢出来加载shellcode,就做了一些尝试,使用栈溢出来编写加载器。

loader函数如下

int loader(int size, char* str) {
char eee[10];
memcpy(eee, str, size);
return 0;
}

接下来做个测试,来判断哪个位置会覆盖到返回地址

测试代码如下

#include<stdio.h>
#include<Windows.h>

int loader(int size, char* str) {
char eee[10];
memcpy(eee, str, size);
return 0;
}

int main() {
char* iii = "11111111222222223333333344444444555555556666666677777777888888889999999900000000aaaaaaaabbbbbbbb";
loader(200, iii);

system("pause");
}

但是在测试之前,还需要对vs进行一些配置,禁用基本运行时检查和安全检查

1691145113_64ccd3996803ee0e43464.png!small

关闭优化

1691145413_64ccd4c5a7e093513d090.png!small

编译后使用xdebug打开进行调试

1691145519_64ccd52f0f0f8c392e5dd.png!small

ret返回时,栈顶指针执行3636363636363636,0x36是6的ascii码,那么loader函数的返回地址位置就是66666666那里,只需要将66666666换成shellcode地址就可以进行加载了。

依据上面思路,不难写出下面加载代码


文章来源: https://www.freebuf.com/articles/system/374005.html
如有侵权请联系:admin#unsafe.sh