2026-02-07 17:56:23
安全渗透攻防演练——SQL注入攻击(手动注入)
SQL注入是信息安全领域中的一种主流攻击形式,它通过构建特殊的SQL语句作为参数传入Web应用程序,进而执行未授权的数据库操作,甚至夺取操作系统的控制权。以下是对SQL注入攻击(手动注入)的详细解析:
一、环境准备
二、查看目标靶机中的敏感表信息
数据库默认密码:owaspbwa
查看数据库:使用show databases;命令可以查看目标数据库中的所有数据库。

查看数据库敏感信息:
表一:dvwa.users(存储了dvwa应用程序的用户信息)
表二:wordpress.wp_users(存储了WordPress网站的用户信息)
表三:mysql.user(存储了MySQL数据库的用户账户信息,包括用户名及密码)

数据字典:information_schema
information_schema是MySQL安装时自带的数据库,它包含了数据库中所有其他数据库的信息,如库名、表名、字段名等。
使用select * from information_schema.TABLESG;命令可以查看数据库中所有的库名、表名、字段名。
使用select DISTINCT TABLE_SCHEMA from information_schema.TABLESG;命令可以查看MySQL所有的数据库列表。


三、从网站前端去攻击其后端(SQL手动注入)
基于错误的注入
通过构造特殊的SQL语句,根据得到的错误信息来判断是否存在SQL注入点。
在输入框中输入单引号(英文输入模式下的单引号),根据报错信息判断数据库的类型。
如果报错信息显示SQL语法错误,并且与后台数据库报错信息一致,则表明存在SQL注入点。


基于布尔注入
通过封闭SQL语句,并构造or或and的逻辑语句产生逻辑上的真假判断,从而影响程序的行为。
构造的SQL语句如:select first_name,last_name from dvwa.users where user_id='' or 1=1 --'';
其中,''用于闭合前面的条件,or 1=1为真的条件,--将注释掉后面所有的语句。

基于联合的注入
联合注入可以联合页面定义好的select查询语句来合并其他语句查询更多的信息。
在进行联合注入时,需要首先猜测查询结果的列数,然后构造联合查询语句。
构造的SQL语句如:'union select version(),database() --'


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




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