[SWPUCTF 2021 新生赛]easy_sql

[SWPUCTF 2021 新生赛]easy_sql

最近考试比较多,但是越临近考试越不想复习,复现一道web方向sql注入类型的题目解解闷。可能会问最近为什么没打misc了,主要是有一天不知道在哪看到的文案,说misc不适合作为主攻方向,所以还是想坚持一下初心打打web试一下。

前置知识

  1. 数据库中的字段就是指表的一列(这个一开始真的好多sql注入题目的wp都有这个说法,但是我一开始又懒得看数据库原理的书或者那种几十个小时的视频,所以是真不理解是什么意思,导致很大程度上降低了我做web的兴趣)
  2. 数据库整体框架的一个顺序就是库-表-列
  3. 目前从解题思路来看,第一步就是先通过传参来判断sql注入类型,数字型注入、字符型注入、搜索型注入:
  • 数字型注入:正常输入即可,不用考虑闭合情况

  • 字符型注入:一般要使用单引号来闭合

  • 搜索型注入(暂时还没遇到,遇到再补充)

为什么要进行一个类型的判断,就是sql语句貌似就是前面如果出错了的话,会执行后面的语句,也就是达到了插入恶意SQL代码的目的。

​ 4.SQL查询语句:

  • SELECT <目标列名序列> -- 需要哪些列
    FROM <表名> [JOIN <表名> ON <连接条件>] -- 来自哪些表
    [WHERE <行选择条件>] -- 根据什么条件
    [GROUP BY <分组依据列>]
    [HAVING <组选择条件>]
    [ORDER BY <排列依据列>]
  • database()函数的返回值(当前数据库的名称)
  • GROUP_CONCAT 是一个 MySQL 特有的聚合函数,它可以将多行的值连接成一个字符串
  • information_schema.tables 是一个特殊的系统表,它包含了关于数据库中所有表的信息
  • --+:在SQL中,两个短横线(--)是一个注释的开始。这意味着在--之后的所有内容都将被数据库忽略。+ 在这里可能是为了“欺骗”某些应用程序或框架,这些应用程序或框架可能会错误地解析URL查询字符串中的+字符为空格(虽然在这种情况下,+字符在注释之后,所以实际上它没有任何作用)

解题思路

image-20240528000611017

首先打开网页,发现是杰哥的图片,没有提供什么信息,当然如果观察仔细的话可以发现网页的标题提示了参数是wllm,没看到也没事,F12查看源码也可以看到。

既然题目名字是ez_sql,肯定要进行sql注入,按照步骤来,先判断sql注入类型。

?wllm=1

image-20240528140532916

出现回显,说明不是数字型注入,尝试字符型。

?wllm=1'

image-20240528140637048

出现报错,证明是字符型注入。接下来可以判断这个数据库有几个字段数也就是有几列来寻找注入点。

image-20240528142153611

?wllm=1' order by 3--+

image-20240528142428142

?wllm=1' order by 4--+

一般可以通过order by语句来判断列数,当输入到4时发现报错,无正常回显,证明该数据库有3列。

/?wllm=2'union select 1,2,3--+

查看回显点,这里内部原因我还没搞懂,但是大体可以知道,网页上回显的内容是selec查询语句第二个参数和第三个参数的内容

image-20240528151624053

所以select查询语句的顺序不是很重要,只要把想要回显的内容放在后面两个参数的位置就行。

注意,这里需要把wllm设置为不为1的数(就是让他查不到数据就行,因为wllm=1查得到数据),不然它只会输出wllm=1查询到的数据。然后查看数据库名称

image-20240528150021184

得到数据库名称为test_db, 得到数据库名称就可以按顺序数据库-表-列来找flag了

这里就要用到前置知识里面的group_concat函数和information_schema.tables,就是查看‘test_db’数据库下有哪些表。

/?wllm=2'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='test_db'--+

image-20240528150500251

发现有两张表,我们查看一下test_tb表中含有哪些列

/?wllm=2'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='test_tb'--+

image-20240528150815388

正常回显,有id和flag两列,那这个flag里的内容应该就是我们最终所需要的答案了。我们通过select查询语句让它把flag的内容回显。

/?wllm=2'union select 1,2,flag from test_tb--+

image-20240528151024748

总结

总结一下,这是一道比较基础的sql注入的题目,至少让我对sql查询语句更加的熟悉了一点,也了解了数据库的一个大体结构,对后面做sql类型的题目有了一个初步的思路,大体框架肯定还是按照库-表-列的顺序去一步一步求解,感觉这道题可以算是我启蒙sql注入类型的一道题,再接再厉!

posted @ 2024-05-28 15:33  ‰1  阅读(875)  评论(0)    收藏  举报