前言
因为前阵子发表了一篇关于Thinkphp的文章到公众号里面,南5给我扔过来一个站让我试试。
初步想法
首先看了一下这个站,长这样
典型的金融诈骗类网站,第一个想法就是暴破,随便试了一个用户名和密码,抓包看了看,没有枚举,没有枚举。
可能过程比较不好做,但是我想既然这个站能给到我,说明还是有可以利用的地方。
继续探测
对目标域名进行目录随意的书写,发现报错了,竟然是Thinkphp的Debug,版本为5.0.5
竟然是5.0.5的版本,还开放了Debug,那么我的第一反应就是尝试这个版本的公开rce的exp,如下描述:
waf对eval进行了拦截,禁止了assert函数对eval函数后面的括号进行了正则过滤,对file_get_contents函数后面 的括号进行了正则过滤。
http://website/?%20s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&va%20rs[1][]=2.php&vars[1][1]=
试了一下这个exp,直接被拦,还是被某免费版的防火墙拦的。
这也就是说明这站的基本防护有防火墙,需要绕过防火墙。公开的exp是不行了,那么就试试TP最常见的以POST方式传参的exp。
_method=__construct&method=get&filter=call_user_func&get[]=phpinfo
竟然成了,也就是说是可以rce的。那么接下来就有一点要看了,看看PHP有没有开启 disable_function ,或者说 disable_function 有没有禁用掉更多的函数。
我把禁用的函数全部列出来了,基本上常见的都没了:
passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_al ter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcnt l_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued, pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_ge t_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_ex ec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
失败的日志包含
既然 disable_function 禁用掉这么多的函数,那么就用我之前遇到的一种方法来尝试一下:利用文件包含的方法, 包含出日志,最后往日志中写马。首先看看能不能包含日志,我用 think__include_file 函数进行包含,因为日志的路径在Debug页面中本来就有。
成功包含出日志了。下一步往日志里面写马,需要注意的是不能写一句话的马,需要进行加密,推荐哥斯拉
下面进行日志包含
“很好”,没有出来,直接报错,看来这个方法是没有把日志写进去的。
file_put_contents
这个函数的解释如下:
file_put_contents() 函数把一个字符串写入文件中。该函数访问文件时,遵循以下规则:如果设置了 FILE_USE_INCLUDE_PATH,那么将检查 *filename* 副本的内置路径 如果文件不存在,将创建一个文件 打开文件 如果设置了 LOCK_EX,那么将锁定文件 如果设置了 FILE_APPEND,那么将移至文件末尾。否则,将会清除文件的内容 向文件中写入数据 关闭文件并对所有文件解锁 如果成功,该函数将返回写入文件中的字符数。如果失败,则返回 False。
也就是说不存在的文件话,会创建一个文件,然后还可以将文件内容追加到文件末尾。这个函数没有在禁用函数里 面。此时,南5说让我考虑一下session。这个我第一次听说,于是,我问了一下度娘,有一篇文章有讲到如何用session 来绕过禁用函数。
session包含直接getshell
首先,我利用上面讲到的函数来将马写入session中,马通过base64加密后再用url进行加密,在此我用的哥斯拉的马
按道理应该在网站根目录下创建了一个名字为1.php的文件,那么我们先包含一次看看
成功包含出了session。这个时候直接访问根目下的1.php,成功解析了。
上哥斯拉直接连,成功
本次实战不仅仅为了getshell,也是为了学习利用tp5的不同的getshell方法。尤其是对session包含的方法,体会到了不一样的感觉。
原文始发于微信公众号(雁行安全团队):记一次对TP的另一种渗透想法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论