BUU_Web [SUCTF 2019]CheckIn

打开解题网址,一看就是文件上传:

BUU_Web [SUCTF 2019]CheckIn这里首先尝试了上传 一句话 php, 以及文本,测试后发现需要上传 jpg 格式图片,并且文件中不能含有 <? ,文件后缀不能是 php文件的所有后缀;到这里,涉及知识盲区了;翻看大佬wp 才明白这道上传题没有之前的那么简单;

  • 需要利用到一个 .user.ini 文件,以及利用GIF 文件头绕过exif_imagetype()检测;

  • 知识点
    .user.ini 文件

  • .user.ini文件是相当于由客户端控制的一个 php.ini文件,系统在执行php代码之前,会先对目录进行扫描,发现 .ini文件,则先执行 .ini文件,再执行php代码;

  • 利用:在.user.ini 文件中写入 auto_prepend_file函数或者 auto_append_file 函数;这两个函数的作用就是将 一个文件 例如 1.jpg包含到接下来要执行的php文件中去(如index.php),相当在 PHP文件中插入了一条 require(./1.jpg);

  • .user.ini利用条件
    1,服务器使用 CGI/FastCGI 模式
    2,对应目录下有可执行的php文件
    3,open_basedir没有被限制

  • auto_prepend_file 与 auto_append_file的区别
    auto_prepend_file 是在php文件加载前将 文件包含进 php文件最前面;
    auto_append_file 是在php文件加载后将文件包含进php文件末尾,(并且当文件调用了exit()时,该设置无效);
    因此通常使用 auto_prepend_file ;

  • .user.ini文件具体详情

  • .user.ini文件在渗透中的利用

  • 更多细节

解题:

既然php所有格式无法上传,只能是 jpg格式,并且不能包含 <? ,所以,可以制作一个图片马,实际上只是后缀为 jpg格式,并加上 GIF89a 文件头绕过exif_imagetype()检测:

BUU_Web [SUCTF 2019]CheckIn
同样,写一个 .user.ini文件,利用 auto_prepend_file 设置将 webshell.jpg 包含在index.php的最开头(注意这个.user.ini文件同样需要绕过 exif_imagetype()的检测):

BUU_Web [SUCTF 2019]CheckIn然后,开始上传文件,首先上传 .user.ini 文件:

BUU_Web [SUCTF 2019]CheckIn上传之后,将图片马(一句话)上传:

BUU_Web [SUCTF 2019]CheckIn访问 它给出的文件存放路径:

BUU_Web [SUCTF 2019]CheckIn看到我们写入显示的文件头了,上传成功;
到这里,有两种方法获取flag:
第一种 方法:

因为是 我的一句话木马是get方式获取参数,参数名为 cmd,所以可以构造payload:

?cmd=system('ls /');

BUU_Web [SUCTF 2019]CheckIn

?cmd=system('cat /flag');
或者 ?cmd=var_dump(file_get_contents('/flag'));

BUU_Web [SUCTF 2019]CheckIn直接在页面获取flag;

第二种方法
需要一句话木马是POST方式获取参数;
连接蚁剑,右键虚拟终端获取;
BUU_Web [SUCTF 2019]CheckIn