主页 > 网络知识 > 渗透下的tp技巧,黑盒下对tp网站进行测

渗透下的tp技巧,黑盒下对tp网站进行测

距离tp5 rce漏洞公开已经过去两年多,但是在实战中仍然可以遇到很多thinkphp的框架,关于thinkphp的白盒分析文章和rce payload网上已经一抓一大把,所以本文主要以黑白盒结合的形式谈谈如何在黑盒下对tp网站进行测试。

tp5的渗透要点

(最最常规payload一把梭.哈的情况就不讨论了)

以下渗透思路以5.0.*列举

开启debug下的数据库连接

tp5.0.*在debug模式下如果在数据交互点构造如sql注入、空参数等方式使数据库查询等出错,在一定情况下可能导致数据库账号密码直接显示出来。(报错信息太细了不仔细容易忽略掉)

 

image

 

在debug模式下找注入点也可以通过报错语句进行构造,并且由于debug模式可能导致本来没有回显的注入变成报错注入。当然目标数据库无法外连的时候,这个注入就挺有用的了

 

image

 

关于log文件的利用

log文件是runtime/log目录下的,比较常见的路径类似 /runtime/log/2020001/01.log ,默认是启用的,关于该文件主要有以下三点利用方式。

1.关于http请求的部分

常见的log文件会记录http请求,如果对应的站点存在后台等登陆,可以通过记录请求中的cookie登陆后台。

 

image

 

2.关于构造sql注入

某些配置下日志还会记录sql语句的执行和报错,可以用于构造sql注入,但是一般这种利用比较少,需要先找到数据交互点然后和日志中记录的赋值以及报错一一对应

3.关于cache文件名

tp下通过缓存文件获取webshell是一个老生常谈的问题,白盒下理论上都说得通,但是实际上在使用该漏洞的时候是存在部分难点的,如生成cache文件的方式,cache文件名等。

在log文件中可能存在cache文件生成时的报错,这样可以确定目标tp的cache文件命名方式等,举个例子:

在某次渗透中目标tp的log文件

 

image

 

可以注意到这里由于生成缓存文件出错,导致直接将缓存文件的文件名输出。根据输出的缓存文件名去猜测生成规则,由于tp5的缓存文件命名默认是md5(value),所以大部分时候可以把文件名等带进value进行比对。

这里通过猜测和比对确定是view的文件绝对路径生成的cache文件名。

 

image

 

一般来说使用php原生的md5函数去生成md5比较稳妥,笔者为了方便直接在线加密的。

这里基本上就排除了cache getshell的一大难题。之后正常去寻找能进库的交互点,比如发帖,留言这种,就能想办法获取webshell了

tp5路由

thinkphp系列的官方开发文档是期望网站运维人员将public设置为web根目录,即使用./public/index.php作为入口文件。在实际的渗透过程中由于thinkphp是框架涉及很多二次开发,部分开发人员会选择自定义一个入口文件而不置于public目录下,如/var/www/html/index.php的形式。这里会涉及到打exp的路由问题,由于部分开发人员自定的入口文件可能导致调用的路径出现差异。

一般来说打exp的时候尽量使用./public/index.php来打,以下列exp为例

?s=index/ hinkpp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

可能会出现例如

?s=index/ hinkpp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 ?s=index/ hinkpp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 ?s= hinkpp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

等情况。

所以很多时候不是打一个exp无效就代表没洞,在黑盒测试的时候可能只是没有找对路由。

下面是实战中的案例

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!