文件上传漏洞-解析、验证、伪造2

我们接着上一篇博客文章对upload_labs上传漏洞的讲解:

文章目录

      • %00截断绕过
      • %00截断绕过(二)
      • 图片马绕过
      • getimagesize图片类型绕过
      • php_exif模块图片类型绕过
      • 二次渲染绕过
      • 条件竞争绕过
      • move_uploaded_file截断

%00截断绕过

我们进入11关
文件上传漏洞-解析、验证、伪造2_第1张图片
本关的提示是%00截断,我们先不管,先看下源码
文件上传漏洞-解析、验证、伪造2_第2张图片
我们知道他会将上传文件进行重命名并存到指定路径中
文件上传漏洞-解析、验证、伪造2_第3张图片
由于存储路径是随着POST表单传递的,也就是我们能控制的
那我们能不能通过在存储路径进行%00截断
文件上传漏洞-解析、验证、伪造2_第4张图片
成功上传并将文件名成功截断,成功使其变为php文件
文件上传漏洞-解析、验证、伪造2_第5张图片
文件在上传的时候,会先将文件放到临时目录,再将文件转移到指定的目录并重新命名,在执行转移时php读取到%00时会将其当成一个结束符,然后并不会去读取后面的内容,所以我们上传一个jpg文件后,我们顺利通过%00截断后被当php文件去执行了,最后我们通过phpinfo(),验证是否上传成功
文件上传漏洞-解析、验证、伪造2_第6张图片
成功执行!

%00截断绕过(二)

我们进入12关:
文件上传漏洞-解析、验证、伪造2_第7张图片
发现与上一关很相似,只是有一个函数改为通过post进行传参提交路径文件名,我们先将一句话木马上传并抓包:
文件上传漏洞-解析、验证、伪造2_第8张图片
我们发现它是通过post进行传承,那我们再次进行00截断,但因为post是无法进行url编码的,所以我们通过hex值0x00进行截断
文件上传漏洞-解析、验证、伪造2_第9张图片
文件上传漏洞-解析、验证、伪造2_第10张图片
文件上传漏洞-解析、验证、伪造2_第11张图片
修改后上传,成功上传,如图
文件上传漏洞-解析、验证、伪造2_第12张图片
最后通过phpinfo(),发现截断成功,成功将重命名截断在文件名外;
文件上传漏洞-解析、验证、伪造2_第13张图片

图片马绕过

这关主要考验做图片马的能力,是否能绕过,但不能直接使用,必须配合解析漏洞或文件包含漏洞等,才可以发挥其效果,所以我们只要能将图片马成功上传绕过就算过关:
文件上传漏洞-解析、验证、伪造2_第14张图片
这题主要是对文件头的绕过,正常姿势上传文件马,成功上传:
文件上传漏洞-解析、验证、伪造2_第15张图片

getimagesize图片类型绕过

文件上传漏洞-解析、验证、伪造2_第16张图片
此关是对getimagesize的绕过:
getimagesize测定文件图片的大小并返回图片尺寸和类型;所以我们还是通过图片马上传:
文件上传漏洞-解析、验证、伪造2_第17张图片
上传成功!

php_exif模块图片类型绕过

文件上传漏洞-解析、验证、伪造2_第18张图片
这关是去读取图片一个字节并获取签名,简单点,还是去检测是否是一张图片,上传图片马:
文件上传漏洞-解析、验证、伪造2_第19张图片

二次渲染绕过

文件上传漏洞-解析、验证、伪造2_第20张图片
通过判断文件后缀与类型,合法才进行上传操作,上传之后通过二次渲染通过已上传图片生成新的图片,所以我们上传图片马仍然可以绕过过滤
文件上传漏洞-解析、验证、伪造2_第21张图片

条件竞争绕过

竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。
线程同步机制确保两个及以上的并发进程或线程不同时执行某些特定的程序段,也被称之为临界区(critical section),如果没有应用好同步技术则会发生“竞争条件”问题。

开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。比如当我们上传一个文件,但是因为过滤原因或其他原因被删除,那么我们实际上就是和UNlink 删除文件函数竞争;
假如我不断发包,在删除函数还没执行前,我们已经先把里面代码执行完毕了,那我们可不可以上传一个php,执行后,通过php里面代码去写一个马:

<?php $a='$_REQUEST[\'a\'])?>';file_put_contents('1.php',$a) ?>

这个php文件意思是将$a变量指向的一句话木马的内容写入到1.php中,如果文件执行了的话;
我们先将上面的php代码文件上传上去,并抓包
文件上传漏洞-解析、验证、伪造2_第22张图片
通过burp的爆破模块进行null payload进行不断访问,
文件上传漏洞-解析、验证、伪造2_第23张图片

直到文件代码执行比过滤删除函数快,这样,我们写入的$a就会被写入到1.php当中去,如果1.php这个文件不存在,会尝试创建一个1.php然后进行写入;
文件上传漏洞-解析、验证、伪造2_第24张图片
成功写入!!

move_uploaded_file截断

由于我们上次测试的靶场挂了,所以我自己搭建了一个靶场,所以有点不一样;
文件上传漏洞-解析、验证、伪造2_第25张图片
这里是一个move_uploaded_file的一个截断,move_uploaded_file函数是一个移动文件路径的函数,一般用来将存放于临时目录的上传文件移动到指定目录上去;我们先上传一个普通图片,来看看图片移动后的位置:
文件上传漏洞-解析、验证、伪造2_第26张图片
发现他把图片移动到上一级的upload文件上去了,但并没有重命名,那我们就可以控制它的文件名,那我们是否能通过进行截断绕过:
我们先进行上传一个图片马
文件上传漏洞-解析、验证、伪造2_第27张图片
上传并抓包
文件上传漏洞-解析、验证、伪造2_第28张图片
对文件名进行截断:
文件上传漏洞-解析、验证、伪造2_第29张图片
截断成功,文件成功上传!

你可能感兴趣的:(Novice)