文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup

文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup

今天接着上次的pass1-10,给大家分享pass11-21的writeup,有喜欢的小伙伴希望点个赞。
再此之前,首先介绍一下%00截断和00截断

%00截断和00截断
了解%00实际上我们要先了解0x00,0x00实际上是一个十六进制表示方式,实际上就是表示ASCII码值为0,有些函数在处理这个字符的时候会把这个字符当做结束符,他们就读取到这里认为这一段结束了。

在文件上传时,如果遇到了白名单机制只允许上传jpg后缀的,在没有解析漏洞的情况下我们该怎么办?
JPG格式并不会被解析,那么我们需要绕过上传过滤。
假设我写了1.php%00.jpg传参之后,有些过滤都是直接匹配字符串,他强行匹配到了结尾是.jpg,然后允许上传,但是随着php函数去执行的时候他读取到0x00认为结束了,那么这个文件就变成了1.php。

%00实际上和00截断是一个原理,只不过%00是经过URL编码的,%00解码后就是0x00截断的那个字符。

pass-11
查看源码:
文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第1张图片发现黑名单的绕过方式都已经被过滤,因此我们这里就可以尝试%00截断
文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第2张图片这里我们把文件后缀修改123.php%00.jpg,发现可以成功上传。
上传之后复制图片地址打开,发现phpinfo()函数成功执行(这里传参需要删除后面的%00.jpg),当然也可以使用菜刀或冰蝎链接这里不再赘述

文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第3张图片
pass-12
查看源码:
文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第4张图片与上一关不同的是这一关采用了post传参的方式,post传参方式不经过URL解码,因此我们不能直接使用%00截断。
我们需要在burp中在Hex的适当地方添加00截断。
文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第5张图片
进入hex,在a标记的地方,把61改成00(这里加个a是为了方便找到位置修改)
文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第6张图片
pass-13—pass16

这几关都是图片马绕过。
pass-13 直接图片马绕过
pass-14 getimagesize图片类型绕过
pass-15 php_exif模块图片类型绕过
pass-16 二次渲染绕过
直接上传一个图片马都可以绕过,这里不再赘述。

接下来,首先了解一个定义——竞争条件是什么?
竞争条件”发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。
线程同步机制确保两个及以上的并发进程或线程不同时执行某些特定的程序段,也被称之为临界区(critical section),如果没有应用好同步技术则会发生“竞争条件”问题。
在我理解就是两只哈士奇(线程)同时去抢一个丢出去的飞盘(资源),不知道到底哪只能抢到,此处便形成了竞争。

那我们上传是和谁去竞争?
一般而言我们是上传了文件,上传了但是最后却因为过滤或者因为其他原因被删除了,那么我们可以使用条件竞争,我们实际上是和unlink,是和删除文件的函数进行竞争。

假如我不断的上传发包,然后我同时也不断的访问那个我们上传上去的文件的地址,我们就开始和服务器的函数比手速了,函数执行都是要时间的,如果我这边上传上去,且没有删除,那个时间可能很短,然后被我访问到了,岂不是就可以执行PHP了,我们就比服务器手速快了~
你可以上传一个php然后访问后,由这个php去写一个马

';file_put_contents('1.php',$a)?>

pass-17 条件竞争
开始和服务器比手速的时候到了,我们用burp模块抓包然后去爆破就行,一个不断上传,一个不断访问。

pass-18 条件竞争
这一关实际上还是条件竞争,只不过做了各种检查,其实还是一样的,只不过这一关要上传图片马,然后使用burp抓包爆破,一个不断上传一个不断访问。(这一关有bug,有时候不一定能跑出来)

pass-19
查看源码:
文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第7张图片这里又是一个00截断,做法和之前的%00截断没区别,这两个其实原理一样,这里主要是用到了move_uploaded_file() ,这是移动文件的函数,上传上去然后移动到这边重命名。又是post传参方式,所以需要在hex中添加00
文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第8张图片在Hex中把61改成00
文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第9张图片
上传之后复制图片地址打开,发现phpinfo()函数成功执行
文件上传解析漏洞(二)、Upload-labs-master11-19Wirteup_第10张图片

你可能感兴趣的:(Web安全,信息安全)