无名草
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

%00截断和 00截断
了解%00实际上我们要先了解0x00,0x00实际上是一个十六进制表示方式,实际上就是表示ascii码值为0,有些函数在处理这个字符的时候会把这个字符当做结束符,他们就读取到这里认为这一段结束了。
在文件上传时,如果遇到了白名单机制只允许上传jpg后缀的,在没有解析漏洞的情况下我们该怎么办?
JPG格式并不会被解析,那么我们需要绕过上传过滤。
假如我写了1.php%00.jpg 传参之后,有些过滤都是直接匹配字符串,他强行匹配到了结尾是.jpg,然后允许上传,但是php的函数去执行的时候他读取到0x00认为结束了,那么这个文件就变成了1.php。
%00实际上和00截断是一模一样的原理,只不过%00是经过URL编码的,%00解码后就是0x00截断的那个字符
条件竞争
什么是条件竞争
竞争条件”发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。
线程同步机制确保两个及以上的并发进程或线程不同时执行某些特定的程序段,也被称之为临界区(critical section),如果没有应用好同步技术则会发生“竞争条件”问题。
那我们上传是和谁去竞争?
一般而言我们是上传了文件,上传了但是最后却因为过滤或者因为其他原因被删除了,那么我们可以使用条件竞争,我们实际上是和unlink,是和删除文件的函数进行竞争。
假如我不断的上传发包,然后我同时也不断的访问那个我们上传上去的文件的地址,我们就开始和服务器的函数比手速了,函数执行都是要时间的,如果我这边上传上去,且没有删除,那个时间可能很短,然后被我访问到了,岂不是就可以执行PHP了~我就比服务器手速快了~
你可以上传一个php然后访问后,由这个php去写一个马
<?php $a = '<?php @eval($_REQUEST[\'a\'])?>';file_put_contents('1.php',$a)?>
靶场·大闯关
Pass-11 %00截断绕过
1.源码分析
白名单过滤,只允许指定的文件上传;
关键函数 move_uploaded_file()把上传的文件移动到新位置($img_path)
2.解题步骤
可以修改传参路径为tx.php,即就是文件上传的路径
再用%00截断,之后图片马就变为了可以利用的php文件。
Pass-12 %00截断绕过(二)
同11,但是文件的路径在POST传参里面,POST传参解析不出来 所以需要进行16进制转换 在hex中添加00
解题步骤
在路径后加上 tx.phpa,然后将a的ASCii码61 改为00即可
Pass-13 图片马绕过
解题步骤
直接上传图片马txtx.jpg,然后配合CGI解析漏洞获取 webshell
Pass-14 getimagesize图片类型绕过
解题步骤
方法同 13,只是这里要上传 gif图片马
合成命令:copy a.gif/b+tx.txt tx.gif
Pass-15 php_exif模块图片类型绕过
解题步骤
直接上传图片马,重新下载出来的图片马未受损,但这里不存在CGI解析漏洞,想要利用该图片马要利用其他的漏洞来实现。
Pass-16 二次渲染绕过
二次渲染:在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),处理后在放到网站对应的标签进行显示。
一般来说,二次渲染不影响Gif的头部信息。
解题步骤
从GIF文件的第四行写入 马,在上传该文件,然后利用CGI解析漏洞获取Webshell
Pass-17 条件竞争绕过
有些服务器采⽤的是先保存,再删除不合法⽂件的⽅式,在这种服务器中,可以反复上传⼀个会⽣成Web Shell的⽂件并尝试访问,多次之后 即可获得Shell。
解题步骤
1.通过上传的图片确认上传文件的存放位置 http://localhost/upload/
2.创建php文件,写入命令使其在目标服务器上生成一个一句话木马文件
3.上传1000.php,用Burp抓取该 Intruder模块的数据包
4.抓取1000.php生成的木马文件shell.php的 Intruder模块的数据包
5.一起跑包,等待 shell.php的生成
6.木马文件shell.php生成
Pass-18 条件竞争(二)
同17,只不过这里要上传图片马。
Pass-19 move_uploaded_file()截断
解题步骤
做法和之前的%00截断没区别上传木马图,抓包修改路径,然后将a的ASCii码61 改为00即可。
文件上传(二)常见问题
00截断和%00截断有区别吗?
没有任何区别,%00 仅仅是00的URL编码
00截断有限制条件吗?
高版本php不存在,5.4.45以上似乎就没有了
条件竞争实战可行性?
实战是可以行的
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
