代码编织梦想

有几个mysql内置的函数需要记住:

-- 有几个mysql内置的函数需要记住:
length(str):返回str字符串的长度。
substr(str, pos, len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len):跟上面的一样,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
使用ascii码来判断时,需要向我们的工具中加入ascii码的字典

常用的sql注入语句:

  1. and
    and:并且
    (1) .需要符合所有条件,这样的记录就会被查询出来。
    (2) .如果其中一个条件不符合则记录将被剔除掉。
  2. or
    or:或者
    (1) .只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来。
    (2) .如果不符合这些查询条件中的任何一条,这样的记录将被排除掉。
    (3) and和or的优先级:and优先
  3. order by
    order by:排序
    (1) .降序:desc
    (2) .升序:ASC
  4. where --后面加条件(满足则输出)

limit o,1 --限制(从第一条开始输出,1:只输出一次)

  1. union --联合查询(讲两条select语句连起来查询)
    注意,UNION 内部的 SELECT 语句必须拥有【相同数量】的列,列也必须拥有相似的数据类型
    同时,每条 SELECT 语句中的列的顺序必须相同
    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL

  2. sql注入常用的函数
    6.1. version() —查看mysql版本信息

    6.2. user() —查看当前用户

    6.3. database() --查看当前使用的数据库

    6.4. @@datadir --查看数据库数据存放的路径

    6.5. @@version_compile_os --查看操作系统信息

  3. mysql管理数据库的常用命令
    7.1.show databases; --查看有多少数据库

    7.2.use 数据库名; --使用对应的数据库

    7.3.show tables;(先使用数据库) --查看有多少表

    7.4.desc 表名; --查看表结构(字段名)(方便插入数据)

    7.5.insert into 表名 (字段名…) value (数据(对应字段)) --插入数据
    7.6.select --查看数据

8.掌握information_schema数据库下的表及字段:
8.1. schemata表 —保存了所有的数据库名
字段schema_name --所有的数据库名

mysql> use information_schema;
mysql> select distinct schema_name from schemata;

字符说明:distinct ----去重

8.2. tables ----存放数据库名和表名的表
字段table_schema —tables表下存放数据库名的字段
字段table_name —tables表下存放表名的字段

mysql> use information_schema;
mysql> select distinct table_schema from TABLES;
mysql> select distinct table_name from TABLES;

8.3. columns ----存放字段名的表
字段column_name —columns表下存放字段名的字段

mysql> select distinct column_name from columns;

9.mysql注入-编码或变形-hex()
十进制----->16进制
mysql> select(hex(15));

字符串---->16进制
mysql> select(hex(‘B-A-D-A’));

以0x开头的16进制---->字符串
mysql> select concat(‘hello’,0x2D,‘world’);

10.mysql注入-编码或变形-ascii()
ascii码 可见字符基本是32到127
与hex()基本类似但不是转为16进制而是转为ascii码
字符串 -> ascii码
mysql> select(ascii(‘a’));

ord函数 和 ascii唯一的区别:多字节的字符处理
mysql> SELECT ord('为');
mysql> SELECT ASCII('为');
 
ascii码 -> 字符串
mysql> select char('77');

11.mysql注入-字符串-length()
mysql> select length(‘dsada’);

12.mysql注入-字符串-substring(),mid()
substring(),mid() ----取子字符串
取出字符串str里的第pos位开始 长度len的字符
2个参数的形式:
没有len参数表示 子字符串为 从pos位置开始到str的末尾 的字符串
SUBSTRING(str,pos)
mysql> select substring(’’,2); --从第二个字符开始到末尾结束

3个参数的形式:
最后一个参数len 即返回的子字符串长度(字符数)
SUBSTRING(str,pos,len)
mysql> select substring('<b></b>',2,2);	---从第二位开始长度为2(到第三位结束)

13.mysql注入-字符串-elt()
mysql> select elt(1,‘aa’,‘bb’,‘cc’); --选择出第一位并输出

mysql> select elt(3,'aa','bb','cc');		--选择出第三位并输出

14.mysql注入-字符串连接符-concat()
concat():没有分隔符连接字符串 --concat(str1,str2…)
mysql> use xindi;
mysql> select concat(id,dname) from t_depart;

mysql> select concat(id,0x2D,dname) from t_depart limit 1; --查询一条记录,让数据使用-好隔开

15.mysql注入-字符串连接符-CONCAT_WS()
CONCAT_WS(separator,str1,str2…) — separator:其他参数的分隔符
mysql> select concat_ws(’_’,id,dname) from t_depart limit 1;

如果分隔符为 NULL,则结果全为 NULL
mysql> select concat_ws(null,id,dname) from t_depart limit 1;
 
会忽略后面参数中的null 相当于sql语句中没写 null。
mysql> select concat_ws('_',null,id,dname) from t_depart limit 1;
 
空字符串 和普通字符串一样被连接
mysql> select concat_ws('_',id,'',dname) from t_depart limit 1;

16.mysql注入-字符串连接符-group_concat()
group_concat(str1,str2…) --连接一个组(整个表)的所有字符串,一’,’号分割
mysql> select group_concat(id,dname) from t_depart limit 1;

