详解如何利用sessionupload

什么是session.upload_progress?

与open_basedir、allow_url_fopen、allow_url_include等PHP配置一样,session.upload_progress也是PHP的一个功能,同样可以在php.ini中设置相关属性。其中最重要的几个设置如下:

session.upload_progress.enabled=onsession.upload_progress.cleanup=onsession.upload_progress.prefix="upload_progress_"session.upload_progress.name="PHP_SESSION_UPLOAD_PROGRESS"

session.upload_progress.enabled可以控制是否开启session.upload_progress功能

session.upload_progress.cleanup可以控制是否在上传之后删除文件内容

session.upload_progress.prefix可以设置上传文件内容的前缀

session.upload_progress.name的值即为session中的键值

session.upload_progress开启之后会有什么效果?

当我们将session.upload_progress.enabled的值设置为on时,此时我们再往服务器中上传一个文件时,PHP会把该文件的详细信息(如上传时间、上传进度等)存储在session当中。

问题1:

那么这个时候就会有一个前提条件,就是如何初始化session并且把session中的内容写到文件中去呢?

分析1:

我们可以注意到,php.ini中session.use_strict_mode选项默认是0,在这个情况下,用户可以自己定义自己的sessionid,例如当用户在cookie中设置sessionid=Lxxx时,PHP就会生成一个文件/tmp/sess_Lxxx,此时也就初始化了session,并且会将上传的文件信息写入到文件/tmp/sess_Lxxx中去,具体文件的内容是什么,后面会写到。

问题2:

当session.upload_progress.cleanup的值为on时,即使上传文件,但是上传完成之后文件内容会被清空,这怎么办?

分析2:

利用Python的多线程,进行条件竞争。

如何利用session.upload_progress进行RCE?

然而,理论再多也没用,还是得一步步调试,看看在文件上传的时候,整一个PHP服务端到底发生了什么。所以还是需要做实验。

首先,在网站根目录下随便新建一个test.php文件

然后写一个Python程序用于往服务器上上传文件:

这里有几个注意点:

上传的文件大小为50KB,文件名为Lxxx.jpg

该程序设置的sessionid为Lxxx,也就是说会在/tmp目录下生成sess_Lxxx文件

该程序设置的PHP_SESSION_UPLOAD_PROGRESS值为一句话木马,也就是说,在理论上,一句话木马会被写入到/tmp/sess_Lxxx中

importrequestsimportiourl="


转载请注明:http://www.aierlanlan.com/rzdk/6720.html

  • 上一篇文章:
  •   
  • 下一篇文章: