php 命令执行中 PHPSESSID 妙用
前言
之前刷CTF的时候,遇到一个命令执行的题,看大佬的WP是通过PHPSESSID传值,绕过waf,最近有时间复现了一下。
题目地址
http://39.99.135.23:9999/ ,VPS 12月10号过期,flag在web目录下的flag.php
查看源码
写得比较丑,不要太介意哈
没禁用任何函数,system() 可以直接用
但是过滤了flag,不能使用cat flag.php
使用PHPSESSID绕过限制
首先,设置 PHPSESSID 的值为 flag(本来想设置为 flag.php 的,但是不知为什么不可以,明明记得之前有这么用的,求大佬们帮忙解答)
然后,可以使用 session_id(session_start()) 获取 PHPSESSID 的值,即 flag,虽然没有直接得到 flag.php,但是通过拼接也很容易得到了
关于 session_id() 和 session_start() 简单的介绍
session_start() 启动 session
session_id() 获取 session_id
拼接payload,获取flag
?cmd=show_source(session_id(session_start()).'.php');
使用反引号绕过限制
其实这题还有个bug,由于没过滤反引号,可以构造如下payload
?cmd=system('cat `ls`|base64');
关于反引号的作用
反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。