0x00前言 {#0x00%E5%89%8D%E8%A8%803265}
本篇文章作者YanXia,本文属i春秋原创奖励计划,未经许可禁止转载。地址https://bbs.ichunqiu.com/thread-63302-1-1.html
去年的时候,想给学弟刷一点CNVD证书,遂去审计了些漏洞。今天与大家分享其中一个例子。
本文所采用的方法是黑盒+白盒审计来挖掘出漏洞。至于源码是怎么来的,方法有很多,本文不进行阐述。
0x01正文 {#0x01%E6%AD%A3%E6%96%879171}
首先,我先来到了一个软件升级的功能
正常来说,如果我们遇到了这种功能点一般会考虑到这里可能存在文件上传漏洞,所以我们来尝试上传一下
欧,连jpg文件这里看上去都上传失败了。如果正常我们黑盒测试的话,可能就认为这里可能是白名单的文件上传。只能上传特定的配置文件。但是没关系,我们去定位下他的源码
if(isset($_POST['mode'])) $mode=$_POST['mode'];
if($mode=="set")
{
$type=$_POST['ck'];
if($type == "radhttp") //http
这里先通过post传参mode来确定上传的模式
{
set_time_limit(0); //表示页面将持续运行
$http_os_dir = "/home/"; //设定了文件上传到的路径
chdir($http_os_dir); // //改变当前的目录到$http_os_dir
exec("rm -rf osVersion*");
$upload_file = $_FILES['file_upload']['tmp_name'];
$upload_file_name = $_FILES['file_upload']['name'];
if(!copy($upload_file,$http_os_dir.$upload_file_name))//将$upload_file的文件复制到/home/底下
{
add_optlog($sess_username,"osupload",GetIp(),"$LANG_HTTPUPOS_FAILD");
alert("$LANG_UPOS_FAILD","updateos.php");
}
所以说根据上面的逻辑来说,这里没有对上传的文件名进行如何校验。而是直接将文件利用copy函数复制到/home底下。
那么,我们上传后我们去访问一下文件试试。
可以发现,虽然提示的时候会提示失败,其实这里还是成功上传了的。
所以说,代码审计的好处在这里就可以体现出来了。如果我们直接黑盒的话,这个地方就挖不到了。
最后附上波学弟的cnvd
0x03 文末 {#0x03+%E6%96%87%E6%9C%AB9970}
挖CNVD证书其实还是挺容易的。先挑好一个5000w注册资金的厂商,然后想办法弄到他们产品的源码去审计就好了~~~
有机会的话,欢迎各位师傅们来我们学校~