4.8 实战:栈溢出攻击示例

4.8 实战:栈溢出攻击示例

二进制方式打开

vi -b xxx

十六进制查看

%! xxd
%! xxd -r 退出

查看函数的地址

readelf -s xxx.out |grep xxx

攻击思路

  1. 通过反汇编获取源程序 shellcode函数的地址
  2. 生成一个bin文件,将shellcode的地址填写到,fread对应的位置
  3. 远程通过fread,进行栈溢出访问,将shellcode的地址装载到LR寄存器

代码


/************************************************
* Copyright(C) zhaixue.cc. All rights reserved
*
*      Filename: stack-overflow.c
*        Author: litao.wang
*        E-mail: 3284757626@qq.com
*   Description: 
*        Create: 2017-11-22 11:11:24
* Last Modified: 2017-11-22 14:18:29
************************************************/
#include<stdio.h>
void shellcode(void)
{
	printf("virus run success!\n");
	while(1);
}
int f(int argc, char *argv[])
{
	int a[4]; //欺骗编译器
	int tmp;
	FILE *fp;
	tmp = a[4]; //欺骗编译器
	fp = fopen(argv[1],"r+");
	if(fp==NULL)
	{
		printf("open virus.bin failed!\n");
		return -1;
	}
	fread(a,4,9,fp);
	//从fp 读取9个数据到a,每个数据的大小为4字节
	
	
//	a[6] = shellcode;
//	tmp = a[4];
//	a[4] = 3;
//	printf("a[6] = %d\n",a[6]);
	a[4] = tmp; //欺骗编译器
	fclose(fp);
}

int main(int argc, char * argv[])
{
	f(argc,argv);
	printf("hello world!\n");
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值