get方法/post方法/SQL注入文字型/数字型

GET方法

GET 是 HTTP 请求方法之一,用于从服务器获取资源,不修改服务器上的数据。

核心特征

参数拼接在 URL 中

格式:url?参数名1=值1&参数名2=值2

如果要同时传递多个参数,参数之间以"&"分割

如果要给网站传递&这个符号,则要使用百分号+16进制ascii码值:%26。

由于URL编码中通常出现%,所以URL编码又称百分号编码。

示例: http://test.com/index.php?id=1&name=admin ? 后面的内容就是 GET 传参数据。

GET 方法缺点

  1. 参数明文暴露在 URL 地址栏,容易泄露敏感信息,服务器访问日志也会记录参数。
  2. 受 URL 长度限制,无法传输大容量数据。
  3. 可被浏览器缓存、保存为书签,容易造成数据重复读取、隐私泄露。

POST方法

基本定义

POST 是 HTTP 请求方法,用于向服务器提交数据,常用来新增、提交数据。

POST 提交的数据存放在 HTTP 请求体

核心特征

  1. 数据存放于请求体(Body) 参数不在 URL 中,地址栏看不到提交的数据。
  2. 理论上无大小限制 不受 URL 长度约束,可以传输大量数据(文件上传基本使用 POST)。
  3. 浏览器默认不会缓存 POST 请求,无法直接保存为书签
  4. 多用于提交表单、上传文件、登录操作。

登录mysql

Mysql的内置数据库

数据库的结构:数据库服务器 → 数据库(Schema) → 数据表(Table) → 行 (记录)、列 (字段)

information_schema

信息数据库。保存着mysql中所有其他数据库的信息,数据库名,数据库中的表、表中的字段等。三个重要表名:

schemata表

  • 功能:存储该用户创建的所有数据库的库名
  • 核心字段:schema_name
  • 含义:全部数据库名称

tables表

  • 功能:存储用户创建的所有数据库的库名和表名
  • 核心字段
    • table_schema:数据表所属于的数据库名
    • table_name:数据表名

columns表

  • 功能:存储用户创建的所有数据库的库名,表名,字段名
  • 核心字段
    • table_schema:数据库名
    • table_name:数据表名
    • column_name:字段名

逻辑关联

table_schema(数据库名)

  ↓包含

table_name(数据表名)

  ↓包含

column_name(字段名)

select查询

复制代码
#打开某个数据库
use 数据库名;

#查看数据库中的表
show tables;

#显示所有字段
select * from 表名;

#显示指定字段
select 字段1,字段2 from 表名;

limit的用法

格式:limit m ,n

m :起始偏移位置(省略时默认从0开始计数)

n:取出多少条记录

order by的用法

order by n:按第 n 列排序;通过增减数字观察页面响应,判断查询拥有多少列。

数字≤真实列数,页面正常;数字>真实列数,SQL 报错。

注释符

字符类

在页面有文本框输入时可使用字符类注释符

2.--空格

3./**/

4.--+

URL编码类

在页面文本框输入数据提交后,若为GET 提交方式 ,输入的数据会拼接在 URL 后方传递给网站。 在 URL 中传输参数时,浏览器会自动对特殊字符执行URL 编码

URL 规范中,空格、单引号、#、&、+ 等字符拥有特殊含义;直接放在 URL 会破坏参数结构。编码后转为安全十六进制形式,保证数据完整传输。

' 的编码标识为%27 + 表示空格 %3D是=的URL编码%23:等价于#

URL 常用特殊字符编码对照表

原始字符 URL 编码 说明
空格 %20 / + GET 参数内+代表空格;%20通用
' 单引号 %27 字符型注入高频
# %23 URL 中 #代表锚点,浏览器截断请求,注入必须编码
& %26 用于分隔多个参数
+ %2B 原始加号需要传输时编码

dvwa low级别SQL注入

文本型注入

客户端输入的数据被作为字符串带到了select查询语句的一对单引号中。

查看关键源码

变量query的值是一个select查询语句,然后调用mysqli_query()函数执行这个查询

分析查询语句:

$id是来自客户端输入数据

复制代码
当输入的值为 ' or 1=1 #时
查询语句变成:
where user_id ='' or 1=1#' 
#将最后的单引号给注释,使其并不发挥作用
结果恒为真,则显示了所有的用户信息

使用的payload

复制代码
' or 1=1 #

第一个单引号是为了与原代码中的左侧单引号闭合,使其成为一对,

#是为了将原代码中右侧的单引号注释,这样在mysql中执行select查询时,原本最后的单引号就被忽略了

数字型注入

不需要闭合符号

常见select语句

复制代码
select * from admin where id=$id;

特点:变量$id没有单引号包裹,直接传入数字

判断文本型,数字型注入的方法

检测网站是否会对传入的数据进行数值运算,如果做数值运算,就是数值型注入。

相关推荐
TDengine (老段)2 小时前
已有TSDB?一条配置,免费解锁AI数据管理平台
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
啦啦啦啦啦zzzz2 小时前
oat++框架应用之do、dao、service
服务器·c++·mysql·oatpp
暖和_白开水2 小时前
数据分析agent(十三_5):meta_demo:mysql
mysql·数据挖掘·数据分析
海兰10 小时前
【数据库】tdsql(mysql8.0)优化思考三
数据库·redis
煎饼学大模型11 小时前
Agent 的“大脑-手“解耦架构:当推理层和工具执行层各自独立演进
数据库·人工智能·oracle·架构·agent
Lucifer三思而后行12 小时前
Veeam 备份 Oracle RAC 失败,是归档删除脚本的锅!
sql
暖和_白开水14 小时前
数据分析agent(十三_3):docker mysql容器镜像服务的异常错误
mysql·docker·容器
千河殇 多想和她14 小时前
线上 Redis 突然“爆”了,怎么办?
数据库·redis·bootstrap
muddjsv15 小时前
SQLite数据库文件机制详解:journal、wal、shm文件作用与备份避坑
数据库·sqlite