前言
上一回(http://bbs.ichunqiu.com/thread-13714-1-1.html)说到快速漏洞挖掘中的几个重点关注对象,命令执行,文件操作,sql注入。并且拿sql做为例子简单做了一次代码审计,今天换一个思路,从文件操作部分入手,毕竟 文件操作一个搞不好就是getshell,比起注入按部就班慢慢来可要爽快多了。
一、关注重点
对于文件操作部分来说,首先对php内置的文件操作函数的作用和特性要有一个大概的了解
file_get_contents()
file_put_contents()
move_uploaded_file()
readfile()
fopen()
file()
fputs()
fwrite()
…………
这些都是常用的文件读写类函数,一般文件类的漏洞直接搜索这些函数的调用,跟踪上下文参数传递过程就可以了。说起来挺简单 其实要一个一个调用看过去还是很费时间的,尤其是在快速漏洞挖掘中,对系统结构还不太熟悉,有些参数传递或者方法可能一眼看上去就懵比了。那么如何来快速发现一个文件类的漏洞呢。
审计文件类的漏洞,首先我会去看这套系统的上传部分。上传部分是已经构造完成的一套从输入到写入到输出的流程,如果其中存在问题,那么很可能直接就拿到shell。
上传漏洞被挖了这么多年,各类cms或多或少都会在上传部分做一些检查和限制,常见的检查有
1、[Math Processing Error]_FILES[‘file’][‘type’] 上传文件的类型,一般是与白名单比较。
3、[Math Processing Error]_FILES['file']['tmp_name'] 是否为合法的上传文件,当[Math Processing Error]_FILES[‘file’][‘tmp_name’]将是一个极大的安全威胁,如果处理文件上传的函数是copy 那么最轻都是一个任意文件读取的漏洞。
2、单独使用move_uploaded_file()函数处理上传文件,理由同上,move_uploaded_file函数也会判断是否为合法文件。减少系统存在变量覆盖漏洞时躺枪的概率。
3、文件名不可控且后缀名限制为某个数组的成员 比如
[PHP] 纯文本查看 复制代码
?
1
2
[Math Processing Error]filename = 'user_avatar_01' . [Math Processing Error]s];
接下来就看看我们的目标beescms
二、实战
先来看看beescms的上传部分代码
[PHP] 纯文本查看 复制代码
if(isset([Math Processing Error]_FILES[‘up’][‘tmp_name’])){
if([Math Processing Error]is_thumb=empty([Math Processing Error]_POST[‘thumb’];
[Math Processing Error]_POST[‘thumb_width’])?[Math Processing Error]_POST[‘thumb_width’]);
[Math Processing Error]_POST[‘thumb_height’])?[Math Processing Error]_POST[‘thumb_height’]);
[Math Processing Error]is_up_size = [Math Processing Error]value_arr=up_img([Math Processing Error]is_up_size,array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'),[Math Processing Error]thumb_width,[Math Processing Error]logo);
[Math Processing Error]value_arr[‘pic’];
if(!empty([Math Processing Error]str="<script type=\"text/javascript\">[Math Processing Error]str;
exit;
}//图片上传
}else{
die(‘没有上传文件或文件大小超过服务器限制大小返回重新上传‘);
}
}
可以看到 用is_uploaded_file检查了上传文件是否合法,所以即使系统有变量覆盖漏洞(这套系统的确是有的,后面会说),也帮不上多大忙了
实际上传用的是up_img函数 接着跟过去看看
…………………………….略
查看全文请看这里》》》》》》》原文地址:http://bbs.ichunqiu.com/thread-13977-1-1.html?from=jike