【逆向】栈溢出漏洞学习过程(一)通过字符串验证的简单程序分析

阅读: 评论:0

【逆向】栈溢出漏洞学习过程(一)通过字符串验证的简单程序分析

【逆向】栈溢出漏洞学习过程(一)通过字符串验证的简单程序分析

目录

前言:

1 准备程序

PS:翻车现场:

2 分析程序执行流程(栈溢出原理)

2.1 看代码中忘记的知识补充一下:

2.1.1 主函数中涉及的寄存器相关知识:

2.1.2 涉及到的指令

地址传送指令LEA

PTR

REP STOS 

int 3中断

段超越指令前缀

2.2 main函数中的初始化部分

2.3 scanf()函数部分

2.4 函数verify_password

2.5 回到主函数

2.6 回顾过程

3 思考利用方式

栈的存储结构     

字符数组的定义和使用

构造利用栈溢出

4 我的想法有:

4.1 修改字符串

4.2 接着向下溢出

4.2.1 首先我们要找到输出success的地址

4.2.2 准备十六进制编辑工具

4.2.3 检验结果

4.3 插入shellcode,也是覆盖EIP

4.3.1 编写shellcode

4.3.2 MessageBox函数 

MessageBox函数的调用方式

MessageBox函数的位置

完成整个调用汇编代码的编写

确定修改之后的程序的栈空间走向和EIP位置(即如何覆盖)

☆出现错误:地址不可读

☆问题排查

☆错误解决

☆总结:


 

 


前言:

学习帖子:

大致流程是跟着这篇帖子走下去的,还是比较适合萌新(自己)的。

过程中有些地方看不懂需要延伸的和自己的理解,写在了下面。因为自己真的是个小白,好多不明白的东西,╮(╯▽╰)╭ 。

1.准备程序

首先打开VC6.0或者其他编辑器codeblocks等,将如下代码编译成exe文件

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define PASSWORD "1234567"  //写入静态密码int verify_password(char *password)//确认密码是否输入正确
{int authenticated;char buffer[8];authenticated=strcmp(password,PASSWORD);strcpy(buffer,password);  //存在栈溢出的函数return authenticated;
}int main()
{int valid_flag=0;char password[1024];scanf("%s",password); //输入密码valid_flag=verify_password(password);if(valid_flag) //返回0代表正确,返回1代表错误{printf("incorrect password!n");}else{printf("successn");}//getchar();//暂停一下return 0;
}

一开始我选择使用的是codeblocks,运行程序结果如图:

通过观察代码可以知道,输入的数据是和定义的宏“1234567”对比的,显然当输入1234566时如下图,返回不正确的提示。

那么,当输入1234567时,可以看到程序返回了正确提示:

 

文章里讲到使用Debug编译器,大概指用debug模式下生成exe文件吧。

用OllyDbg打开刚刚编译好的exe程序如图:

接下来就是寻找主函数的入口了 ,也许是初次接触,我还是觉得这像是一门玄学。

F8(我的F8需要和Fn一起使用,比较麻烦,网上看到有教程,在开机时进入BIOS模式然后进行修改云云,我还是老老实实先点击界面的按钮吧)

==================================

PS:翻车现场:

在我使用了codeblocks编译生成的exe后,od打开程序,代码顺序流程和在VC6.0即博客中的完全不一样,找不到主函数了,

o(╥﹏╥)o,这是什么原因,

逼得我只按F7。

按了好几个轮回,都卡在直接输入了,还没看到main函数的影子然后就提示输入了,完了输入后 直接就返回结果结束了???什么情况,是我没有注意到main函数跳过去了吗?

==================================

本文发布于:2024-02-01 11:19:26,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170675756836234.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字符串   漏洞   过程   简单   程序
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23