[SUCTF 2019]EasySQL1

BUUCTF [SUCTF 2019]EasySQL1 writeup(详细版) 考点:堆叠注入,MySQL和mssql中||运算符的区别,运算符的意义转换(操作符重置) 打开靶机,尝试输入1查看回显: 可以看到表格回显了内容:1,用其他非0数字尝试全都回显1,那我们换个数字尝试,比如0: 什么都没有。 使用Sql堆叠注入查看信息,先用show指令查看数据库:1;show databases; 再查看一下表:1;show tables; 看到Flag表,猜测flag应该在Flag中。 但是直接select flag from Flag查询是查不... 阅读详情
AI摘要

本文介绍SUCTF2019 EasySQL1挑战的解决思路,包括常规SQL注入尝试、堆叠注入应用及两种有效解决方案:一是利用逻辑或特性绕过限制获取Flag;二是调整SQL模式实现字符串连接。

[SUCTF 2019]EasySQL1
[目标]
Sql语句的堆叠注入
[环境]
Buuctf
[工具]
浏览器
[分析]
1.试试sql注入正常套路
(1)先试试1
在这里插入图片描述

有回显
(2)再试试字母
在这里插入图片描述

没有回显
(3)试试单引号注入
在这里插入图片描述

提示不一样,因此猜测这里有注入点
(4)试试有多少列
在这里插入图片描述

还是不成功,因此一般的联合查询在这里不能使用
(5)基于时间的盲注和报错注入都需要嵌套联合查询语句来实现,因此可以跳过,直接试试布尔型盲注
在这里插入图片描述

还是不成功
2.利用堆叠注入
(1)查找所有数据库
在这里插入图片描述

(2)查询所有表名
在这里插入图片描述

(3)查询Flag表中的列
在这里插入图片描述

不成功
3.接下来是网上的两种解法,参照了网上大佬们的WP,自己做的一些总结
(1)第一种是猜出了源码select $_POST[‘query’] || flag from Flag,
sql_mode 设置了 PIPES_AS_CONCAT 时,|| 就是字符串连接符,相当于CONCAT() 函数
当 sql_mode 没有设置 PIPES_AS_CONCAT 时 (默认没有设置),|| 就是逻辑或,相当于OR函数
第一种就按默认没有配置来进行,此时||就是逻辑或
||在命令执行中见过,
回顾:
command1;command2顺序执行
command1 || command2
如果command1执行失败,则执行command2
command1 && command2
如果command1执行成功,则执行command2

因此只需要将

$_POST[‘query’]

提交的数据换成*,1(如果直接写的话会被报错,且写在后面会失效)
解释:
sql=select.post[‘query’].“||flag from Flag”;(拼接语句)
如果$post[‘query’]的数据为

*,1

sql语句就变成了select *,1||flag from Flag,
就是select *,1 from Flag,这样就直接查询出了Flag表中的所有内容。
此处的1是临时增加一列,列名为1且这一列的所有值都为1

执行payload:*,1
在这里插入图片描述

得到flag
(2)第二种是将||作为字符串连接符,因此需要在语句中更改其配置
sql_mode=PIPES_AS_CONCAT时即可
Payload:1;set sql_mode=PIPES_AS_CONCAT;select 1
拼接完之后:select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag
相当于是select 1 from Flag和select flag from Flag
在这里插入图片描述

得到flag

BUU ctf [SUCTF 2019]EasySQL 1 [SUCTF 2019]EasySQL 1 本题是 EasySQL 但是我感觉一点都不简单 。 我们打开界面发现很像上一关的随便注,但是我尝试了 联合查询 报错注入 布尔盲注 堆叠注入 发现都不能查询到 flag 。仅仅堆叠注入可以查询的 tables 一级。 查询过大佬的博客后发现本题考查的是 sql_mode sql_mode:是一组mysql支持的基本语法及校验规则 PIPES_AS_CONCAT:将“||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数 阅读详情

相关推荐

Buuctf-Web-[极客大挑战 2019]EasySQL 1 题解及思路总结

SQL注入。

m0_62239233的博客 2万+

[SUCTF 2019]EasySQL1 题目分析与详解

EasySQL

2302_79800344的博客 1万+

BUUCTF [SUCTF 2019]EasySQL1 writeup

