MENU

memcached反射放大的实现

@(高兴)当听到新反射方法出现时我是很兴奋的,尤其是知道了放大倍数可以上万倍,使得的更是兴奋,我从3.2日知道了memcached方法,从小伙伴那里得到了一个无法编译的源码之后便陷于寻找可用的memcached反射放大脚本,最后自己慢慢摸索参考其它反射源码自己制作了放大脚本和过滤脚本,这应该是我首个自己实现的反射放大脚本,通过它我也重新认识了一下反射放大的实现.

发包脚本的实现

在这之前除了自己实现过一个ovh的bypass从来没有自己做过其它任何脚本,这次同样也想直接拿到脚本,但是无奈几天过去只得到了一个gayhub上的nodejs实现和小伙伴给的无法编译的cpp源码(这份源码应该是c的,我不会c和c++可能是我看不出来它们的区别,但是可以确定里面很多地方和ntp反射源码一样),前天寻找脚本无果的时候便想自己实现,然后再去google搜了一下,看到一个博主写了一个博文,其中echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -q1 -u 127.0.0.1 11211使我灵光一闪,这就是payload啊,然后便想着可以用其他反射脚本改一个出来,于是便去看ntp反射源码,然后将ntp的payload替换成memcached的,字节由8字节改为15字节,编译没有任何错误,于是一个发包脚本就完成了

扫描和过滤的实现

有了发包脚本,扫描仍然是个问题,前几天看了下zmap官方仓库并没有memcached的探针,然后便搜了一下pkt探针的制作,发现pkt就是raw数据,于是便制作了memcached的pkt开始扫描全球ipv4,在这期间fork一份zmap源码添加了memcached的pkt准备向官方提交合并时发现,有人早了一天制作探针提交了合并,于是我便放弃了.
过了6个小时,zmap扫完了全球的ipv4,得到了一份1M左右的列表,于是便拿这份列表尝试了反射,第一次实践发现虽然确实有效果,但是没有任何威力,需要过滤,于是便开始想办法过滤.
在很久之前拿到了一个ntpchecker的过滤脚本,这份脚本我这里没有源码,我看不懂c只能简单的改下payload和其字节和端口,于是我开始寻找别人帮忙,然而找了一圈没有人会c或者说没有人愿意帮助我,暂时陷入僵局.
第二天早上检查我硬盘里所有的脚本,发现我有保存的ssdp过滤脚本,这是个php脚本,我之前用过一次,过滤了1天,威力和chargen差不多,于是我基本就没用过几次ssdp,于是便忘记了我还有一个ssdp过滤脚本.
现在过滤解决了,于是便开始了过滤,过滤用了半个小时左右,过滤后迫不及待的进行第二次测试.

威力极小

第二次我选择了aliyun的机器作为测试目标,开始后发现,ping就跳高一下就变回了正常的ping值,于是我又用一个香港的没有防御机器做测试,香港的机器确实被打死,然后我用ntp测试了aliyun的机器,这时aliyun的机器ping超时,这证明了发包机是没有问题的.
看新闻报道memcached放大倍数最低也有2k倍,这是我就陷入沉思当中,稍后重新过滤了列表再尝试了一次,仍然是同样情况.
之前的列表发到了loc,当我发现威力小的时候问了下帖子里一位dalao是怎么过滤的,为什么我过滤之后威力这么小,接着我去找了几个报道,看了下其中几个报道里抓到的数据包,然后loc的dalao回复了我,这时我恍然大悟,自己尝试构造了一个payload,然后再去拿aliyun机器尝试,当我输入指令之后刚敲回车aliyun的机器便ping超时了,同时发现dstat显示的上传速度已经超过了机器本身的带宽,然后我与发包机断开连接了(有一次榨干了机器所有带宽).

最后测试

修改后的代码我只给了2位比较熟而且信任的小伙伴,脚本给了一位loc的dalao,dalao用流量墙测试了反射倍数,粗略计算了一下大概是2000~4000倍之间,然而这仍然没有达到报道中说明的倍数,然后我又继续找了几个报道,其中一个报道里说明了实现步骤,发现和我实现方法的方法不一样,这应该也是我倍数为何这么小的原因,这一部分我还没有开始实现,暂时不说方法.

一个用php实现memcached的udp请求示例

过滤用的请求示例,一个大早我就在找如何发送raw数据,当时想的是把探针文件发出去,最后看别人的参考代码时发现可以发送hex数据,于是拿来改了下.

<?php
function discover($host, $timeout = 1) {
    $data = "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n";
    $socket  = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
    socket_connect($socket, $host, 11211);
    socket_send($socket, $data, strLen($data), 0);
    $buf = "";
    $from = "";
    $port = 0;
    @socket_recvfrom($socket, $buf, 1000, 0, $from, $port);
    socket_close($socket);
    return $buf;
    }

memcached的pkt探针

github上的那个合并请求应该很快会通过并合并,但是我发现他的pkt并不是最简化的探针,这个是我自己构造的那个,具体用哪个好我也不知道.
下载链接:https://github.com/shirakun/zmap/blob/master/examples/udp-probes/memcached_11211.pkt

最后编辑于: 2020 年 05 月 14 日
添加新评论

已有 26 条评论
  1. NutBurst! NutBurst!

    大概能猜到博主提到的新思路

    然而实战发现 很多memcached server能接受的单个set键值对大小都不到100000bytes

    怀疑报道写的5万倍放大系数是在特别配置的内网靶机上测的

    1. NutBurst! NutBurst!

      @NutBurst!另外一个问题是前期填充垃圾数据用的key会在发包的payload里复用

      用来注入垃圾数据的机器可能会因共用key而暴露给取证者

    2. @NutBurst!这个我也发现了,但是我认识的人确实有人能填充超过1M的,我也不知道怎么弄的.

    3. @NutBurst!填充时可以使用http代理,填充机器一开始就不用实名的就行
      还可以填充 a b c d这些别人经常用的key

    4. 小哥哥 小哥哥

      @NutBurst!博主,请问那个过滤的是怎么弄,找遍了各大论坛和搜索引擎都没找到,能否发个给我,或是告诉我个可以下载的地方。

    5. @小哥哥请参考下面给出的discover()

  2. WeiYuan WeiYuan

    博主博主,在OB的连接用户列表偶遇。(^-^)

    1. @WeiYuanWhat is OB

    2. WeiYuan WeiYuan

      @shirakunourbits 啊。难道说你没有把主机当盒子用。若是这样的话,大概是你的主机和别人共ip了

  3. 三次元 三次元

    模版很漂亮啊,买的吗?

    1. @三次元mirages,底部有链接

  4. baobao baobao

    博主你自己尝试构造了一个 payload是什么啊? 可以提供给我吗? 如果可以的话发我邮件一下, 感谢~我也研究了很久@(吐舌)

    1. @baobao提示:memcached的正常使用方法

    2. baobao baobao

      @shirakun那么博主,我也遇到你同样的问题~,列表里面大概3千多,返回字节大于800, 尝试使用阿里云都没有反应,看流量才84M左右@(哈哈)

    3. @baobao列表机器并非越多越好

  5. 好骚气的点击效果@(你懂的)

  6. 大佬怎么弄到py码啊ssl@(阴险)

    1. @2Broear我的几个小伙伴有生成py码权限,找到或者找不到就看缘分了,我大多数情况下不会生成py码发放.

  7. 大哥你这SSL站申请的证书邮件这块是不是人工审核的呀,我收到邮件后没注意看下面内容,当我点击审核后,发现邮箱不是我填写的那个,现在收不到邮件怎么整呀,在邮件中少了个VIP,然后现在收不到邮件,联系他们又没人回复,现在又无法重复申请

    1. @VIP尊享接收证书的邮箱是手工填写的邮箱
      验证邮箱是列出来的邮箱,验证邮箱仅作验证使用,并不会收到证书信息
      你可以重新签发

    2. @shirakun无法重签呀,昨天试了重签,提示啥来的,反正就是签不了,不知道是不是限制一个IP只能签一次

    3. @VIP尊享我没有做ip限制,错误时截图,然后打开控制台选择network内保存任意一条带salt=xxx的url发到我的邮箱.

  8. 之前被打了N次,现在换到阿里云还是日常被打,不过居然没炸_(:з」∠)_

  9. 。。。表示被打了N次,cap封包里面里面一堆11211大流量的mamcached ip

  10. 博主可以用钟馗之眼API写一个收集全网的脚本,这是我用python写的http://www.cnblogs.com/haq5201314/p/8495870.html

    1. @童话早就考虑过,这种机构扫到的质量不行,这种扫描机构的结果只有http代理是比我自己抓到的质量高

996.icu 996.icu