安全渗透攻防演练——5、SQL注入攻击(手动注入)

安全渗透攻防演练——5、SQL注入攻击(手动注入)
最新回答
拾柒

2026-02-07 17:56:23

安全渗透攻防演练——SQL注入攻击(手动注入)

SQL注入是信息安全领域中的一种主流攻击形式,它通过构建特殊的SQL语句作为参数传入Web应用程序,进而执行未授权的数据库操作,甚至夺取操作系统的控制权。以下是对SQL注入攻击(手动注入)的详细解析:

一、环境准备

  • 目标靶机:owasp
  • 测试渗透机:kali Linux(用于进行SQL注入测试)

二、查看目标靶机中的敏感表信息

  1. 数据库默认密码:owaspbwa

  2. 查看数据库:使用show databases;命令可以查看目标数据库中的所有数据库。

  3. 查看数据库敏感信息:

    表一:dvwa.users(存储了dvwa应用程序的用户信息)

    表二:wordpress.wp_users(存储了WordPress网站的用户信息)

    表三:mysql.user(存储了MySQL数据库的用户账户信息,包括用户名及密码)

  4. 数据字典:information_schema

    information_schema是MySQL安装时自带的数据库,它包含了数据库中所有其他数据库的信息,如库名、表名、字段名等。

    使用select * from information_schema.TABLESG;命令可以查看数据库中所有的库名、表名、字段名。

    使用select DISTINCT TABLE_SCHEMA from information_schema.TABLESG;命令可以查看MySQL所有的数据库列表。

三、从网站前端去攻击其后端(SQL手动注入)

  1. 基于错误的注入

    通过构造特殊的SQL语句,根据得到的错误信息来判断是否存在SQL注入点。

    在输入框中输入单引号(英文输入模式下的单引号),根据报错信息判断数据库的类型。

    如果报错信息显示SQL语法错误,并且与后台数据库报错信息一致,则表明存在SQL注入点。

  2. 基于布尔注入

    通过封闭SQL语句,并构造or或and的逻辑语句产生逻辑上的真假判断,从而影响程序的行为。

    构造的SQL语句如:select first_name,last_name from dvwa.users where user_id='' or 1=1 --'';

    其中,''用于闭合前面的条件,or 1=1为真的条件,--将注释掉后面所有的语句。

  3. 基于联合的注入

    联合注入可以联合页面定义好的select查询语句来合并其他语句查询更多的信息。

    在进行联合注入时,需要首先猜测查询结果的列数,然后构造联合查询语句。

    构造的SQL语句如:'union select version(),database() --'

    通过联合注入,可以查询当前数据库和当前用户信息、所有库名、所有表名、指定表的列名以及关键用户的密码内容等。

四、防御措施

  1. 严格验证和过滤用户输入:对所有用户输入的数据进行严格验证和过滤,确保只接受预期格式和类型的数据。
  2. 限制数据库用户权限:只给予数据库用户执行必要操作所需的最低权限,避免赋予过高权限。
  3. 使用参数化查询或存储过程:避免直接拼接用户输入的数据到SQL查询中,使用参数化查询或存储过程来执行数据库操作。
  4. 部署Web应用程序防火墙:通过Web应用程序防火墙来检测和阻止恶意的SQL注入请求,提供额外的安全层保护Web应用程序。

SQL注入攻击的危害十分严重,因此必须采取有效的防御措施来确保数据库和应用程序的安全性。