很简单的,但是注入条件十分有限,只有调用数据库的函数支持执行多条语句才能够使用,mysqli_multi_query()函数,大多开发人员不会用这个,往往开发用的是mysqli_query函数,只执行一条语句;然后我就想执行select * from Flag嘛,em,可是fuzz得到from关键字是被挡的;实现select *,1 from Flag执行,select **** from Flag不执行。相当于是select 1 from Flag和select flag from Flag。

2401_83237906的博客 1506

BUUCTF-[SUCTF 2019]EasySQL1

题目: 分析: 先尝试输入。 输入非0数字的时候会有一个回显 输入大小写字母的时候没有回显 判断是什么闭合:输入1#能输出,而输入 1' 和1'#没有输出,"被过滤掉,大致上可以按照数字型进行猜测。 输入特殊字符也没有报错回显,所以报错注入基本上没戏了 输入很多关于sql语句的东西(and,or,union,if,order from )都会显示Nonono,所以联合查询也没戏 再尝试时间盲注 ,sleep也被ban了,时间盲注也不行 再尝...

Monica的博客 3873

为什么BGA焊点总在四个角先坏?一次热-振耦合仿真给你讲明白

本文通过Ansys Workbench进行热-振耦合仿真,深入分析了BGA焊点在四个角点先失效的机理。研究发现,角点焊点由于CTE失配、振动载荷放大及几何应力集中等因素,承受的等效塑性应变和动态应力显著高于中心区域,导致其疲劳寿命大幅降低。仿真数据揭示了角点焊点的应力分布和蠕变特性,为电子封装可靠性设计提供了重要依据。

weixin_42535461的博客 439

腾讯云TDSQL MySQL版 - 开发指南兼容性

语言结构 分布式实例支持所有 MySQL 使用的文字格式,包括: String Literals Numeric Literals Date and Time Literals Hexadecimal Literals Bit-Value Literals Boolean Literals NULL Values String Literals String Literals 是一个 bytes 或者 characters 的序列,两端被单引号'或者双引号"包围,TDSQL MySQL版

weixin_43872058的博客 911

[SUCTF 2019]EasySQL 1

摘要 本文详细记录了[SUCTF 2019]EasySQL 1题目的解题过程。通过分析题目界面和尝试基本注入方法,发现传统SQL注入被过滤。转而使用堆叠注入技术,成功获取数据库和表名(发现Flag表)。推测后端查询逻辑为"select 输入||flag from Flag",最终通过两种方法获取flag:1)输入"*,1"构造查询语句;2)修改sql_mode将||转为字符串连接。 写于2023/11/28

ZZHow Blog 1559

基于VUE的智慧园区可视化平台(开题报告+源码)

本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速,园区作为城市发展的重要组成部分,其管理和运营效率直接影响到城市的经济发展和居民生活质量。传统的园区管理方式已经难以满足现代城市对于高效率、智能化的需求。因此,利用先进的信息技术构建一个智慧园区可视化平台显得尤为重要。Vue.js作为一个高效的前端框架,能够帮助开发一个动态的、用户友好的智慧园区可视化平台,实现园区管理的数字化和智能化。

liu10611的博客 1181

BUUCTF - [SUCTF 2019]EasySQL1

猜测后端执行语句 测试环境:BUUCTF - [SUCTF 2019]EasySQL1 通过测试发现,输入数字的时候,页面回显 输入字母页面就没有回显 而尝试执行注入语句的时候,会显示一个nonono 也就是说,没有回显,联合查询基本没戏。 好在页面会进行相应的变化,证明注入漏洞肯定是有的。而且注入点就是这个POST参数框框,就是那个inject参数。 至少我们可以把精力全部放在这个参数上。...

白帽子续命指南 7562

Lumerical FDTD新手教程:5步搞定MMI波导光谱模拟(附避坑指南)

本文提供Lumerical FDTD新手教程,详细讲解5步完成MMI波导光谱模拟的实用方法,包括环境准备、结构建模、光源配置、仿真优化和结果分析。特别针对多模干涉耦合器(MMI)的模拟难点,提供避坑指南和优化策略,帮助光学工程师快速掌握FDTD仿真技术。

kite3的博客 359

树莓派4B安装 ubuntu20.04 & VNC远程桌面 & 安装ROS noetic

树莓派4B安装ubuntu20.04 & VNC远程桌面1、安装ubuntu方式1:下载Imager文件。方式2:下载镜像文件。2、查询树莓派 IP 地址3、使用ssh远程登录树莓派4、更新源地址5、更新6、安装桌面环境7、允许root登陆8、登陆远程桌面9、设置中文 1、安装ubuntu 方式1:下载Imager文件。...

