利用条件:session文件路径已知,且其中内容部分可控。
php的session文件的保存路径可以在phpinfo的session.save_path看到。
session 的文件名格式为 sess_[phpsessid],而 sessionid 在发送的请求的 cookie 字段中也可以看到。
实例:“百度杯”CTF比赛 十二月场 notebook
tips:文件包含phpinfo是不是有新的发现。
打开页面,看见url可能存在文件包含,可以看到登录框,审查下元素,没发现,按照正常流程走一遍,注册admin/admin,居然还成功了,登录,显示欢迎admin,there is no flag。
接下来测试,先测试文件包含吧,将module的php换成空,我们可以控制要包含文件的后缀,包含一下题上提示的phpinfo.php,文件不存在。看能不能用php伪协议读取一下login和register的源码,未成功。然后测试下sql注入,在登录和注册页面好像都没有。
当我们没思路的时候就扫描一下目录。扫出robots.txt,访问得到php1nFo.php文件,访问得到php配置信息。我们目前可以控制的就是注册的用户名,接下来尝试下session包含。
在php配置信息中可以看到
图片.png
图片.png
open_basedir是可将用户访问文件的活动范围限制在指定的区域。注意用open_basedir指定的限制实际上是前缀,而不是目录名。 session.save_path就是session文件存在的位置。
举个例子: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是
可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。例如设置成:
"open_basedir = /dir/user/"
那么问题来了,我们只能控制/tmp目录,/var/lib/php5这个目录是包含不了的。。
这里用题给的tips文件包含phpinfo是不是有新的发现,文件包含php1nFo.php这个文件,可以看到
图片.png
session.save_path变了,我也不知道为什么。。
接下来session包含。
payload:?module=&file=../../../../tmp/SESS/sess_nlloqni0ef0tpqbt3jdj81rj75
图片.png
可以看到admin,接下来我们注册用户名为<?php system('ls'); ?>,登录后。依旧payload像上面,可以得到
图片.png
然后注册用户名<?php system('cat flag.php'); ?>,审查元素得到flag。
图片.png