0x01 其他

在分析yxcms的sql注入之前, 我看了一下appmanage模块下的index有个在线安装模块引起了我的注意:

  1. <?php
  2. //在线安装
  3. public function onlineinstall()
  4. {
  5. $url = $_GET['url'];//在线安装地址
  6. if( empty($url) ){
  7. $this->error('参数传递错误');
  8. }
  9. $content = file_get_contents($url);
  10. if( empty($content) ){
  11. $this->error('数据下载错误');
  12. }
  13. $zip_file = BASE_PATH . 'cache/tmp/' .md5($url) .'.zip';
  14. if( file_put_contents($zip_file, $content) ){
  15. $this->import($zip_file);
  16. }else{
  17. $this->error('数据写入错误');
  18. }
  19. }

image.png

直觉告诉我这个地方应该又问题。这是一堆死代码,但是可以通过url访问。他会通过url读入你的安装模块,并调用import方法。 1. 如果我能阻止import里的unlink,那么这个zip包就被file_put_contents到了可访问的位置,而且就算不unlink我也可以条件竞争啊。我没试,这是后台洞,我开个脚本一直抢,然后csrf?
image.png

  1. 再看import:
    屏幕快照 2019-11-13 上午11.45.12.png
    如果$zip_file存在的话,就完美绕过了$this->isPost()中的csrf检查。
    然后然后如果解压成功,我们只要满足app格式的要求在压缩包文件夹里放一个config.php, 那么就能把这个文件夹传到apps里面去。问题就在这里
    屏幕快照 2019-11-13 上午11.48.11.png
    这个解压功能不能用!正常功能也不能用,有没有人还在维护这个项目,帮我修复这个bug啊
    [11-13] yxcms 其他 - 图5