代码审计学习-3


title: 代码审计学习-3
comments: false
date: 2016-09-20 22:34:01
categories: 安全
tags: 代码审计

文件操作漏洞包括:文件包含,文件读取,文件删除,文件修改以及文件上传漏洞。
这里只讲文件读取,文件删除漏洞。

文件读取

文件读取函数

危险函数包括
file_get_contents(),highlight_file(),fopen(),readfile(),fread(),fgetss(),fgets(),parse_ini_file(),show_source(),file() 等。
函数简单讲解,更具体的参考PHP手册。
file — 把整个文件读入一个数组中
file_get_contents — 将整个文件读入一个字符串
highlight_file — 语法高亮一个文件
fopen — 打开文件或者 URL
readfile — 输出文件
fread — 读取文件(可安全用于二进制文件)
fgetss — 从文件指针中读取一行并过滤掉 HTML 标记
fgets — 从文件指针中读取一行
parse_ini_file — 解析一个配置文件
show_source — 别名 highlight_file()

例子1

源码如下:

$siteskin=$_request['skin'];
$file=dirname(__FILE__)."/template/".$siteskin."/index.htm";
if (file_exists($file)==false){
WriteErrMsg($file.'模板文件不存在');
exit;
}
$fso = fopen($file,'r');
$strout = fread($fso,filesize($file));
。。。。。。
echo  $strout;

其中 s i t e s k i n 的 值 由 用 户 输 入 , 拼 接 成 siteskin的值由用户输入,拼接成 siteskinfile的路径,但是当输入?skin=../../../etc/passwd%00时,如果存在00截断就会造成漏洞。

例子2

phpcms <=v9.15任意文件读取,漏洞位于/phpcms/modules/search/index.php的public_get_suggest_keyword函数。

public function public_get_suggest_keyword() {
        $url = $_GET['url'].'&q='.$_GET['q'];

        $res = @file_get_contents($url);
        if(CHARSET != 'gbk') {
            $res = iconv('gbk', CHARSET, $res);
        }
        echo $res;
    }

$url由用户可控,然后使用file_get_contents读取url内容。
当输入&url=asdf&q=../../phpsso_server/caches/configs/database.php时可以读取数据库配置

文件删除

文件删除函数一般使用unlink()。
例子:

{
$xmlset=get_cache('baiduxml');
$xmldir = '../'.$xmlset['xmldir'];
echo $xmldir;
$file_name=$_POST['file_name'];
if (empty($file_name))
{
adminmsg("请选择文档!",1);
}
if (!is_array($file_name)) $file_name=array($file_name);
foreach($file_name as $f )
{
echo $xmldir.$f;
@unlink($xmldir.$f);
}
adminmsg("删除成功!",2);
}

file_name未被过滤,可以造成任意文件删除。

参考:
http://bbs.ichunqiu.com/thread-8432-1-1.html?from=csdna&utm_source=tuicool&utm_medium=referral
http://www.2cto.com/Article/201411/349376.html
《代码审计:企业级Web代码安全架构》

你可能感兴趣的:(web安全)