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

SQL注入总结

一.sql注入

原理:当一个网站存在与用户交互的功能(如登录表单、搜索框、评论区等),并且用户输入的数据未经充分过滤或转义,直接拼接到后台数据库查询语句中执行时,就可能引发SQL注入漏洞。攻击者可以通过构造恶意输入,篡改原始SQL语句的逻辑,从而绕过认证、窃取数据、篡改记录甚至完全控制数据库。

sql注入分为数字型注入和字符型注入

数字型的判断语句是

 or 1=1 或者 or 1=2

字符型的判断语句要注意的是闭id前面的引号和闭合后面的引号或者注释掉后面的引号。

'1 or'1'='1    或者  '1 or 1=1 --+(#)#号在URL里不能用

当输入1‘时,数字型注入会这样显示,知道是数字型注入后使用数字型 id=1 or 1=1

字符型会这样显示,确认是字符型后输入id=1‘ and ’1‘=’1进行闭合MySQL里的分号


sql注入——union联合查询(当界面有有回显)

UNION 是 SQL 中的一个操作符,用于将两个或多个 SELECT 语句的结果合并成一个结果集。它要求所有 SELECT 语句的列数、数据类型必须一致。

联合查询注入语句构造步骤:

1.用order by + 数字 判断原有语句的列数

2.使原有语句查询为空

3.判断数据输出位置(回显位)

4.使用union 语句拼接目标数据的查询语句

实践

输入1’发现外面有引号包裹,说明是字符型

用order by查询列数

判断回显位,确保让原有查询语句为空

查询当前数据库

查询当前数据库下的表名并一行显示

一行显示函数 group_concat ()

-1' union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli' #

查询flag表里有哪些字段

2.报错注入

当遇到没有回显位,但是会有报错信息时,可以使用报错注入。

extractvalue()函数

作用:主要用于从 XML 文档中提取特定节点的值。通常与sql注入攻击相关联

注入语句:

extractvalue(1,concat(0x7,(select group_concat(schema_name))))

updatexml()函数

作用:mysql对xml文档数据进行查询和修改的xpath函数

注入语句:

 updatexml(1,concat(0x7e,(select database()),0x7e),1)

 0x3a :冒号

0x7e  ~

boolean 盲注

当页面只能显示1(条件为真)和0 (条件为假)的时候,就可能存在布尔盲注。

ascii(substr(sr1,第几位开始截取,截取几位))>90

截取到的字符转化成ascii是否大于90。

还可以用正则表达式 regexp ^[a-z] 

?id=1 and database() regexp'^a'--+

表示当前网站的数据库名第一个字符是否是a

时间盲注

特点:当前页面没有任何显示,看不出页面的变化。

if(left(database(),1)='s',sleep(5),0)

当条件为真时,就会执行延时 

sql injection——宽字节注入

大家不理解的话可以参考这篇文章https://blog.csdn.net/2401_89233381/article/details/144636215?ops_request_misc=%257B%2522request%255Fid%2522%253A%25226a8bf1179833fe7059c69a95dc548299%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=6a8bf1179833fe7059c69a95dc548299&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-144636215-null-null.142^v102^pc_search_result_base6&utm_term=%E5%AE%BD%E5%AD%97%E8%8A%82%E6%B3%A8%E5%85%A5&spm=1018.2226.3001.4187当网站用addslashe()函数转义时,该函数会在某些字符前面加‘ / ’转义,而且输入%df时转义函数就会在前面加入反斜杠,此时就变成这样/%df,而在GBK编码中会转成汉字。

宽字节注入的原理就是当网站使用GBK编码时,且对字符编码处理不当导致存在sql注入漏洞。

主要的两个转义函数 addslashe()、mysql_real_escape_string() 函数

base64 注入

就是将输入的字符使用base64编码

搜索型注入

%like%

 k%'and1=1--+

pikachu靶场

先输入1',发现是单引号闭合

输入

结果说明没有4列

输入order by 3,成功回显

1%' union select 1,2,3 # 

找到数据库

cookic 注入

原理还是一样,只是传参变成cookie(请求头)

抓包改包,看哪个界面会报错

http头部注入(user-agent)(referer)

insert into 输入的方式不能用注释的方式--+要用引号闭合

二次注入

原理是​攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。

注册好后登录,进入后更改密码

然后登录admin用新密码,成功登录

查看代码发现并没有做过滤,所以当admin’# 输入进来后,被’#当成闭合和注释了,就相当于是在给admin改密码

相关文章:

  • Android学习总结之Java和kotlin区别
  • Kotlin数据类在Android开发中的应用
  • Spark,配置历史服务
  • 【东枫科技】代理销售 NVIDIA DGX Spark 您的桌上有一台 Grace Blackwell AI 超级计算机。
  • 基于SSM实现的健身房系统功能实现一
  • 临床智能体AI与环境感知AI的融合:基于python的医疗自然语言处理深度分析
  • 【C++ Qt】常用输入类下:Combo Box/Spin Box/DataTimeEdit/Dial/Slide
  • 没有 Mac,如何把 iOS App 成功上架?
  • Windows系统修改Docker Desktop(WSL2)内存分配
  • Super VLAN配置
  • 开源模型应用落地-qwen模型小试-Qwen3-8B-推理加速-vLLM-Docker(二)
  • 【Java学习】反射
  • 了解一下OceanBase中的表分区
  • JVM堆的分代机制
  • 云计算与大数据进阶 | 21、可扩展系统构建
  • 谷歌在即将举行的I/O大会之前,意外泄露了其全新设计语言“Material 3 Expressive”的细节
  • 【测试开发】概念篇 - 从理解需求到认识常见开发、测试模型
  • 国标GB28181视频平台EasyCVR安防系统部署知识:如何解决异地监控集中管理和组网问题
  • Copilot for PPT 可直接用模板创建品牌演示文稿
  • css媒体查询及css变量
  • 央行宣布优化两项支持资本市场的货币政策工具
  • 罗马尼亚临时总统博洛让任命普雷多尤为看守政府总理
  • 五一上海楼市热闹开局:售楼处全员到岗,热门楼盘连续触发积分
  • 降雪致长白山天池景区关闭,有游客在户外等待一小时,景区回应
  • 经济日报头版评论:矢志奋斗筑梦青春中国
  • 三亚再回应游客骑摩托艇出海遇暴雨:俱乐部未配备足额向导人员,停业整改