[SWPUCTF 2021 新生赛]easy_sql SQL

本文详细介绍了SQL注入的三种方式:数字型、字符型和搜索型,通过实例说明了如何通过构造特殊输入检测漏洞,并强调了输入验证在防止注入攻击中的重要性。还提及了GROUP_CONCAT函数的应用以及在实际渗透测试中的应用案例。
摘要由CSDN通过智能技术生成

相关基础(主要在如何判断注入类型):

sql注入的三种方式是什么-mysql教程-PHP中文网

注入原理:

是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

对数据库的注入利用方式:

  • 查询数据

  • 读写文件

  • 执行命令

注入分类:

1. 数字型注入:

数字型注入——参数整型——数字型漏洞

假设存在一条url为:HTTP://www.aaa.com/test.php?id=1

对sql的猜测为:SELECT*FROM table WHERE id=1

判断数字型漏洞的sql注入点:

① 先在输入框中输入一个单引号 '

这样的 SQL 语句就会变为:

SELECT * FROM table WHERE id=1',

不符合语法,所以该语句肯定会出错,导致脚本程序无法从数据库获取数据,从而使原来的页面出现异常。

② 在输入框中输入 and 1 = 1

SQL语句变为:

SELECT * FROM table WHERE id=1 and 1 = 1

语句正确,执行正常,返回的数据与原始请求无任何差异。

③ 在数据库中输入 and 1 = 2

SQL 语句变为:

SELECT * FROM table WHERE id=1 and 1 = 2

虽然语法正确,语句执行正常,但是逻辑错误,因为 1 = 2 为永假,所以返回数据与原始请求有差异。

如果以上三个步骤全部满足,则程序就可能存在数字型 SQL 注入漏洞。

2.字符型注入

字符型注入——参数字符串——字符型注入漏洞

数字型不需要单引号闭合,而字符型一般需要使用单引号来闭合

关键:如何闭合 SQL 语句以及注释多余的代码。

假设后台的 SQL 语句如下:

SELECT * FROM table WHERE username = 'admin'

判断字符型漏洞的 SQL 注入点:

① 还是先输入单引号 admin' 来测试

这样的 SQL 语句就会变为:

SELECT * FROM table WHERE username = 'admin''。

页面异常。

② 输入:admin' and 1 = 1 --

注意:在 admin 后有一个单引号 ',用于字符串闭合,最后还有一个注释符 --(两条杠后面还有一个空格!!!)。
SQL 语句变为:

SELECT * FROM table WHERE username = 'admin' and 1 = 1 --

页面显示正确。

③ 输入:admin' and 1 = 2 --

SQL 语句变为:

SELECT * FROM table WHERE username = 'admin' and 1 = 2 --

页面错误。

满足上面三个步骤则有可能存在字符型 SQL 注入。

3.搜索型注入

搜索型注入——数据搜索时没过滤搜索参数

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 "keyword=关键字" 有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like '%关键字%' 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:

select * from 表名 where 字段 like '%测试%' and '%1%'='%1%'

知识补充

GROUP_CONCAT函数用于将GROUP BY产生的同一个分组中的值连接起来,返回一个字符串结果
GROUP_CONCAT函数首先根据GROUP BY指定的列进行分组,将同一组的列显示出来,并且用分隔符分隔,由函数参数(字段名)决定要返回的列
GROUP_CONCAT([DISTINCT] 要连接的字段 [ORDER BY 排序字段 ASC/DESC] [SEPARATOR '分隔符'])

wp

打开界面f12看到

告诉我们参数的值为wllm

注入一个值得到

满足上面,判断出为数字型输入

接着按数字型注入的步骤依次进行查询

输入‘order by 1,2,3……发现在四时

故有三列

在这个里因为只有1有回显,必须让参数错误才能执行后面的值

flag是密码的意思,所以应该在第三列

查询数据库——test_db

爆表名——test_tb

爆字段——flag在id下

查看字段里的内容 

 参考:

[SWPUCTF 2021 新生赛]easy_sql-阿里云开发者社区

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值