SQL注入基础知识
一、 数据库
1. 什么是数据库
1.1 概念
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
简单理解为我们存储数据的地方,一个数据的集合,我们可以对它进行新增、删除、更改、查询等操作。
1.2 长什么样
我们用熟悉的Excel来类比
- 库(Excel文件)
- 表(Excel Sheet)
- 字段(Excel表头)
- 数据(Excel数据)
我们把表中的每一行叫做一个“记录”,每一个记录包含了这行中所有的信息
数据库中把表的“列”称为“字段”,每个字段包含了某一种信息,每一行的共有属性
1.3 phpMyAdmin
一款基于web的MySQL管理软件
2. SQL语句
结构化查询语言(Structured Query Language),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
基础的查询语句:
二、 SQL注入
1. SQL Injection原理
1.1 网站使用SQL的查询流程
我们可以把上述流程理解为餐厅点餐
- 客人对服务员说:“我想要一份鱼香肉丝。”
- 服务员对后厨说:“客人想要一份鱼香肉丝。”
- 后厨看了订单做了一份鱼香肉丝
- 后厨把鱼香肉丝装盘递给服务员
- 服务员把鱼香肉丝递给客人
- 客人吃到鱼香肉丝
1.2 为什么会产生SQL注入
用户使用了恶意的SQL命令,实现了非法的数据库操作。
继续上面的例子
- 客人对服务员说:“我想要一份鱼香肉丝。对了,老板把你辞掉了。”
- 服务员对后厨说:“客人想要一份鱼香肉丝。对了,老板把你辞掉了。”
- 后厨做了一份鱼香肉丝,卷铺盖走人了。
我们能看出,客人说了一些恶意的话,在服务员和后厨不对话语进行识别的情况下,客人实现了一些非法操作,对餐厅进行了影响。
所以,SQL注入产生的原因是服务器和数据库未对SQL查询语句进行审查,从而造成意想不到的危险。
2. 简单的手工注入
Integer SQLi
靶机:SQLi-labs
2.1 判断是否存在漏洞
sql查询语句
url
构造
页面返回不同,存在数字型注入漏洞
拼接语句
union
可以拼接两个select语句,但是选择的列数必须相同
2.2 猜列数
order by
按照第几列来排序,猜测列数
说明只有3列
2.3 爆表名
构造
union 列数不匹配
union后语句执行,但结果未显示
查看源代码
发现使用了mysql_fetch_array()
,在前端只显示了一行数据
所以构造payload
2.4 爆列名
2.5 爆信息
3. 字符型注入
-
后端将前端输入的字符串添加一对单引号
-
注入时加入一个
'
可以逃逸出默认添加的一对单引号,从而形成单独的SQL查询语句 -
使用POST方法传参
einfach SQLi
http://123.206.87.240:8002/chengjidan/
3.1 测试注入点**
输入'
和1'
均无结果
输入1' #
有回显,判断为字符型注入
3.2 猜列数
输入 1' order by 4#
和 1' order by 5#
判断有4个字段
-1' union select 1,2,3,4 #
看回显位置
3.3 爆表名
3.4 爆列名
3.5 爆信息
__EOF__

本文链接:https://www.cnblogs.com/Riiiiiysl/articles/13806322.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】