weixin_44415639的博客 2万+

buuctf-[SUCTF 2019]EasySQL 1(小宇特详解)

buuctf-[SUCTF 2019]EasySQL 1(小宇特详解) 解法1 这里先用的是万能密码,发现不能使用,然后使用堆叠注入发现能够进行 堆叠注入查询数据库 1; show databases; 查询表名 1; show tables; 这里尝试直接访问Flag 1;show columns from Flag;# 发现不行 这里是最迷的一个地方,这里大佬能够猜出查询语句 select $_GET['query'] || flag from flag 这里的||在mysql中表示或,如果

小宇的web博客 1万+

嵌入式Linux&Android开发-TP调试

目录 一、修改DTS,添加新的I2C设备 二、修改Makefile,Kconfig 三、tp调试时的问题排查 一、修改DTS,添加新的I2C设备 &i2c4 { status = "okay"; clock-frequency = <400000>; gslX680@40 { compatible = "gslX680"; reg = <0x40>; touch-gpio = <&gp

嵌入式成长手册 572

[SUCTF 2019]EasySQL1 write up

[SUCTF 2019]EasySQL1 write up 本题所需知识点:堆叠注入 点开题目,题目只有一个输入框,发现是POST参数提交。 输入任意数字, 输入任意字符串,无反应或如下图 接下来尝试构造闭合,均无反应 ' 1' 1' or 1=1# 尝试堆叠注入,成功 1;show databases; 1;show tables; 在进一步的测试中,无效果。 1;select * from Flag; 同时尝试大小写,char字符拼接等方法绕过,无效果。 无耐,看大神的题解。https:

Teemos的博客 296

【肝帝一周总结:全网最全最细】十万字python教程,学不会找我!教到你会为止!!内容超多,建议收藏慢慢看!

文章目录前言一定要看python入门python缩进Python注释Python 变量1. 定义理解2. 变量名命名3. 分配多个值4. 输出变量5. 全局变量 前言一定要看 python能干什么?有什么用?好处在哪?不要我讲了,这不是我在博客该讲的,言简意赅就是:通俗易懂,上手快,实用强。我会根据自己个人理解以及国外官网翻译为中文对大家进行讲解。完整源码我也会在最下面带上地址。内容过多,我不会全部演示,你完全可以复制粘贴到自己的pycharm上运行即可。 不管是国内的菜鸟教程还是我在这里的翻译,至少你跟

全栈川川 5万+

嵌套学习 (Nested Learning, NL):赋予AI持续学习能力的革命性范式

嵌套学习(Nested Learning, NL)的核心哲学在于彻底颠覆传统深度学习中将模型架构(Architecture)与优化算法(Optimization)视为两个独立组件的“扁平化”视角 。传统方法通常将神经网络的结构设计和其训练过程分离开来,模型架构是预先定义好的静态蓝图,而优化算法(如SGD、Adam)则是一个外部的、统一的规则引擎,负责在训练期间调整模型参数 。这种分离的视角隐藏了模型内部不同组件之间复杂的梯度流和动态更新过程,将整个学习系统视为一个单一层次的优化问题。然而,嵌套学习范式提出,

步子哥的博客 488

【BUUCTF系列】[SUCTF 2019]EasySQL1

本文分析了SQL注入的关键特征与绕过技术。通过1' or 1=1 #测试发现存在关键字过滤,堆叠注入可行但受限制。提出两种绕过方案:1)修改SQL模式使||转为字符串连接符;2)利用SELECT *返回所有字段。文章解析了短路逻辑、运算符重载等原理,并给出防御建议:禁用堆叠注入、参数化查询、输入验证等。强调技术研究需遵守法律授权与道德规范,附有详细的免责声明,提醒读者仅用于合法安全测试。全文150字,涵盖漏洞分析、技术方案与安全准则。

一只枷锁的博客 5742

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[初级]sql注入之堆叠注入、运算符干扰[SUCTF 2019]EasySQL1

一道buuctf的题目 [SUCTF 2019]EasySQL1 并不难,主要靠猜。

BlingZeng的博客 834

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 关于phpStudy的Apache和MySQL启动失败解决方案
下一篇: [极客大挑战 2019]LoveSQL 1
qieziwa(boy)
博客等级 码龄7年 5712粉丝 160原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值