在从“PHPwritesdatatotempfile”到“phpremovestempfiles(ifany)”这两个实际操作中间的这段时间,我们可以包括这一缓存文件,最终取得getshell实际操作。但这在其中隐藏了1个深坑便是,缓存文件的文件名称咱们是不清楚的。因此这一应用的前提便是,须要有一点能得到到文件名称,比如phpinfo。phpinfo网页页面中会导出此次post请求的輸出信息内容,包括$_FILES变量值的值,在其中包括详细文件名称:
但第2个难题便是,即便咱们可以在目标站点上寻找1个phpinfo网页页面并获取到临时文件名称,这一文件名称也是这次post请求里的缓存文件,在此次post请求完毕后这一缓存文件便会被删掉,并不可以在后面的文件包含post请求中应用。因此这时须要应用到前提竞争(RaceCondition),基本原理也可以了解——咱们用2个及以上的进程来应用,在其中1个上传上传包给phpinfo网页页面,并获取回到结果,寻找临时文件名称;第2个进程取得这一文件名称后马上取得包括应用。
这是一个很梦想的模式,现实状况下咱们须要依靠依靠这种编号来提升通过率:应用很多进程来取得第2个实际操作,来让包括实际操作尽量早于缓存文件被删掉,假如目标环境打开了enable_buffering这一系统配置(在一些环境下是默认设置的),那样phpinfo的网页页面很有可能以流式的,即chunked编写代码的编号回到。那样,我们可以无须等到phpinfo彻底显示结束时就可以获取到临时文件名称,那样通过率会更高一些.我们可以在请求头、querystring里插进很多垃圾标识符来使phpinfo网页页面更高,回到的时间更久,那样缓存文件储存的时间更长。但这一编号在没有打开enable_buffering时是没有危害的。通过测试我发现了,无论目标环境是不是打开enable_buffering,都能够应用成功,很有可能仅仅通过率有一定的区别:
还没有评论,来说两句吧...