SQL注入

SQL注入漏洞

漏洞描述

web程序对用户提交的参数没有做过滤就直接放到SQL语句中执行,导致参数中的特殊字符打破了sql语句原有的逻辑,黑客就可以利用这个漏洞执行任意sql语句,比如增删改查

测试方法:

在发现有可控参数的地方使用sqlmap进行SQL注入检查,简单的可以手工测试,利用单引号、and 1=1 和 1=2

SQL注入的原理

sql注入漏洞产生需要满足两个条件

  • 参数可控,从前端给后端的参数内容是用户可以控制的
  • 参数带入数据库查询的:传入的参数会拼接到sql语句中,并且带入数据查询

当传入的参数为1'的时候:

select * from users where id=1'

此语句不符合语法规范会报错

当用户传入的参数1 and 1=1时

select * from users where id =1 and 1=1

因为1=1是真,所以会返回id是1的结果

判断是否存在注入

  • id=1 and 1=1
  • id=1 and 1=2
  • id=1' or '1'='1'
  • id=1" or "1"="1"

sql注释符

  • --空格:单行注释
  • #:单行注释
  • /* 内容 */:多行注释

注入流程:

  • 判断是否存在注入

  • 判断字段数

  • 确定回显点

  • 查询数据库信息

    • vince' union select database(),user() --
  • 写入webshell

关于mysql注入相关的知识

在mysql5.0版本以后,MySQL默认有一个数据库叫information_schema库,库中有很多表,重点是这三个表:

  • schemata
    • schema_name字段,记录的所有库的名字
  • tables
    • table_schema 库的名字
    • table_name 表的名字
  • columns
    • table_schema 库的名字
    • table_name 表的名字
    • column_name 字段的名字

union联合注入

联合查询注入是两个表进行注入攻击,使用关键词union select 对两个表进行联合,两个表的字段数量要一样,不然会报错

案例:

select * from students where stuid=1 union select 1,2,3,4,5,6 --

将union后面的数字可以替换成函数

select * from students where stuid=1 union select database(),2,3,4,5,6 --

union联合注入

1.判断sql注入

2.判断字段数

3.用联合注入获取敏感信息

vince' union select database(),2 --

获取到数据库名:pikejiu

4.获取表名

函数group_concat() #将字段分组并拼接成一个字符串(一行输出)

vince' union select (select group_concat(table_name) from information_schema.tables where table_schema="pikajiu"),2 --

获取单的表名:httpinfo,member,message,users,xssblind

相关推荐
nenchoumi311918 小时前
ROS2 Humble 笔记(十二)launch 文件与 namespace 启动多个节点
笔记·机器人·ros2
CwSy_18 小时前
openlab配置作业
笔记
d111111111d19 小时前
STM32TIM定时器外设学习,输出比较模式(舵机,驱动直流电机)
笔记·stm32·单片机·嵌入式硬件·学习
小码过河.19 小时前
告别 mysqldump 痛点!用 mydumper 实现 MySQL 高效备份与恢复
数据库·mysql
TDengine (老段)19 小时前
从“数据堆场”到“智能底座”:TDengine IDMP如何统一数据语言
大数据·数据库·物联网·时序数据库·tdengine
nenchoumi311919 小时前
ROS2 Humble 笔记(十)多机分布式通讯 DDS 与宿主机和Docker容器
笔记·机器人·ros2
清钟沁桐19 小时前
mlir 编译器学习笔记之六 -- 经典实现
笔记·学习·mlir
l1t20 小时前
利用短整数类型和部分字符串优化DuckDB利用数组求解数独SQL
开发语言·数据库·sql·duckdb
一 乐20 小时前
医疗管理|医院医疗管理系统|基于springboot+vue医疗管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·医疗管理系统
下午见。21 小时前
深入理解C语言共用体/联合体(union):大小计算与大小端判断实战
c语言·笔记·学习