原理(来源为网上):
1.为什么在文件后面加上<.jpg>和在数据包
PHP在对文件后缀进行判断时是对最后一个 <.xxx> 来判断的。这样我们修改过后的文件
名,PHP会将其判断为.jpg文件这样我们可以绕过对文件名的检测。
2.为什么我们对文件名修改过后还需要添加%00截断?
尽管我们知道我们上传的是一个PHP文件,但是如果不进行%00截断,我们上传的文件在服务
器上是以
当我们进行%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/ 是用户无法进行控制的