修改函数返回地址

文章介绍了如何通过编写C语言代码利用栈溢出攻击技术,修改程序的返回地址以绕过密码认证。作者通过实例展示了如何控制程序执行流程,以及注意事项,强调仅用于教育目的。
摘要由CSDN通过智能技术生成

资源下载

【免费】突破密码认证程序(修改函数返回地址)资源-CSDN文库

资源内容

源码
/*****************************************************************************

      To be the apostrophe which changed "Impossible" into "I'm possible"!

             

POC code of chapter 2.3 in book "Vulnerability Exploit and Analysis Technique"



file name : stack_overflow_ret.c

author           : failwest 

date       : 2006.9.30

description    : demo show to redirect program execute flow via over run return address

                            in stack. specify the exactly fake return address in password.txt file

                            to bypass the authentication 

Noticed         : should be complied with VC6.0 and build into debug version 

version          : 1.0

E-mail           : failwest@gmail.com

             

       Only for educational purposes    enjoy the fun from exploiting :)

******************************************************************************/

#include <stdio.h>

#define PASSWORD "1234567"

int verify_password (char *password)

{

       int authenticated;

       char buffer[8];

       authenticated=strcmp(password,PASSWORD);

       strcpy(buffer,password);//over flowed here!    

       return authenticated;

}

main()

{

       int valid_flag=0;

       char password[1024];

       FILE * fp;

       if(!(fp=fopen("password.txt","rw+")))

       {

              exit(0);

       }

       fscanf(fp,"%s",password);

       valid_flag = verify_password(password);

       if(valid_flag)

       {

              printf("incorrect password!\n");

       }

       else

       {

              printf("Congratulation! You have passed the verification!\n");

       }

       fclose(fp);

}

流程

这个方法会比昨天写的方法更具有通用性

书接上回,我是用的是多个a进行一处操作。

如果怎加更多的字符的话将buffer[8]的字符会将authenticated、前栈帧和返回地址覆盖

此时NULL结束符authenticated和EBP一共19字符(9-11是authenticated,13-16是EBP,17-19是返回地址)。

当我输入19个a的时候

局部变量名

内存地址

偏移3的值

偏移2的值

偏移1的值

偏移0的值

buffer[0-3]

0x0019FB30

0x71(’q’)

0x71(’q’)

0x71(’q’)

0x71(’q’)

buffer[4-7]

0x0019fb34

NULL

0x71(’q’)

0x71(’q’)

0x71(’q’)

authenticated覆盖前

0x0019FF30

0x00

0x00 0x00 0x01

authenticated覆盖后

0x0019FF30

0x00

0x00

0x00

0x00

前栈帧EBP(覆盖前)

0x0019FAD8

0x00 0x12 0xFF

前栈帧EBP(覆盖后)

0x0019FAD8

0x61

0x61

0x61

0x61

返回地址(覆盖前)

0x0019FADC

0x00 0x40 0x10 0xE

返回地址(覆盖后)

0x0019FADC

0x00

0x61

0x61

0x61

返回地址是当前函数返回时重定向程序的代码。在函数返回的“retn”指令执行的时时候,栈顶元素正好是这个返回地址。“retn”指令会把这个弹入EIP寄存器,之后就会转跳执行。

这个地址本来是0x004010EB改成了0x00616161

那么我们可以把转跳转跳到登入成功的代码段,或者利用加入反弹shell来处理

这里直接输入地址不合适(转化可能会有问题),但是我们能直接修改文件的专挑地址

注意这里的地址

直接修改转跳就可以

反弹shell可以看看

vulnhub靶机Brainpan_vulnhub-brainpan-CSDN博客

异曲同工之妙

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

himobrinehacken

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

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

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

打赏作者

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

抵扣说明:

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

余额充值