前置知识1
MySQL5.0版本以后出现了information_schema,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。information_schema.columns和information_schema.tables类似
前置知识2
获得其他数据库名的前提是user()函数查询出来用户为root且为真实root权限
前置知识3
load_file():读取文件函数,读取文件的前提是知道网站的绝对路径,绝对路径获取常见方法下面有介绍
into outfile或者into dumpfile:导出函数
前置知识4
magic_quotes_gpc:魔术方法,MySQL4.0之后默认开启,开启之后会转义单引号、双引号等,所以在用到引号的地方都需要使用反斜杠防止转义,或者进行十六进制编码、宽字节等绕过
路径获取常见方法:
报错显示:inurl:edu.cn warning
遗留文件:phpinfo.php,漏扫工具一扫就出来了
漏洞报错:根据CMS漏洞搜索爆出路径的方法
平台配置文件:通过读取权限获取配置文件,不实用
爆破:配合工具爆破(没有办法的办法)
案例操作1 读取其它数据库信息
利用information_schema.schemata表爆出其他的数据库名称
利用information_schema.tables表爆出其中某个数据库的所有表名
接着爆出列名
爆某个列的字段
案例操作2 文件写入与读取操作
文件读取--load_file()
注意:
1.如果页面没有返回值而且确定代码无误,那么在mysql安装目录中的my.ini文件中的[mysqld]项下添加 secure_file_priv = ''即可
2.读取路径要用斜杠,如果是反斜杠需要用两个防止转义
3.引号被过滤时,将路径转换为十六进制数据
文件写入(写入木马文件)--into outfile
注意:
1.如果只能写入一些字符串而不能写入php代码,可能是因为魔术引号,需要绕过
防御方法
比较极端,在将参数带入到查询语句中执行之前使用is_int方法判断传递的参数是否为数字,不是数字就报错(十六进制也有字母,也算是字符串),这样MySQL联合查询注入就不会发生了。实战情况下这样的过滤不常见,一般都会写一个全局配置文件,专门用来过滤