17.mysql注入-报错注入-rand()
floor()函数 取小于该数字的最大整数
mysql> select floor(5.1);

mysql>  select floor(2.9);
 
rand()函数  返回一个随机浮点数v,取值范围为0 < v=< 1.0
mysql> select (100*rand());	---获取一个随机浮点数(0-100),rand()默认0 < v=< 1.0

rand(0)是固定的mysql> select (rand(0));

floor *2取整永远是同一个整数

mysql> select floor(rand(5)*2);

18.mysql注入-报错注入-extractvalue()
extractvalue(XML_document, XPath_string):第一个参数:XML_document是String格式;第二个参数:XPath_string (Xpath格式的字符串)
mysql> select (extractvalue(1,concat(0x7e,(select user()),0x7e)));
查看concat()连接函数
mysql> select concat(user(),floor(rand(0)*2));
19.mysql注入-报错注入-updatexml()
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式
第二个参数:XPath_string
第三个参数:new_value
与 extractvalue() 函数区别是 第三个参数替换了节点字符串,返回值是整个改变后的XML文档
#使用方式

select updatexml(666,/html”,888) #返回888
mysql> select (updatexml(1,concat(0x7e,(select user()),0x7e),1));

20.常用函数-xml解析-extractvalue()
mysql> SET @temp_xml = ’
'> <?xml version="1.0" encoding="UTF-8"?>
'>
'>
'> AODB
'> 800495
'> 20171226114530
'> FLOP
'> STND
'>
'>
'> 4666481
'> Y20
'>
'>
‘> ‘;
mysql> select extractvalue(@temp_xml,’/MSG/FLOP/STND’);

21.sleep
关键判断函数:sleep(6)
延时6秒
手工测试 两者对比明显有延迟
http://127.0.0.4/Less-1/index.php?id=1′ and sleep(0) –+
http://127.0.0.4/Less-1/index.php?id=1′ and sleep(10) –+
理论依据:
if是mysql自带的函数,条件如果是执行第二个参数,否执行第三个参数
if(condition,true,false)
if(条件,条件为真的话执行函数,条件为假的话执行函数)
sleep函数放在参数2的位置上 则条件为真就执行 参数2处的sleep(6)
sleep函数放在参数3的位置上 则条件为假就执行 参数3处的sleep(6)

mysql> select if(1,sleep(2),0);

22.恒为真的语句

mysql> select now();
mysql> select sysdate();
mysql> select sysdate()=now();
 
select if(now()=sysdate(),sleep(2),0);

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/xt_beginner/article/details/110952154

presto体验-爱代码爱编程

环境配置 Linux 内存 6G 不建议内存过低,容易一执行语句就会闪退 ,本配置的是一个 coordinator与worker在一起的,推荐一篇文章 https://segmentfault.com/a/1190000014833443 JAVA openjdk version "1.8.0_272" OpenJDK Runtime Environm

数据库面试要点:关于MySQL数据库千万级数据查询和存储-爱代码爱编程

摘要:百万级、千万级数据处理,核心关键在于数据存储方案设计,存储方案设计的是否合理,直接影响到数据CRUD操作。总体设计可以考虑一下几个方面进行设计考虑: 数据存储结构设计;索引设计;数据主键设计;查询方案设计。 百万级、千万级数据处理,个人认为核心关键在于数据存储方案设计,存储方案设计的是否合理,直接影响到数据CRUD操作。总体设计可以考虑一下几

Bireme实时同步mysql数据,debezium+kafka+bireme,同步到Greenplum,MongoDB,PostgreSQL-爱代码爱编程

1、Bireme简介。 Bireme 是一个 Greenplum / HashData 数据仓库的增量同步工具。目前支持 MySQL、PostgreSQL 和 MongoDB 数据源 文档官方:https://github.com/HashDataInc/bireme/blob/master/README_zh-cn.md  Bireme工作原理 B

搭建个人服务器——Centos7 安装mysql8-爱代码爱编程

Centos7 安装mysql8 准备工作①安装前清理原有的mysql数据库② 删除CentOS7默认的数据库mariadb开始安装安装完毕,配置mysql参数配置结束,文章结束...后记 准备工作 该教程为在线安装mysql8,若没有网络环境的看官,可以关闭该博客了~ ①安装前清理原有的mysql数据库 rpm -qa | grep

bilibili用户信息爬虫(全网最全)-爱代码爱编程

bilibili用户信息爬虫 bilibili用户已经突破7亿了(根据UID来看) Github: Leopard-C/BiliUserSpider 0. 成果 bilibili御坂网络计划:https://misaka.sisters.top 备用网址:https://misakasisters.bilibiliq.com 只

Mysql:LIMIT的用法-爱代码爱编程

使用范围 MySQL语句中的limit字句可以帮助我们在使用执行查询的时候,返回数据库中间的数据或者是只提取前几段数据   使用语法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 它经常被用于强制 SELECT 语句执行时只返回指定的记录数。   SELECT *