关于/proc目录
关于/proc/目录
Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
/proc/[pid],当查看当前进程的时候可以用/proc/self代替
cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
cwd — 指向当前进程运行目录的一个符号链接
environ — 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示
题目为羊城杯2021的web题
源代码为
<?php highlight_file('index.php'); error_reporting(0); $gwht= $_GET["gwht"]; $ycb= $_GET["ycb"]; if(preg_match("/flag/",$gwht)){ die('hack' ); } if(preg_match("/secret/",$gwht)){ die('hack' ); } include($gwht); if(isset($ycb)){ $url = parse_url($_SERVER['REQUEST_URI']); parse_str($url['query'],$query); foreach($query as $value){ if (preg_match("/Flag/",$value)) { die('not hit'); exit(); } } $YCB = unserialize($ycb); }else{ echo "what are you doing"; } ?>
发现有两个参数第一个可以包含文件,但是要绕过preg_match()发现绕不过去,会报错
然后非预期解(预期解还没找到,有找到的兄弟可以分享一下啊)
使用include包含日志文件,发现日志文件包含没有反应,应该是权限不够
然后想到包含/proc/self/
尝试遍历/proc/self/fd发现error日志和access日志。可以想到使用包含日志getshell但是插入到url中会进行编码无法构造php代码(这个问题可以使用burpsuit直接传代码就可以绕过url编码了),access日志还会记录ua头,尝试将ua头设置成php代码然后包含access日志
这里可以可以将php代码写入文件头,包含的时候会执行的所以可以写入<?php phpinfo();?>也可以写入一句话木马
然后获取flag