Rips Scanners 本地文件读取漏洞分析

27 Dec 2015 - Tr3jer_CongRong

      RIPS是一个源代码分析工具,它使用了静态分析技术,能够自动化地挖掘PHP源代码潜在的安全漏洞。渗透测试人员可以直接容易的审阅分析结果,而不用审阅整个程序代码。由于静态源代码分析的限制,漏洞是否真正存在,仍然需要代码审阅者确认。RIPS能够检测XSS, SQL注入, 文件泄露, LFI/RFI, RCE漏洞等。

/rips-0.55/windows/code.php 第102行

$file = $_GET['file'];
$marklines = explode(',', $_GET['lines']);
$ext = '.'.pathinfo($file, PATHINFO_EXTENSION);


if(!empty($file) && is_file($file) && in_array($ext, $FILETYPES))
{
	$lines = file($file); 
	
	// place line numbers in extra table for more elegant copy/paste without line numbers
	echo '<tr><td><table>';
	for($i=1, $max=count($lines); $i<=$max;$i++) 
		echo "<tr><td class=\"linenrcolumn\"><span class=\"linenr\">$i</span><A id='".($i+2).'\'></A></td></tr>';
	echo '</table></td><td id="codeonly"><table id="codetable" width="100%">';
	
	$in_comment = false;
	for($i=0; $i<$max; $i++)
	{				
		$in_comment = highlightline($lines[$i], $i+1, $marklines, $in_comment);
	}
} else
{
	echo '<tr><td>Invalid file specified.</td></tr>';
}

$file为GET过来的,验证是否为文件,如果是就将其传入到数组,然后打印出来,算是本地文件读取吧。

      翻到RIPS前版本发现漏洞是同样存在的。

      相比来看利用的条件比前版本鸡肋一点,新版本验证了扩展名,而前版本可以读取文件的范围更广。

$ext = '.'.pathinfo($file, PATHINFO_EXTENSION);
if(!empty($file) && is_file($file) && in_array($ext, $FILETYPES))

跟踪到/rips-0.55/config/general.php 第49行

$FILETYPES = array(						// filetypes to scan
	'.php', 
	'.inc', 
	'.phps', 
	'.php4', 
	'.php5', 
	//'.html', 
	//'.htm', 
	//'.txt',
	'.phtml', 
	'.tpl',  
	'.cgi'
); 

      以上为RIPS新版本允许读取文件的扩展名,最后来个利用: