[SUCTF 2019]EasySQL 1
2023-11-28
| 2024-4-21
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)

SQL Injection(SQL注入)类

含义:把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

思路:判断是否存在注入,注入命令查询数据

实操:

1、启动靶机,观察题目界面

[SUCTF 2019]EasySQL 1题目界面
[SUCTF 2019]EasySQL 1题目界面
  • 发现是一个文本框,提示说Give me your flag, I will tell you if the flag is right.。
  • 怀疑可能是SQL注入,是的,标题已经说了是“EasySQL”,就是SQL注入了
 

2、随便尝试提交一下

尝试一下
尝试一下
  • 观察到URL后什么也没多
  • 是POST方法。(用Burp Suite抓包发现有一个query=1的参数
  • 没其他有用的信息了。
 

3、在填入的内容结尾加上’(单引号),判断是不是SQL,且是否可以注入

  • 文本框内输入 1’
  • 点击提交
什么都没有
什么都没有
  • 什么都没有了,有可能这是一个数字型的注入,加 ‘ 就无法正常查询了
  • 构建恒”真“语句,判断注入类型
    • 1 or 0=0
      • 返回 Nonono.
    • 1’ or ‘0’=’0
      • 返回 Nonono.
返回Nonono.
返回Nonono.
  • 看来“恒真语句”被Ban了!
 

4、新方法,“堆叠注入”

  • 查看数据库名:
    • 1';show databases;#
    • 目前还不确定1是字符型还是数字型,先加 ’ 试试
    • 返回空白,再试试不加 ’
  • 查看数据库名:
    • 1;show databases;#
查看数据库名
查看数据库名
OK,出来了,实锤是数字行了,那之后的语句就不要再加 ‘ 了
  • 查看表名:
    • 1;show tables;#
查看表名
查看表名
  • 查看Flag表的详细信息:1';desc Flag;#
查看Flag表的详细信息
查看Flag表的详细信息
  • OMG,又被Ban了
  • 但是Flag大概率就在叫“Flag”的这个表里了
 

5、想办法查看flag

参考大佬的wp:
“这道题目需要我们去对后端语句进行猜测,有点矛盾的地方在于其描述的功能和实际的功能似乎并不相符,通过输入非零数字得到的回显1和输入其余字符得不到回显来判断出内部的查询语句可能存在有||,也就是select 输入的数据||内置的一个列名 from 表名,进一步进行猜测即为select post进去的数据||flag from Flag(含有数据的表名,通过堆叠注入可知),需要注意的是,此时的||起到的作用是or的作用”
  • 推测内部的查询语句:
    • select 文本框内的数据||flag from Flag
  • 所以只要查询到Flag里的全部内容即可
  • 解法一
    • 想办法构建select * from Flag,但是直接写*没有反应
    • 借助1构建select *,1 from Flag
    • 等价于select *,1||flag from Flag
    • 文本框中的内容:
      • *,1
  • 解法二
    • 想办法去掉输入的内容,构建select flag from Flag
    • set sql_mode=pipes_as_concat可以将||的作用由or变为拼接字符串
    • 文本框中的内容:
      • 1;set sql_mode=pipes_as_concat;select 1
       

6、解题成功!

notion image
  • 获得Flag!
  • CTF
  • BUUCTF
  • 循序渐进学Java笔记(Chapter01_内容介绍)[强网杯 2019]随便注 1
    Loading...
    目录