iloveflag-blog

php 文件上传漏洞之%00截断上传

字数统计: 533阅读时长: 1 min
2018/06/20 Share

原理(来源为网上):

1.为什么在文件后面加上<.jpg>和在数据包后面加上修改后的文件名?
PHP在对文件后缀进行判断时是对最后一个 <.xxx> 来判断的。这样我们修改过后的文件
名,PHP会将其判断为.jpg文件这样我们可以绕过对文件名的检测。
2.为什么我们对文件名修改过后还需要添加%00截断?
尽管我们知道我们上传的是一个PHP文件,但是如果不进行%00截断,我们上传的文件在服务
器上是以格式保存也就是说这是一个图片文件,PHP是不会解析这个文件。
当我们进行%00截断后,服务器就会将%00后的<.jpg>进行截断,这是我们的的文件将以
的形式保存在服务器上,我们的一句话木马也就成功的时上传成功了。

在hex页面把空格替换成00

小记:在实验吧和火种ctf的题目中,Tip:在upload中更改,估计php中的判断是如果没有地址else就会报错或者默认文件名

上传a.jpg图片马

在upload中更改为a.php%00 然后url encode一下截断

获取flag

在做南邮的题目的时候发现原理不是这样,是uploads/ + file 所以当file为1,jpg的时候 填uploads/1.php%00

例题地址:(http://teamxlc.sinaapp.com/web5/21232f297a57a5a743894a0e4a801fc3/index.html)

好吧,回去看了下,火种的题目链接和南邮的是同一个,是我输了╮(╯▽╰)╭

Tip:%00的截断从php源码的角度来说,只有在上传路径可以根据用户控制的时候可以利用,以upload+file的方式保存在服务器上

如果只有file这个一个参数是用户可以控制的那么%00无法对白名单起效果,进入白名单之后%00之后的数据已经被舍弃掉了

以dvwa的high源码来分析:

文件保存的路径为hackable/uploads/ 是用户无法进行控制的

CATALOG