利用修改邻接变量

本文介绍了一个C语言编程中的漏洞示例,涉及password验证函数中使用了易导致栈溢出的strcpy函数。作者通过演示如何利用缓冲区溢出修改`authenticated`变量,展示了如何绕过密码认证。内容适合教育目的,强调安全问题和代码审计。
摘要由CSDN通过智能技术生成

资源下载

【免费】突破密码认证程序(修改邻接变量)资源-CSDN文库

资源内容

源码
/*****************************************************************************
      To be the apostrophe which changed "Impossible" into "I'm possible"!            
POC code of chapter 2.2 in book "Vulnerability Exploit and Analysis Technique"
file name : stack_overflow_var.c
author           : failwest 
date       : 2006.9.20
description    : demo show nearby var overrun in stack
                       input 8 letters to bypass authentication 
Noticed         : complied with VC6.0 and build into begug 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];// add local buff
       authenticated=strcmp(password,PASSWORD);
       strcpy(buffer,password);//over flowed here!    
       return authenticated;
}
main()
{
       int valid_flag=0;
       char password[1024];
       while(1)
       {
              printf("please input password:       ");             
              scanf("%s",password);            
              valid_flag = verify_password(password);            
              if(valid_flag)
              {
                     printf("incorrect password!\n\n");
              }
              else
              {
                     printf("Congratulation! You have passed the verification!\n");
                     break;
              }
       }
}

其实是对上一个文章的源码修改

请注意一下的两个修改

(1)verify_passowrd()函数的局部变量buffer[8]

(2)字符比较后strcpy(buffer,password)这个函数时c语言的高危函数,很容易出现栈溢出

流程

密码还是1234567

这里直接用动态调试就可以

这里是呢我那个看到分支的

直接运行一下

当我们输入的密码不正确的时候strcmp应该返回1(authenticated是1)

局部变量名

内存地址

偏移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

局部变量名

内存地址

偏移3的值

偏移2的值

偏移1的值

偏移0的值

buffer

0x0019FB30

0x71(’q’)

0x71(’q’)

0x71(’q’)

0x71(’q’)

0x0019fb34

NULL

0x71(’q’)

0x71(’q’)

0x71(’q’)

authenticated覆盖前

0x0019FF30

0x00

0x00 0x00 0x01

authenticated覆盖后

0x0019FF30

0x00

0x00

0x66(‘f’)

0x64(‘d’)

已知溢出之后能修改authenticated,那我们只需将数据溢出到buffer的边界那么这段溢出数据刚好就可以将authenticated修改成0

但是

此时是-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

himobrinehacken

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

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

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

打赏作者

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

抵扣说明:

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

余额充值