Sqli-labs靶场笔记1(Less-1 SQL注入基本操作)

前言

sqli-labs靶场使用的是mysql数据库,所以在打之前,我们要了解一下mysql数据库的结构,mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有两个表一个是tables和columns。tables这个表的table_name字段下面是所有数据库存在的表名。table_schema字段下是所有表名对应的数据库名。columns这个表的colum_name字段下是所有数据库存在的字段名。columns_schema字段下是所有表名对应的数据库。所以我们在打的过程中会用到information_schema这个数据库。
下面放几张图(information_schema数据库结构以及后面要用到的表),大家在后面用到的时候回来看就明白了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于SQL注入的基本原理可以去看我的这篇博客这是sqli-labs的第一关,所以操作上的逻辑和方法会写的细致一点,在写后面关卡的时候可能有些讲过的东西就不写了。

Less-1

它这里提示我们以数字值的形式传入参数id在这里插入图片描述那我们就照做
在这里插入图片描述可以发现它显示了结果,我们看到这个大概就可以知道它是在模拟一个登录的功能点,不同的id对应不同的用户,接下来我们就可以尝试着对这个点进行注入,注入其实就是要想办法夹带私货,也就是说我们要在它本身的SQL语句中放入我们想要放的东西。

要夹带私货很常用的一个方法就是闭合它本身的语句,而闭合语句的方法也有很多,很常见的就是使用引号闭合。下面的代码中演示了一段php中sql语句的定义。

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

对于这样的一个语句,我们就可以使用引号去闭合,然后在后面加上我们要夹带的私货

$sql="SELECT * FROM users WHERE id='' order by 3 --+ ' LIMIT 0,1";

这里是把$id换成了我们输入的值,我们首先是输入了一个’去闭合前面的’,这就形成了id=''的样子,然后放上我们的私货 order by 3 。
ORDER BY是一条SQL语句中的关键字,用于对查询结果进行排序。通过ORDER BY子句,可以按照指定的列或表达式对查询结果进行升序或降序排序。
这里的 order by 3 指的就是用查询出来的第三列的结果去排序。这样做是为了确定查询出来的结果有几列,如果不报错,就证明第三列是存在的,如果报错就证明没有第三列
–+是为了注释后面的内容

讲完了这些理论,我们再来看看实际中怎么使用
在这里插入图片描述先看看有没有10列,发现没有,再试试5列
在这里插入图片描述发现也没有,这里其实有个小技巧,不要一列列的试,可以用二分法(向上取整会好一点),所以我们接下来试试3
在这里插入图片描述发现3列是有的,但我们并不能确定查出来的就是3列,还可能有4列,所以我们还要测试一下4
在这里插入图片描述可以发现4是没有的,那么我们就可以确定是3列了,查这个列数是为了接下来的报错位做准备,在这里假定一个情况,就是我们想去这个数据库里面查其它的东西,比如用户的密码。有了前面的基础,我们也确实可以把我们想要的查询语句放进去,但是这样只是让数据库去执行了查询这个操作,我们并不能看到查询的结果,因为我们并没有直接操作数据库,而是借助这个web应用程序,这个是大家需要注意的。下面的这个情况就是我们直接去查询,但是不出意外我们看不到查的内容。在这里插入图片描述

这里的union select就是联合查询,其实就相当于在之前的查询语句上再加上一个查询语句
database()是一个函数,会输出当前数据库名,一般sql注入测试的时候都会先去获取这个

出于上面的这种情况,我们可以让它本身的查询查不到东西,在这个题目里面,具体操作就是用一个不存在的id,一般可以写一个很大的值或者是负数,这样它查不到东西就不会有回显了。
在这里插入图片描述又因为它查到的结果会有3列,但是实际上输出的只有两个位置,所以我们要确定一下哪个位置查询到的东西会返回到页面上,这个就是之前讲的报错位
在这里插入图片描述这样做了之后就会发现2,3两个位置的数据会被返回到页面上,所以我们直接在2,3这两个位置放上我们要查询的东西即可。比如我这里就直接写查到了当前的数据库名字。在这里插入图片描述那么到这里我们已经解决了基本问题,可以开始深挖信息了,现在我们确定了数据库,接下来我们就可以去查一下这个数据库里面有什么表
在这里插入图片描述

其中information_schema.tables就是前面说的包含全部数据库表的表,where后面就是设置条件,这里我想查询的就是数据库名为security的表,具体可以回到开头看我放的图
group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有emails,只能一个个去看

通过上面这一步我们已经知道了security数据库中有哪些表,这些表里面的信息我们能全部获取到,这里就以users表为例,因为这个表里面的信息泄露一般危害是很大的。接下来我们就要查这张表里面有哪些列
在这里插入图片描述这里的语句跟之前的差不多,就是把table_name换成了column_name,毕竟我们是要查列名,然后多加了一个限制条件,这些限制条件不加就可能查到其他的结果,所以建议最好不要省,全部加上去。在查到列名之后我们就要去查具体的数据了,这里就把username和password一起查了。

在这里插入图片描述这里直接用group_concat把用户名和密码一一拼接起来,中间用:分隔显示,这样看起来比较直观,值得一提的是,这里的限制条件只有表名是因为这个web应用程序使用的数据库就是我们要查的数据库,所以就不用再指定了。
那么到现在为止我们已经挖掘出了我们想要的数据,使用上面提到的方法,在这一题中可以去做更多的操作,这里就不一一举例了。Sqli-labs的Less-1就到此为止。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值