当前位置:首页>python>用Python自动化漏洞狩猎,打造专属工具,让狩猎速度提升10倍!

用Python自动化漏洞狩猎,打造专属工具,让狩猎速度提升10倍!

  • 2026-06-30 08:06:06
用Python自动化漏洞狩猎,打造专属工具,让狩猎速度提升10倍!

官网:http://securitytech.cc

今天学什么?

  • 漏洞赏金的 Python 基础知识——快速回顾
  • 针对HTTP请求发起攻击
  • 创建自定义的IDOR扫描器
  • 创建子域名暴力破解工具
  • 创建API密钥暴露扫描器
  • 多线程速度提升10倍
  • 完整的重建自动化流水线

为什么一定要这么做? 手动测试 = 慢 = 缺少漏洞!Python自动化 = 10倍速度 = 10倍漏洞 = 10倍赏金!顶尖猎手们会开发自己的定制工具,去挖掘那些通用工具遗漏的细节!这是高级系列的第一篇文章,从今以后,我们不仅要做猎手,还要成为工具开发者

为什么我的漏洞赏金是Python?

  1. 通用工具(NucleiSubfinder等):
  2. 所有猎人都拥有
  3. 相同结果=重复风险 zyada
  4. 无法自定义逻辑,我的Python工具:
  5. 只有你才有!
  6. 自定义逻辑=独特的漏洞!
  7. 针对特定目标进行优化
  8. 多种技术串联起来
  9. 可以集成AI!真正差异:
  10. 100个猎人核心正在狩猎=相同结果
  11. 1款猎人定制Python工具,挑战来袭!=独一无二!Python=漏洞赏金的秘密武器!🐍

第一部分:设置环境,准备Karo

  1. # 检查 Python 3.10+:
  2. python3 --version# 创建虚拟环境(最佳实践!):
  3. python3 -m venv bugbounty_env
  4. 来源 bugbounty_env/bin/activate
  5. # Windows: bugbounty_env\Scripts\activate# 一次性安装必备库:
  6. pip 安装 requests \
  7. httpx \
  8. aiohttp \
  9. BeautifulSoup4
  10. lxml \
  11. 颜色ama \
  12. 丰富的
  13. tqdm \
  14. python-dotenv \
  15. argparse# 验证安装:
  16. python3 -"import requests, colorama, rich; \
  17. print('✅ 所有库已就绪!') 

第二部分:HTTP请求基础 学习一下

基本请求:

  1. import requests# ─── GET请求 ──────────────────────────
  2. = requests.get("https://target.com/api/user")
  3. print(r.status_code)# 200、401、403、500……
  4. print(r.text)# 完整响应体
  5. print(r.json())# JSON解析(如果为JSON格式)
  6. print(r.headers)# 响应头
  7. print(r.cookies)# Cookies# ─── 带参数的GET请求 ──────────────────
  8. 参数={"id":"1001","format":"json"}
  9. = requests.get(
  10. https://target.com/api/user”,
  11. 参数=参数
  12. )
  13. # 最终URL:/api/user?id=1001&format=json# ─── 使用JSON的POST请求──────────────────────
  14. 数据={"用户名":"admin","密码":"test123"}
  15. = requests.post(
  16. https://target.com/login”,
  17. json=数据,# 自动内容类型:JSON
  18. 超时=10
  19. )#───包含头信息与Cookie的完整请求──
  20. 头部={
  21. “授权”:Bearer YOUR_JWT_TOKEN”,
  22. “用户代理”:Mozilla/5.0(X11;Linux x86_64)
  23. X-Forwarded-For”:“127.0.0.1
  24. }
  25. cookies ={"session":"ABC123XYZ"}= requests.get(
  26. https://target.com/api/dashboard”
  27. headers=headers,
  28. 饼干=饼干,
  29. verify=False,# 跳过SSL检查(仅用于测试!)
  30. 超时=10
  31. 允许重定向=True
  32. )

会话对象 Cookie 自动管理:

  1. import requests# 会话 = 登录一次——所有请求都用这个会话
  2. # 自动化Cookie保持!session = requests.Session()# 第一步:登录
  3. 会话.post(
  4. https://target.com/login”,
  5. json={"用户":"attacker@test.com",
  6. “密码”:mypassword123”}
  7. )
  8. # ✅ 会话Cookie自动保存!# 第二步:经过身份验证的请求——Cookie自动附加!
  9. r1 =会话.get("https://target.com/api/profile/1002")
  10. r2 =会话.get("https://target.com/api/invoices/9876")
  11. r3 = session.get("https://target.com/api/messages/555")print(r1.text)# 受害者个人资料——IDOR测试!
  12. print(r2.text)# 受害者的发票! 
  13. print(r3.text)# 私密消息!# ─── Requests 忽略 SSL 警告 ─────────
  14. 导入urllib3
  15. urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

