SQL注入快速检索FLAG

发布于 2022-11-24  381 次阅读


  • 常用的正则有三个,like,rlike和regexp

正则

使用方法

like:

1. 格式是A like B,其中A是字符串,B是表达式,表示能否用B去完全匹配A的内容,返回的结果是True/False。

2. B只能使用简单匹配符号 和%,””表示任意单个字符,字符”%”表示任意数量的字符。

3. like的匹配是按字符逐一匹配的,使用B从A的第一个字符开始匹配,所以即使有一个字符不同也不行。

name like 'zh%';表示匹配以zh开头的
name like '_zh_';表示匹配包含zh的
1、模糊查询字段中包含某关键字的信息。

如:查询所有包含“希望”的信息:select * from student where name rlike '希望'

2、模糊查询某字段中不包含某关键字信息。

如:查询所有包含“希望”的信息:select * from student where name not rlike '希望'

3、模糊查询字段中以某关键字开头的信息。

如:查询所有以“大”开头的信息:select * from student where name not rlike '^大'

4、模糊查询字段中以某关键字结尾的信息。

如:查询所有以“大”结尾的信息:select * from student where name not rlike '大$'

5、模糊匹配或关系,又称分支条件。

如:查询出字段中包含“幸福,幸运,幸好,幸亏”的信息:

select * from student where name  rlike '幸福|幸运|幸好|幸亏'
regexp用法类似rlike

^   匹配输入字符串的开始位置。(前缀)
$   匹配输入字符串的结束位置。(末尾)

如:regexp('^f'),表示匹配以f开头的字符串,通常加在判定语句的后面

本地测试

  • dos进mysql,给tset表插几个数据
./mysql.exe -u root -p

show databases

use test;

show tables

desc user;

select * from user

insert into `user`(`id`,`name`,`sex`)values('1','zhang','m');//注意括号里面是引号不是反引号,不然就会报错

insert into `user`(`id`,`name`,`sex`)values('1','zheng','m'),('1','li','w');

select * from user where name regexp('^zh');

结论

  • 测试发现 select * from user where name regexp('^zh');//可以匹配出两个结果,如果平时做题只有一个显错位就加个limit,可以避免group_concat()显示不全,limit又得一点一点翻的问题
  • select * from user where name like 'zh%';和上面的语句效果一样
  • rlike有一些问题,暂时不用它吧

翻转

  • reverse翻转只能用于输出数据的翻转,比如
http://127.0.0.1/sqli-labs-master/Less-3/?id=1%27)%20and%20extractvalue(null,concat(0x7e,reverse(database()),0x7e))%20--+
这个是可以起作用的
http://127.0.0.1/sqli-labs-master/Less-3/?id=1%27)%20and%20reverse(extractvalue(null,concat(0x7e,database(),0x7e)))%20--+
而这个把命令执行函数也翻转进去了是不起作用的
届ける言葉を今は育ててる
最后更新于 2024-02-07