• App: yxcms
  • reference: https://cloud.tencent.com/developer/article/1075861

    0x01 分析

    在yxcms1.4.7之前,基础控制器中的isPost()方法没有验证token机制,使得后台许多功能可以csrf利用。这里提及的两处文件删除,有一处get方法的任意文件删除,这一处还是好使用的。
    protected\apps\admin\controller\filesController.php
    屏幕快照 2019-11-12 下午2.26.18.png
    这里的de_dir是一处目录删除。这里也是很直白的。但是到1.4.7没有修补,可能觉得是管理员功能,但是也没有防csrf。
    payload:http://127.0.0.1/yxcms1.4/index.php?r=admin/files/del&fname=/../1.txt

0x02 折腾

yxcms里有一个appmanage模块用来管理app插件的屏幕快照 2019-11-12 下午2.29.38.png
在1.4.7版本中,appmanage的index控制器中的getApp方法是这样的:

  1. <?php
  2. protected function getApp(){
  3. if(!preg_match("/^[a-zA-Z\s]+$/",$_GET['app']))
  4. {
  5. $this->error('请不要恶意操作');
  6. }
  7. return $_GET['app'];
  8. }

之前版本是这样的:

  1. <?
  2. protected function getApp(){
  3. $app = trim( $_GET['app'] );
  4. if( empty($app) ){
  5. $this->error('请不要恶意操作');
  6. }
  7. return $app;
  8. }
  9. }

加了正则,之前是有洞的,比如这个地方比较有意思:

  1. <?php
  2. //导出
  3. public function export(){
  4. $app = $this->getApp();
  5. $app_path = BASE_PATH . 'apps/' . $app . '/';
  6. //导出数据表
  7. config( appConfig( $app ) );
  8. $tables = config('APP_TABLES');
  9. if( !empty($tables) ){
  10. $tables = explode(',', $tables);
  11. $sql = model('appmanage')->exportSql( $tables );
  12. if( !empty($sql) ){
  13. file_put_contents(BASE_PATH . 'apps/' . $app . '/install.sql', $sql);
  14. }
  15. }
  16. //拷贝资源文件
  17. if( is_dir( 'public/' . $app ) ){
  18. copy_dir( 'public/' . $app, $app_path . $app);
  19. }
  20. $zip = new Zip();
  21. $filename = BASE_PATH . 'cache/tmp/' . $app . '.zip';
  22. $zip->compress($filename, $app_path, BASE_PATH . 'apps/'); //打包压缩
  23. del_dir( $app_path . $app); //删除资源文件
  24. Http::download($filename, $app.'.zip');//下载
  25. @unlink($filename);//删除文件
  26. }

业务功能是导出应用。$app可控, 主要看最后打包删除下载一条龙,@unlink($filename)文件删除漏洞了。
但是在删除之前会生成一个zip包,可以去拿zip包。
比如这一句:

  1. http://127.0.0.1:8888//yxcms/index.php?r=appmanage/index/export&app=../apps

他会把整个apps删了, 并且生成一个压缩包(当然这里),但是我想这个地方如果文件只有读权限,没有执行权限是不是可以不删除然后打包,不想搞了,太危险哈哈哈跑路…