记一次对TP的另一种渗透想法

admin 2022年3月4日10:15:21评论139 views字数 2132阅读7分6秒阅读模式

前言

因为前阵子发表了一篇关于Thinkphp的文章到公众号里面,南5给我扔过来一个站让我试试。

初步想法

首先看了一下这个站,长这样

记一次对TP的另一种渗透想法


典型的金融诈骗类网站,第一个想法就是暴破,随便了一个用户名和密码,抓包看了看,没有枚举,没有枚举。

记一次对TP的另一种渗透想法


可能过程比较不好做,但是我想既然这个站能给到我,说明还是有可以利用的地方。

继续探测

对目标域名进行目录随意的书写,发现报错了,竟然是Thinkphp的Debug,版本为5.0.5

记一次对TP的另一种渗透想法


竟然是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,直接被拦,还是被某免费版的防火墙拦的。

记一次对TP的另一种渗透想法

这也就是说明这站的基本防护有防火墙,需要绕过防火墙。公开的exp是不行了,那么就试试TP最常见的以POST方式传参的exp。

_method=__construct&method=get&filter=call_user_func&get[]=phpinfo

记一次对TP的另一种渗透想法


竟然成了,也就是说是可以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页面中本来就有。

记一次对TP的另一种渗透想法


成功包含出日志了。下一步往日志里面写马,需要注意的是不能写一句话的马,需要进行加密,推荐哥斯拉

记一次对TP的另一种渗透想法


下面进行日志包含

记一次对TP的另一种渗透想法


“很好”,没有出来,直接报错,看来这个方法是没有把日志写进去的。

file_put_contents

这个函数的解释如下:

file_put_contents() 函数把一个字符串写入文件中。该函数访问文件时,遵循以下规则:如果设置了 FILE_USE_INCLUDE_PATH,那么将检查 *filename* 副本的内置路径 如果文件不存在,将创建一个文件 打开文件 如果设置了 LOCK_EX,那么将锁定文件 如果设置了 FILE_APPEND,那么将移至文件末尾。否则,将会清除文件的内容 向文件中写入数据 关闭文件并对所有文件解锁 如果成功,该函数将返回写入文件中的字符数。如果失败,则返回 False。

也就是说不存在的文件话,会创建一个文件,然后还可以将文件内容追加到文件末尾。这个函数没有在禁用函数里 面。此时,南5说让我考虑一下session。这个我第一次听说,于是,我问了一下度娘,有一篇文章有讲到如何用session 来绕过禁用函数。

session包含直接getshell

首先,我利用上面讲到的函数来将马写入session中,马通过base64加密后再用url进行加密,在此我用的哥斯拉的马

记一次对TP的另一种渗透想法


按道理应该在网站根目录下创建了一个名字为1.php的文件,那么我们先包含一次看看

记一次对TP的另一种渗透想法


成功包含出了session。这个时候直接访问目下的1.php,成功解析了。

记一次对TP的另一种渗透想法

上哥斯拉直接连,成功

记一次对TP的另一种渗透想法


本次实战不仅仅为了getshell,也是为了学习利用tp5的不同的getshell方法。尤其是对session包含的方法,体会到了不一样的感觉。

原文始发于微信公众号(雁行安全团队):记一次对TP的另一种渗透想法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月4日10:15:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次对TP的另一种渗透想法https://cn-sec.com/archives/815154.html

发表评论

匿名网友 填写信息