第三部分:打造属于你的自定义IDOR扫描器!

  1. #!/usr/bin/env python3
  2. """
  3. IDOR扫描器v2.0 — HackerMD
  4. 测试数字 + UUID ID 参数  

python import requests

  1. 导入 json
  2. 导入时间
  3. 来自coloramaForeStyleinit
  4. import urllib3urllib3.disable_warnings()
  5. init(autoreset=True)类IDORScanner:
  6. def __init__(self, base_url, token,
  7. 我的IDID范围=(1,200),
  8. 延迟=0.1):
  9. self.base_url = base_url
  10. self.my_id = my_id
  11. self.id_range = id_range
  12. self.delay =延迟
  13. self.session = requests.Session()
  14. self.session.headers.update({
  15. “授权”: fBearer{token}”,
  16. “用户代理”:Mozilla/5.0
  17. })
  18. self.session.verify =False
  19. self.脆弱=[]
  20. self.errors =0def get_baseline(self):
  21. 获取你的数据——基线长度
  22. 尝试:
  23. =self.session.get(
  24. f"{self.base_url}/{self.my_id}",
  25. 超时=10
  26. )
  27. 返回 r.status_code, len(r.text)
  28. Exception以外:
  29. print(f"{Fore.YELLOW}⚠️ 基线错误:{e}")
  30. 返回空值,0def test_single_id(self, test_id, base_len):
  31. “测试单个ID
  32. 尝试:
  33. =self.session.get(
  34. f"{self.base_url}/{test_id}",
  35. 超时=10
  36. )# 200 + 长度显著不同
  37. # = 可能是不同用户的数据!
  38. 长度差= abs(len(r.text)-基线长度)如果 r.status_code ==200长度差>30
  39. 返回{
  40. id:测试ID
  41. “状态”:r.status_code
  42. “长度”:len(r.text),
  43. “差异”:长度差异,
  44. “预览”:r.text[:150]
  45. }
  46.  requests.exceptions.Timeout之外:
  47. self.errors +=1
  48. 除了Exception作为 e
  49. self.errors +=1
  50. 返回空def扫描(self):
  51. 打印(f"
  52. {Fore.CYAN}╔══════════════════════════════╗)
  53. print(f"{Fore.CYAN}║   IDOR扫描器HackerMD")
  54. print(f"{Fore.CYAN}╚══════════════════════════════╝")
  55. 打印(f"目标:{self.base_url}") 
  56. print(f"我的ID   :{self.my_id}") 
  57. print(f"范围:{self.id_range[0]}–{self.id_range[1]}")
  58. print(f"延迟:{self.delay}秒")
  59. print("" * 40)        # 基线
  60. 基础状态,基础长度 = 自我获取基线() 
  61. 如果基础状态不存在: 
  62. print(f"{Fore.RED}❌无法连接目标!") 
  63. 返回        打印(f"基准:{base_status}|{base_len}字节")
  64. )        # 扫描卡罗
  65. 总和 = self.id_range[1] - self.id_range[0]
  66. 对于 i,测试 ID in enumerate(
  67. 范围(self.id_range[0], self.id_range[1]+1)
  68. ):
  69. 如果 test_id == self.my_id:
  70. 继续            # 进度条
  71. 进度 = int((i / 总数) * 30)
  72. bar = “█” * 进度 + “░” * (30 - 进度)
  73. 百分比 = 整数((i / 总数) × 100)
  74. print(f"\r{Fore.CYAN}[{bar}]{pct}%|")
  75. f"测试ID:{test_id}",
  76. end="", flush=True)            result = self.test_single_id(
  77. 测试ID,基础长度
  78. )            如果结果:
  79. 打印(f"
  80. {Fore.RED}🔴可能存在IDOR!)
  81. print(f"   ID      : {result['id']}")
  82. print(f"   状态  : {result['status']}")
  83. print(f"   长度  : {result['length']}")
  84. f"(差值:{result['diff']})")
  85. 打印(f"   预览:"
  86. f"{result['preview'][:80]}...” 
  87. self.vulnerable.append(result)            time.sleep(self.delay)        # 总结
  88. 打印(f"
  89. {'─'*40}
  90. print(f"✅ 扫描完成!")
  91. 打印(f"   测试:{total} 个ID")
  92. 打印(f"   找到   : "
  93. f"{Fore.RED}{len(self.vulnerable)}"
  94. “{Style.RESET_ALL}潜在的IDOR
  95. print(f"   错误  : {self.errors}")# 保存结果
  96. 如果self.脆弱:
  97. 输出文件=idor_results.json
  98. with open(out_file,"w")as f:
  99. json.dump(self.vulnerable, f, indent=2)
  100. print(f"   已保存   : {out_file}")returnself.vulnerable# ─── 使用方法 ────────────────────────────────
  101. 如果 __name__ =="__main__":
  102. 扫描仪= IDOR扫描仪(
  103. base_url ="https://target.com/api/v1/invoices",
  104. 令牌=“您的认证令牌在这里”,
  105. 我的ID     =1050
  106. id_range =(1000,1150),
  107. 延迟=0.1# 用于避免速率限制!
  108. )
  109. 扫描仪.扫描()

第4部分:多线程子域名爆破工具!

  1. #!/usr/bin/env python3
  2. """
  3. 子域名暴力破解器 v2.0 — HackerMD
  4. 快速多线程子域名发现

