Jarvisoj-web phpinfo

题目入口:http://web.jarvisoj.com:32784/

一进来就看到源码
Jarvisoj-web phpinfo_第1张图片

简单分析之后知道考点是反序列化,注意到了关键字session_start(),这个函数是用于创建会话。但具体如何利用还是没有头绪。搜索了一下发现是考察关于session序列化选择器的漏洞。

具体原理可参考:https://www.cnblogs.com/sijidou/p/10455646.html

传入phpinfo参数查看phpinfo,找到了重要的参数
在这里插入图片描述百度了一下该参数

也就是说,可以利用session.upload_progress.enabled构造相应表单来上传文件。因为session.upload_progress.enabled=on,所以我们就可以post一个和session.upload_progress.name同名的变量,来使得我们上传的文件名写入session。。



    upload


   


       
       
       
   




借鉴了其他大佬构造的表单,注意PHP_SESSION_UPLOAD_PROGRESS值不能为0。

 

随便上传个文件,bp抓包

Jarvisoj-web phpinfo_第2张图片

修改filename,插入payload

Jarvisoj-web phpinfo_第3张图片

 

payload:|O:5:\"OowoO\":1:{s:4:\"mdzz\";s:38:\"print_r(scandir(\"/opt/lampp/htdocs\"));\";}

为何payload是这样的呢?这就是第二个关键点

session.serialize_handler决定了php存储session时用的序列化规则格式,而index.php设置php的handler和默认的php_serialize不同,所以出现问题。php_serialize存储的字符可以引入 "|" ,但以php格式取出时"|"会被当成键值对的分隔符。"\"将双引号转移,物理路径在phpinfo可以找到

Jarvisoj-web phpinfo_第4张图片

再次构造payload:|O:5:\"OowoO\":1:{s:4:\"mdzz\";s:88:\"print_r(file_get_contents(\"/opt/lampp/htdocs/Here_1s_7he_fl4g_buT_You_Cannot_see.php\"));\";}

Jarvisoj-web phpinfo_第5张图片

返回flag。

虽然大致原理明白了,但还是有点懵。。。。。。。。。

你可能感兴趣的:(Jarvisoj-web phpinfo)