水文者羊咩咩是也,干啥啥不行水文第一名^_^。延续上一篇文章我又来了展现极弱的代码功底了。本次在原有代码的基础上添加了利用ico_hash来寻找真实ip的功能
脚本编写目的:完成一些简单的信息收集工作。
记录一个菜鸟的编程之路
MYscan
-dic.txt #子域名字典
-scan.py #起始文件
-nmapscan.py #端口扫描
-subdomain.py #子域名爆破
-cdnjudge.py #cdn判查
-fofa.py #fofa接口调用(PS:极度简单)
这次我将原本写在起始文件的cdn判断功能独立了出来,以对象的方式进行调用。
#!/usr/bin/python3
import socket
import sys
from nmapscan import *
from cdnjudge import *
from subdomain import *
'''
使用方法:
python3 scan.py url -all 使用全部功能
python3 scan.py url -cdn 查CDN
'''
#IP查询
def ip_check(url):
ip = socket.gethostbyname(url)
print('ip获取:')
print (url+'t'+'该网址IP为:'+ip)
print('--------------------------------------------------')
#程序入口
def main():
url = sys.argv[1]
check = sys.argv[2]
if check == '-all':
ip_check(url)
cd = cdnjudge(url) #cdn判断
cd.cdn_check()
nm = nmapscan(url) #端口扫描
nm.nmapscan_check()
su = subdomain(url) #子域名爆破
su.subdomain_check()
elif check == '-cdn':
cd = cdnjudge(url) #cdn判断
cd.cdn_check()
else:
print('请输入参数:')
if __name__ == '__main__':
main()
import json
import requests
import base64
import time
class fofa:
def __init__(self,url):
self.u = url
def search(self):
you_email = '' #fofa_邮箱
you_key = '' #fofa_key
#headers = {
# 'cookie': '',
#}
url = 'https://fofa.so/api/v1/search/all?email=%s&key=%s&size=20&page=1&qbase64='%(you_email,you_key) #调用的fofa-API参数设定
search_data_bs = str(base64.b64encode(self.u.encode("utf-8")), "utf-8") #将搜索内容转换为 base64
urls = url + search_data_bs #拼接请求地址
try:
result = requests.get(urls).content #发起请求并获取结果
except Exception as e:
pass
return json.loads(result) #以json解码后的结果返回查询
其思路,判断CDN->爬取ico链接->转化hash值->fofa搜索相关ip->对结果进行人工判断
import base64
import os
import requests
import re
from fofa import *
from lxml import etree
#cdn判定
class cdnjudge():
def __init__(self,url):
self.u = url
#采用nslookup执行结果进行返回ip解析数目判断
def cdn_check(self):
print("CDN判断")
ns = "nslookup "+self.u #利用nslookup做cdn判断
data = os.popen(ns,"r").read() #执行命令并且获取数据
#print(data) #输出执行结果
if data.count(".")>10: #cdn判断
print(self.u + 't' + "存在CDN!")
cdnjudge.ico_hash() #调用ico_hash()
else:
print(self.u + 't' + "不存在CDN!")
print('--------------------------------------------------')
# 黑暗引擎搜索.ico (hash值)
def ico_hash(self):
url = ['http://' + self.u, 'https://' + self.u] # 指定url
i = 0
while i < 2:
try:
response = requests.get(url=url[i]) # 发起请求
if response.status_code == 200: # 根据状态码判断网站是否能够正常访问
page_text = response.text # 获取响应数据
icourl = re.findall(r'" href="(.*?.ico)"', page_text) #正则匹配获取ico文件
if re.findall(r'http', icourl[i]):
icourls = icourl[i]
print("该网站的ico文件地址为: %s " % icourls)
else:
icourls = url[i] + icourl[i]
print("该网站的ico文件地址为: %s " % icourls)
# 利用fofa的ico_hash值转换功能,并且调用接口进行查询
s = (base64.b64encode(icourls.encode('utf-8'))).decode('utf-8') #对ico文件地址进行base64编码
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
}
url = "https://www.fofa.so/result?qbase64=%s" % s #赋值请求参数
r = requests.get(url=url, headers=headers) #发起请求
soup = etree.HTML(r.text) #将html转换成_Elementduixiang
result = soup.xpath('//*[@id="q"]/@value') #通过xpath表达式获取h1变迁中的文本
for hash in result:
print(hash)
#调用fofa搜索hash值
ff = fofa(hash) #自定义fofa接口调用
datas = ff.search()
print("根据fofa搜索的结果可稍微判断一下真实ip:")
for data in datas['results']: #遍历返回的json数据进行输出
print(data)
i = 2
else:
print('无法正常访问!')
i += 1
except Exception as err:
print("error:未找到ico文件!")
i = 2
print('--------------------------------------------------')
相关历史文章请后台留言。
正则参考资料:https://www.jb51.net/article/65286.htm
计算ico文件hash值脚本:https://blog.csdn.net/weixin_45859734/article/details/111087843
fofa接口参考资料:https://fofa.so/static_pages/api_he
END
本文始发于微信公众号(NOVASEC):信息收集之路—Python篇(2)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论