python import requests

  1. 导入线程
  2. 来自队列的队列
  3. 来自coloramaForeStyleinit
  4. 导入时间
  5. 导入 jsonurllib3 已导入=False
  6. 尝试:
  7. 导入urllib3
  8. 禁用 urllib3 警告
  9. urllib3已导入=True
  10. 除了:
  11. passinit(autoreset=True)类子域名爆破器:
  12. def __init__(self, domain, wordlist_path,
  13. 线程数=50,超时=5
  14. self.domain        =域名
  15. self.wordlist =self.load_wordlist(wordlist_path)
  16. self.threads = threads
  17. self.timeout       =超时
  18. self.queue =Queue()
  19. self.found         =[]
  20. self.lock= threading.Lock()
  21. self.checked=0
  22. self.total = len(self.wordlist)
  23. self.start_time =Nonedef load_wordlist(self, path):
  24. 尝试:
  25. with open(path,"r", errors="ignore")as f:
  26. words =[line.strip()for line in f]
  27. 如果行.strip()]
  28. print(f"✅ 词表已加载:{len(words)} 个词")
  29. 返回单词
  30. 除了FileNotFoundError
  31. print(f"❌ 未找到字典文件:{path}")
  32. # 默认小列表
  33. 返回[
  34. www”、“mail”、“ftp”、“admin”、“api”,
  35. “开发”、“测试”、“预发布”、“beta”、“旧版”,
  36. 应用、门户、仪表板、安全、
  37. vpn”、“内部”、“备份”、“cdn”、“博客”,
  38. 商店、店铺、支持、文档、Git
  39. ]def check_subdomain(self, subdomain):
  40. “检查单个子域名”
  41. url = f"https://{子域名}.{self.domain}"
  42. 尝试:
  43. = requests.get(
  44. 网址,
  45. 超时=self.超时,
  46. 验证=False
  47. 允许重定向=True
  48. )
  49. 使用self.lock
  50. self.found.append({
  51. “子域名”:f"{子域名}.{self.domain}",
  52. “状态”r.status_code
  53. “长度”:len(r.text),
  54. “服务器”: r.headers.get(
  55. “服务器”,“未知”
  56. ),
  57. url: url
  58. })# 按状态码着色:
  59. 如果 r.status_code ==200
  60. 颜色=前景.绿色
  61. 如果 r.status_code [301,302]中:
  62. 颜色=前景.黄色
  63. 如果 r.status_code ==403
  64. 颜色=Fore.RED
  65. 否则:
  66. 颜色=前景.青色打印(
  67. “{color}🔴[{r.status_code}]”
  68. “{subdomain}.{self.domain}
  69. f"({r.headers.get('Server','')})"
  70. )except requests.exceptions.ConnectionError:
  71. 通过# 子域名不存在
  72. 除了异常:
  73. 通过
  74. 最后:
  75. 使用self.lock
  76. self.checked+=1def worker(self):
  77. “线程工作者”
  78. 无限循环:
  79. 子域名=self.queue.get()
  80. 如果子域名为空:
  81. 中断
  82. self.check_subdomain(子域名)
  83. self.queue.task_done()def progress_monitor(self):
  84. “进度显示线程”
  85. self.checked<self.total 时:
  86. 百分比=整数((已选/总数)×100)
  87. 已用时=当前时间-自我开始时间
  88. 速度=自我检查/最大(已用时,1
  89. 打印(
  90. f"\r{Fore.CYAN}进度:{pct}% | "
  91. f"已检查:{self.checked}/{self.total} | "
  92. f"已找到:{len(self.found)} | "
  93. f"速度:{speed:.0f}/秒    ",
  94. end="", flush=True
  95. )
  96. time.sleep(0.5)def run(self):
  97. 打印(f"
  98. {Fore.CYAN}╔═══════════════════════════════╗")
  99. print(f"{Fore.CYAN}║  子域名爆破器 — HackerMD  ║")
  100. print(f"{Fore.CYAN}╚═══════════════════════════════╝")
  101. 打印(f"域名:{self.domain}")
  102. print(f"单词数量:{len(self.wordlist)}")
  103. 打印(f"线程:{self.threads}")
  104. print("─"*42)self.start_time = time.time()# 启动工作线程
  105. 线程列表=[]
  106. 对于 _ self.线程范围内:
  107. =线程.Thread(target=self.worker,
  108. 守护进程=True)
  109. t.start()
  110. 线程列表.append(t)# 填充队列
  111. 对于单词in自我单词列表:
  112. self.queue.put(word)# 停止信号
  113. 对于 _ self.线程范围内:
  114. self.queue.put(None)# 等待
  115. 对于线程列表中的每个t
  116. t.join()经过时间=时间.time()-self.start_time        # 结果
  117. 打印(f"
  118. {'─' * 42} 
  119. print(f"完成!耗时:{elapsed:.1f}秒")
  120. print(f"🔴找到:{len(self.found)}个子域名
  121. ”)# 按状态排序
  122. self.found.sort(key=lambda x: x["status"])
  123. 对于 s self.found 中:
  124. print(f"  [{s['status']}] {s['subdomain']}")# 保存
  125. with open(f"subs_{self.domain}.txt","w")as f:
  126. 对于 s self.found 中:
  127. f.write(
  128. f"{s['子域名']} "
  129. f"[{s['status']}]
  130. )        with open(f"subs_{self.domain}.json", "w") as f:
  131. json.dump(self.found, f, indent=2)        print(f"
  132. 💾已保存:subs_{self.domain}.txt
  133. 返回self.found# ─── 用法 ────────────────────────────────
  134. 如果 __name__ =="__main__":
  135. bruter =子域名爆破器(
  136. 域名=target.com”,
  137. 词汇表路径=(
  138. “/usr/share/wordlists/SecLists/”
  139. 发现/DNS/
  140. 顶级百万子域名-5000.txt
  141. ),
  142. 线程=100
  143. 超时=4
  144. )
  145. 布鲁特.运行()

第5部分:秘密扫描器JS文件,我的秘密!

  1. #!/usr/bin/env python3
  2. """
  3. 秘密扫描器 v2.0 — HackerMD
  4. JS/配置文件中的API密钥、令牌和密钥

python import requests

  1. 导入正则表达式
  2. 导入 json
  3. 来自coloramaForeinitinit(autoreset=True)
  4. requests.packages.urllib3.disable_warnings()#───秘密正则表达式模式────────────────
  5. 模式={
  6. AWS访问密钥”:r"AKIA[0-9A-Z]{16}"
  7. AWS密钥”: r"(?i)aws.{0,20}secret.{0,20}['\"][0-9a-zA-Z/+]{40}['\"]",
  8. GitHub令牌”: r"ghp_[0-9a-zA-Z]{36}",
  9. GitHubClassic”:r"github_pat_[0-9a-zA-Z_]{82}”
  10. “Google API密钥”:r"AIza[0-9A-Za-z\-_]{35}", 
  11. “Stripe密钥”:r"sk_live_[0-9a-zA-Z]{24,}", 
  12. “Stripe 发布”:r"pk_live_[0-9a-zA-Z]{24,}
  13. “Slack 令牌”      : r"xox[baprs]-[0-9a-zA-Z\-]{10,48}",
  14. “Twilio SID”       : r"AC[a-zA-Z0-9]{32}",
  15. “SendGrid密钥”:r“SG\.[a-zA-Z0-9\-_]{22}\.[a-zA-Z0-9\-_]{43}”, 
  16. “Firebase URL”:r"https://[a-z0-9-]+\.firebaseio\.com",
  17. JWT 令牌”: r"eyJ[A-Za-z0-9\-_=]+\.[A-Za-z0-9\-_=]+\.?[A-Za-z0-9\-_.+/=]*",
  18. “私钥”: r"-----BEGIN (?:RSA |EC )?PRIVATE KEY",
  19. “数据库连接”:r"(?:mysql|postgres|mongodb|redis|mssql)://[^\s\"'<>]+"
  20. “通用密钥”:r"(?i)(?:secret_key|api_key|apikey|access_token|auth_token)\s*[=:]\s*['\"]([^'\"]{10,})['\"]"
  21. “通用密码”:r"(?i)(?:password|passwd|pwd)\s*[=:]\s*['\"]([^'\"]{6,})['\"]",
  22. }#───敏感文件路径──────────────────
  23. 敏感路径=[
  24. /.env、/.env.local、/.env.production
  25. /.env.backup、/config.js、/config.json
  26. “/settings.py”、“/app.js”、“/main.js”,
  27. “/bundle.js”,“/webpack.config.js”,
  28. “/api/config”,“/api/settings”,
  29. /.git/config,/web.config
  30. “/phpinfo.php”,“/info.php”,
  31. “/server-status”,“/server-info”,
  32. “/actuator/env”,“/actuator/configprops”,
  33. “/api/v1/config”,“/api/v2/config”,
  34. ]类SecretScanner:
  35. def __init__(self, domain):
  36. self.domain = domain
  37. self.base_url = f"https://{domain}"
  38. self.session = requests.Session()
  39. self.session.verify =False
  40. self.session.headers.update({
  41. “用户代理”:Mozilla/5.0(X11;Linux x86_64)
  42. })
  43. self.findings =[]
  44. self.js_urls =[]def extract_js_urls(self):
  45. “从主页获取JS文件URL
  46. 尝试:
  47. =self.session.get(
  48. self.base_url,超时=10
  49. )
  50. # src="..." 模式
  51. 模式= r'src=["\']([^"\']*\.js(?:\?[^"\']*)?)["\']'
  52. 匹配项= re.findall(模式, r.text)对于 m 在匹配项中:
  53. 如果 m 以“http”开头:
  54. self.js_urls.append(m)
  55. 如果 m 以“//”开头:
  56. self.js_urls.append(f"https:{m}")
  57. elif m.startswith("/"):
  58. self.js_urls.append(
  59. f"{self.base_url}{m}"
  60. )print(f"✅ 找到 {len(self.js_urls)} 个 JS 文件")
  61. 除了Exception作为 e
  62. print(f"❌ 提取JS时出错:{e}")def scan_content(self, content, source):
  63. “在内容中寻找秘密”
  64. 已找到此处=[]
  65. 对于 secret_type, pattern in PATTERNS.items():
  66. 匹配= re.findall(模式,内容)
  67. 对于比赛中的每场比赛:
  68. =匹配如果 isinstance(匹配, str) \
  69. 否则返回 match[0],如果 match 为空则返回空字符串。
  70. 如果长度大于等于8
  71. 查找={
  72. “类型”:密钥类型,
  73. “值”:val[:60]+(“…”if len(val)>60else“”),
  74. “来源”:来源
  75. }
  76. 如果未在self.findings中找到:
  77. self.findings.append(发现)
  78. 已找到的添加到此处.append(发现)
  79. 打印(
  80. f"  {Fore.RED}🔴 {secret_type}"
  81. f
  82. {val[:55]}...
  83. )
  84. 返回已找到def扫描_js文件(self):
  85. 扫描所有JS文件
  86. 打印(f"
  87. {Fore.YELLOW}[2/3] 正在扫描JS文件...)
  88. 对于 self.js_urls 中的每个 URL:# 最多 20 个文件
  89. 尝试:
  90. r = self.session.get(url, timeout=8)
  91. 文件名 = URL.split("/")[-1].split("?")[0] 
  92. print(f"检查:{fname[:40]}") 
  93. self.scan_content(r.text, url)
  94. 除了:
  95. 通过    def scan_sensitive_paths(self):
  96. “检查敏感路径” 
  97. 打印(f"
  98. {Fore.YELLOW}[3/3]正在扫描敏感路径...
  99. 对于路径in敏感路径:
  100. url = f"{self.base_url}{path}"
  101. 尝试:
  102. =self.session.get(
  103. 网址,超时=5
  104. 允许重定向=False
  105. )
  106. 如果 r.status_code ==200
  107. 大小= len(文本)
  108. 打印(
  109. f"  {Fore.GREEN}✅ [200] "
  110. “{path}({size}字节)”
  111. )
  112. self.scan_content(r.text, url)# .env 是否泄露? 
  113. 如果路径中包含“.env”且大小大于10
  114. 打印(
  115. f"  {Fore.RED}🔴🔴 "
  116. f“.ENV文件已暴露!{url}”
  117. )
  118. 除了:
  119. 传递def run(self):
  120. 打印(f"
  121. {Fore.CYAN}╔══════════════════════════════╗)
  122. print(f"{Fore.CYAN}║密码扫描器HackerMD")
  123. print(f"{Fore.CYAN}╚══════════════════════════════╝")
  124. 打印(f"目标:{self.domain}")
  125. )        print(f"{Fore.YELLOW}[1/3]提取JS文件...") 
  126. self.extract_js_urls()
  127. self.scan_js_files()
  128. self.scan_sensitive_paths()        # ─── 最终报告 ─────────────────
  129. 打印(f"
  130. {'─'*42}**
  131. print(f"✅ 扫描完成!")
  132. print(f"   找到的密钥:"
  133. f"{Fore.RED}{len(self.findings)}")如果self.findings:
  134. out= f"secrets_{self.domain}.json"
  135. with open(out,"w")as f:
  136. json.dump(self.findings, f, indent=2)
  137. print(f"   已保存:{out}")# 按类型汇总
  138. 打印(f"
  139. {Fore.RED}📋 摘要:) 
  140. 类型 = {}
  141. 对于 f_item in self.findings:
  142. t = f_item["类型"]
  143. types[t] = types.get(t, 0) + 1
  144. 对于 t,计数 in types.items():
  145. print(f"{t}:{count}")        return self.findings# ─── 使用方法 ────────────────────────────────
  146. 如果 __name__ == "__main__":
  147. 导入系统
  148. 域名 = sys.argv[1] 如果 len(sys.argv) > 1 \
  149. 否则“target.com”
  150. 扫描器 = 秘密扫描器(域名)
  151. 扫描仪运行()

第6部分:异步扫描速度提升10倍!

  1. #!/usr/bin/env python3
  2. """
  3. 异步URL扫描器 — HackerMD
  4. aiohttp 10倍速并行扫描

python import asyncio

  1. 导入aiohttp
  2. 导入 json
  3. 导入时间
  4. from colorama importFore, initinit(autoreset=True)asyncdef check_url(session, url, semaphore):
  5. “单URL异步检查”
  6. 异步使用信号量:
  7. 尝试:
  8. 异步与会话.get(
  9. 网址,
  10. 超时=aiohttp.ClientTimeout(总超时=6),
  11. ssl=False
  12. 允许重定向=False
  13. )作为回应:
  14. 文本=await resp.text(
  15. 错误="忽略"
  16. )
  17. 返回{
  18. url: url,
  19. “状态”:resp.状态,
  20. “长度”:len(文本),
  21. “服务器”:resp.headers.get(
  22. “服务器”,“”
  23. ),
  24. “标题”:文本[
  25. text.find("<title>")+7
  26. 文本.find("</title>")
  27. [:60]如果“<title>”在文本中,则返回;否则返回空字符串。
  28. }
  29. 除了:
  30. 返回Noneasyncdef async_scan(urls, max_concurrent=150
  31. 仅限有趣=True):
  32. “并行扫描所有URL信号量= asyncio.Semaphore(最大并发数)
  33. 连接器= aiohttp.TCPConnector(
  34. 限制=最大并发,SSL=False
  35. )
  36. 结果=[]打印(f"
  37. {Fore.CYAN}╔══════════════════════════════╗)
  38. print(f"{Fore.CYAN}║异步扫描器HackerMD")
  39. print(f"{Fore.CYAN}╚══════════════════════════════╝")
  40. print(f"URLs:{len(urls)}")
  41. 打印(f"并发:{max_concurrent}") 
  42. print("" * 42)    开始 = 时间.time()    异步 with aiohttp.ClientSession(
  43. 连接器=连接器,
  44. headers={"User-Agent": "Mozilla/5.0"}
  45. ) 作为会话:
  46. 任务 = [
  47. 检查URL(会话,URL,信号量)
  48. 对于url in urls
  49. ]
  50. responses = await asyncio.gather(
  51. *任务,返回异常=True
  52. )    for resp in responses:
  53. 如果 resp 为空或 resp 是异常类型: 
  54. 继续        状态 = 响应["状态"]
  55. 如果仅限有趣且 \
  56. 状态不在 [200, 301, 302, 403] 中:
  57. 继续        results.append(响应)        # 按状态着色:
  58. 如果状态码等于200:
  59. 颜色 = 前景.绿色
  60. 如果状态码为403:
  61. 颜色 = Fore.RED
  62. 如果状态在[301, 302]中:
  63. 颜色 = 前景.黄色
  64. 否则:
  65. 颜色 = 红色.青色        打印(
  66. “{color}[{status}] ”
  67. f"{resp['length']:6d}字节|"
  68. f"{resp['url']}"
  69. + (f"|{resp['title']}")
  70. 如果 resp['title'] 不存在,则返回空字符串
  71. )    经过时间 = 时间.time() - 开始
  72. 速度 = URL数量 / 最大(已用时,0.1)    print(f"
  73. {'─'*42}
  74. print(f"✅ 完成!耗时:{elapsed:.2f}秒 | ")
  75. f"速度:{speed:.0f} 请求/秒")
  76. print(f"找到:{len(results)} 个有趣的URL")return results# ─── 使用方法 ────────────────────────────────
  77. 如果 __name__ =="__main__":
  78. 基础=https://target.com”
  79. 路径=[
  80. “/admin”、“/api/v1/users”、“/dashboard”,
  81. /.env、/.git/HEAD、/swagger.json
  82. “/api-docs”、“/actuator”、“/debug
  83. “/config”、“/backup”、“/phpinfo.php”,
  84. “/api/v2/users”,“/internal/admin
  85. “/api/v1/config”,“/api/health”,
  86. ]
  87. urls =[f"{BASE}{p}"for p in PATHS]    results = asyncio.run(
  88. 异步扫描(urls,最大并发=100)
  89. )# 保存
  90. with open("async_results.json","w")as f:
  91. json.dump(结果, f,缩进=2)

第7部分:完成侦察管道,萨布组合!

  1. #!/usr/bin/env python3
  2. """
  3. 完整侦察流程 v2.0 — HackerMD
  4. 通过命令实现全面的侦察自动化! 

python import subprocess

  1. 导入 requests
  2. 导入 json
  3. 导入 os
  4. 导入 asyncio
  5. 导入aiohttp
  6.  datetime  import datetime
  7. 来自coloramaForeinitinit(autoreset=True)
  8. requests.packages.urllib3.disable_warnings()类ReconPipeline:
  9. def __init__(self, domain):
  10. self.domain =  domain
  11. self.ts         = datetime.now().strftime(
  12. “%Y%m%d_%H%M
  13. )
  14. self.out_dir = f"recon_{domain}_{self.ts}"
  15. os.makedirs(self.out_dir, exist_ok=True)
  16. self.session = requests.Session()
  17. self.session.verify =False
  18. self.results ={
  19. “域名”:域名,
  20. “时间戳”:self.ts
  21. “子域名”:[],
  22. live_hosts”:[]
  23. “秘密”:[]
  24. “有趣”:[],
  25. “技术”:[]
  26. }def run_cmd(self, cmd, timeout=60):
  27. “运行Shell命令”
  28. 尝试:
  29. 输出=子进程.run(
  30. 命令,shell=True
  31. 捕获输出=True
  32. 文本=真,超时=超时
  33. )
  34. 返回out.stdout.strip()
  35.  subprocess.TimeoutExpired以外:
  36. 返回“”
  37. 除了异常:
  38. 返回“”# ─── 第1步:子域名发现 ──────
  39. def step1子域名(self):
  40. 打印(f"
  41. {Fore.CYAN}[1/5] 🌐 子域名发现)
  42. out_file = f"{self.out_dir}/subdomains.txt"        output = self.run_cmd(
  43. f"subfinder -{self.domain}-silent 2>/dev/null"
  44. )        如果输出:
  45. subs = [s for s in output.split('
  46. ') 如果 s]
  47. self.results["子域名"] = 子域名列表
  48. with open(out_file, "w") as f:
  49. f.write(输出)
  50. print(f"找到:{len(subs)}个子域名") 
  51. 否则:
  52. 常见 = [
  53. f"www.{self.domain}",
  54. f"api.{self.domain}",
  55. f"dev.{self.domain}",
  56. f"admin.{self.domain}",
  57. f"邮件.{self.domain}",
  58. f"暂存.{self.domain}",
  59. ]
  60. self.results["子域名"] = 公共
  61. with open(out_file, "w") as f:
  62. f.write("
  63. “.join(公共)”
  64. print(f"  ⚠️  subfinder 未找到 — "
  65. f"使用 {len(common)} 个公共子串")# ─── 第二步:实时主机过滤 ──────
  66. def step2_live_hosts(self):
  67. 打印(f"
  68. {Fore.CYAN}[2/5] 🔥 直播主持人检查)
  69. 子文件 = f"{self.out_dir}/subdomains.txt"
  70. live_file = f"{self.out_dir}/live_hosts.txt"        如果子文件不存在:
  71. 打印("子域名文件缺失!") 
  72. 返回        live_out = self.run_cmd(
  73. f"{sub_file}| httpx -silent "
  74. f"-mc 200,301,302,4032>/dev/null",
  75. 超时=120
  76. )        如果 live_out:
  77. 主机 = [h for h in live_out.split('
  78. ') 如果 h]
  79. self.results["live_hosts"] = 主机
  80. with open(live_file, "w") as f:
  81. f.write(直播输出)
  82. print(f"在线主机:{len(hosts)}")
  83. 否则:
  84. print("⚠️  httpx未找到——跳过")    # ─── 第3步:技术检测───────────
  85. def step3_技术检测(self):
  86. 打印(f"
  87. {Fore.CYAN}[3/5]🔍技术检测)
  88. 尝试:
  89. =self.session.get(
  90. f"https://{self.domain}",
  91. 超时=10
  92. )
  93. 技术=[]
  94. headers = r.headers            服务器= headers.get("Server","")
  95. 如果服务器:
  96. techs.append(f"服务器:{server}")
  97. 如果“X-Powered-By”在标头中:
  98. 技术员.append(
  99. f"由 {headers['X-Powered-By']} 提供支持"
  100. )
  101. 如果“X-Generator”在标头中:
  102. 技术员.append(
  103. f"生成器:{headers['X-Generator']}"
  104. )正文= r.text.lower()
  105. 如果“wp-content”在正文中:
  106. 技术栈.append("WordPress")
  107. 如果“drupal”在正文中:
  108. 技术栈.append("Drupal")
  109. 如果正文包含“react”或“__react”:
  110. techs.append("ReactJS")
  111. 如果“angular”在正文中:
  112. 技术栈.append("AngularJS")
  113. 如果“laravel”在正文中:
  114. 技术栈.append("Laravel")
  115. 如果“django”在正文中:
  116. techs.append("Django")缺失=[]
  117. for h in["内容安全策略",
  118. X-框架选项,
  119. X-XSS-保护,
  120. “严格传输安全”:
  121. 如果 h 不在 headers 中:
  122. missing.append(h)self.results["technologies"]= techs
  123. 如果缺失:
  124. self.results["interesting"].append(
  125. f“缺少安全标头:”
  126. f"{', '.join(missing)}"
  127. )for技术in技术们:
  128. 打印(f"  📦 {t}")
  129. 如果缺失:
  130. print(f"  {Fore.YELLOW}⚠️  缺失的标题:")
  131. f"{len(missing)}")除了Exceptionas e:
  132. print(f"  ❌ 错误:{e}")# ─── 第4步:快速密钥扫描 ────────
  133. def step4_secrets(self):
  134. 打印(f"
  135. {Fore.CYAN}[4/5] 🔑 快速秘密扫描)
  136. 导入 re        快速模式 = {
  137. “AWS密钥”:r“AKIA[0-9A-Z]{16}”, 
  138. “GitHub”     : r"ghp_[0-9a-zA-Z]{36}",
  139. “Stripe”:r"sk_live_[0-9a-zA-Z]{24}",
  140. “谷歌API”:r"AIza[0-9A-Za-z\-_]{35}", 
  141. “JWT”        : r"eyJ[A-Za-z0-9\-_=]{10,}\.",
  142. }        检查网址 = [
  143. f"https://{self.domain}/.env",
  144. f"https://{self.domain}/config.js",
  145. f"https://{self.domain}/main.js",
  146. ]for url in check_urls
  147. 尝试:
  148. =self.session.get(url, timeout=6)
  149. 如果 r.status_code ==200
  150. 对于名称,模式in \
  151. 快速模式.项():
  152. 匹配= re.findall(
  153. 模式,r.text
  154. )
  155. 对于 m  matches 中:
  156. 查找=(
  157. “{name}{url}:”
  158. “{m[:30]}…”
  159. )
  160. self.results[
  161. 秘密
  162. ].追加(发现)
  163. 打印(
  164. f"  {Fore.RED}"
  165. f"🔴 {finding}"
  166. )
  167. 除了:
  168. 通过如果self.results["secrets"]为空:
  169. print(f"  {Fore.GREEN}✅ 没有发现快速秘诀")# ─── 第5步:生成报告 ──────────
  170. def step5_report(self):
  171. 打印(f"
  172. {Fore.CYAN}[5/5] 📝 生成报告”)        report = f"{self.out_dir}/recon_report.json"
  173. with open(report, "w") as f:
  174. json.dump(self.results, f, indent=2)        print(f"
  175. {Fore.CYAN}╔══════════════════════════════════╗")
  176. print(f"{Fore.CYAN}║侦察完成HackerMD")
  177. print(f"{Fore.CYAN}╚══════════════════════════════════╝")
  178. print(f"🌐子域名:")
  179. f"{len(self.results['subdomains'])}"
  180. print(f"🔥实时主播:")
  181. f"{len(self.results['live_hosts'])}"
  182. print(f"📦技术"
  183. f"{len(self.results['technologies'])}"
  184. print(f"🔑找到的密钥:")
  185. f"{Fore.RED}"
  186. f"{len(self.results['secrets'])}"
  187. print(f"📍有趣:")
  188. f"{len(self.results['interesting'])}"
  189. 打印(f"
  190. 💾报告:{report})
  191. print(f"  📂 目录   : {self.out_dir}/")def run(self):
  192. 打印(f"
  193. {Fore.CYAN}{'═' * 42}**
  194. print(f"{Fore.CYAN}🚀侦察管道HackerMD")
  195. print(f"目标:{self.domain}") 
  196. print(f"{Fore.CYAN}{'═'*42}")        self.step1_subdomains()
  197. self.step2_实时主机()
  198. self.step3_tech_detect()
  199. self.step4_secrets()
  200. self.step5_report()# ─── 使用方法 ────────────────────────────────
  201. 如果 __name__ == "__main__":
  202. 导入系统
  203. 域名 = sys.argv[1] 如果 len(sys.argv) > 1 \
  204. 否则“example.com”
  205. 管道 = 重建管道(域名)
  206. 流水线运行()

只需一条命令,搞定一切!

  1. python3 recon_pipeline.py target.com

工具概要

  1. 工具|用例|文件
  2. -------------------|----------------------|--------------------
  3. IDOR扫描器| IDOR ID测试| idor_scanner.py
  4. 子域名爆破器|子域名暴力破解| sub_bruter.py
  5. SecretScanner| JS/.env 中的 API 密钥| secret_scanner.py
  6. 异步扫描器|快速批量URL检查| async_scanner.py
  7. 重建管道|全自动化|重建管道.py

今天的作业

  1. # 1. 环境搭建:
  2. python3 -m venv bugenv
  3. 来源 bugenv/bin/activate
  4. pip 安装 requests aiohttp colorama rich tqdm# 2. 测试 Secret Scanner(合法目标!):
  5. python3 secret_scanner.py testphp.vulnweb.com# 3. 异步扫描器测试:
  6. python3 async_scanner.py
  7. # 在URL列表中添加httpbin.org路径# 4. 运行侦察流水线:
  8. python3 recon_pipeline.py hackerone.com
  9. # (仅公开信息——合法!)# 5. 升级您的Apna:
  10. IDORScanner中添加 UUID 支持。
  11. # 在SecretScanner中添加Slack webhook模式
  12. # 将SubdomainBruter的DNS解析添加到您的DNS中

快速复习

  1. 🐍Python=漏洞赏金自动化利器!
  2. 📦= requests, aiohttp, colorama
  3. 丰富,tqdmjson
  4. 🔍 IDOR扫描器= ID范围不同响应= IDOR
  5. 🌍SubBruter=线程+字典=快速!
  6. 🔑SecretScan=正则表达式模式 JS/.env 密钥
  7. 异步扫描器= aiohttp + asyncio =10倍速度!
  8. 🚀流程=萨布组合=全自动侦察!
  9. 💰结果=自定义工具=独特漏洞=
  10. 重复次数越少,奖励越多!

我的谈话……

起初,我都是手动测试每个端点的。

目标在6到8小时内完成。 Python自动化之后:

  1. python3 recon_pipeline.py target.com

15分钟内:

  • 发现847个子域名
  • 134位直播主持人
  • 暴露了 3 个 .env 文件!
  • 找到 2 个管理面板(403)

在我的 .env 文件中:

  1. STRIPE_SECRET=sk_live_xxxxxxxxxxxxxxxxxx
  2. AWS_ACCESS_KEY_ID=AKIAXXXXXXXXXXXXXXXX
  3. DB_PASSWORD=超级秘密2024

手册卡片需要2到3天!3份独立报告:

  • .env 泄露 = 2,500 美元
  • AWS密钥 = 3,200美元
  • 条纹密钥 = 1,500美元

总计:15分钟自动化操作,节省7,200美元! 🎉

课程:在Python中投资一次,打造一个工具,反复使用,回报率无限! 在另一篇文章中,我将向大家介绍Gemini CLI + AI漏洞狩猎,打造2026年最强大的AI助手组合!🤖🔥

    • 公众号:安全狗的自我修养

    • vx:2207344074

    • http://gitee.com/haidragon

    • http://github.com/haidragon

    • bilibili:haidragonx

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 08:28:49 HTTP/2.0 GET : https://f.mffb.com.cn/a/491641.html
  2. 运行时间 : 0.115361s [ 吞吐率:8.67req/s ] 内存消耗:4,940.57kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=2913ee7d32a7d938b04deb40d3bc6a94
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000544s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000698s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000648s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000312s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000716s ]
  6. SELECT * FROM `set` [ RunTime:0.000248s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000554s ]
  8. SELECT * FROM `article` WHERE `id` = 491641 LIMIT 1 [ RunTime:0.003902s ]
  9. UPDATE `article` SET `lasttime` = 1783038529 WHERE `id` = 491641 [ RunTime:0.004683s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000291s ]
  11. SELECT * FROM `article` WHERE `id` < 491641 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000514s ]
  12. SELECT * FROM `article` WHERE `id` > 491641 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000425s ]
  13. SELECT * FROM `article` WHERE `id` < 491641 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.014270s ]
  14. SELECT * FROM `article` WHERE `id` < 491641 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.018891s ]
  15. SELECT * FROM `article` WHERE `id` < 491641 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001107s ]
0.117012s