文章目录
- 引言
- memcache的安装
- memcached 的简单使用
- memcached 未授权访问的漏洞验证方法
- 未授权访问的漏洞修复方案, 如何进行安全加固操作
- 小结
引言
介绍:
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
内存存储的主要目的:
通过缓存数据库查询结果, 减少数据库访问次数, 提高web应用次数。
与redis比较
看描述,memcached和redis有一点相似,那么, 这两个中间件有什么区别呢, 孰优孰劣?主要区别有如下几点:
相同点:
都是将数据存放在内存中
不同点:
- memcached可以存储图片,视频等数据。
- redis可以存储list, set, zset, hash, 但是memcache只支持简单的数据类型。
- redis只使用单核, memcached可以使用多核。 redis适合存储小数据, memcache适合存储大数据。
笔者在学习中关注的点:
- memcached的功能以及一般业务的使用场景
- memcached 未授权访问的漏洞验证方法
- 未授权访问的漏洞修复方案, 如何进行安全加固操作
主要的参考文档。
memcache的安装
- 说明: 这是基于欧拉操作系统
核心步骤如下:
yum install libevent libevent-devel
wget http://memcached.org/latest
tar -zxvf latest
cd memcached-1.6.15/
./configure --prefix=/usr/local/memcached
make && make test
make install
- 启动命令:
只监听本地
memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
全网监听
memcached -d -m 1024 -u root -l 0.0.0.0 -p 11211 -c 1024 -P /tmp/memcached.pid
memcached 的简单使用
- 简单了解功能即可
存数据:
key → runoob
flag → 0
exptime → 900 (以秒为单位)
bytes → 9 (数据存储的字节数)
value → memcached
set runoob 0 900 7
memcach
STORED
注意: 存储的字节数一定要完全一致, 否则会失败。
取数据:
get runoob
- java代码连接memcached
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
public static void main(String[] args) {
try{
// 连接本地的 Memcached 服务
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("Connection to server successful.");
// 存储数据
Future fo = mcc.set("runoob", 900, "Free Education");
// 查看存储状态
System.out.println("set status:" + fo.get());
// 输出值
System.out.println("runoob value in cache - " + mcc.get("runoob"));
// 关闭连接
mcc.shutdown();
}catch(Exception ex){
System.out.println( ex.getMessage() );
}
}
}
查看状态:
stats
memcached 未授权访问的漏洞验证方法
命令: (3种方法)
1. telnet <ip> <port>
2. nc-vv<target>11211,提示连接成功表示漏洞存在。
3. 使用端口扫描工具nmap进行远程扫描:nmap -sV -p 11211 –script memcached-info <target>
笔者在手工验证这个漏洞的过程中, 一开始是在windows操作系统中用telnet命令验证的, 结果发现命令卡住,执行不成功, 以为没有漏洞;但是在linux操作系统中验证是没有问题的。 memcached这个中间件本身没有认证功能,存在安全设计缺陷, 从安全角度考虑, 还是需要严格访问控制的。
未授权访问的漏洞修复方案, 如何进行安全加固操作
有两种方式:
- 通过iptables 方式限制只允许这些网段访问 memcached 端口。
- 通过安全组的方式限制只允许这些网段访问 memcached 端口