文件上传

在这里插入图片描述找到了一张图 感觉总结的很精确。但是解决方法不止图中一种,比如js检测的可以用burp绕过。
//
第四关 .htaccess绕过
还是首先看源码,发现过滤了所有的后缀名,
$deny_ext = array(".php",".php5",".php4",".php3",".php2",“php1”,".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",“pHp1”,".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");

if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES[‘upload_file’][‘tmp_name’];
i m g p a t h = U P L O A D P A T H . ′ / ′ . d a t e ( " Y m d H i s " ) . r a n d ( 1000 , 9999 ) . img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999). imgpath=UPLOADPATH./.date("YmdHis").rand(1000,9999).file_ext;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = ‘上传出错!’;
}
} else {
$msg = ‘此文件不允许上传!’;
}
} else {
$msg = UPLOAD_PATH . ‘文件夹不存在,请手工创建!’;
}
目前只知道php的各种12345格式,却都过滤完了。。。。在网上看的还有.htaccess格式没过滤。也就是图中总结的上传.htaccess. htaccess是阿帕奇服务器的一个配置文件,他可以修改阿帕奇配置。所以我们可以写一个htaccess文件来把jpg文件改成php文件并上传。在这里插入图片描述这样就可以把我的jpg文件在服务器里改成php文件并上传了。而且要把htaccess文件后缀名改为.htaccess才能起作用。
先上传htaccess文件,然后上传.jpg文件,然后服务器就会把jpg文件解析成php木马了。我自己搭的环境没有解析成功,应该用buu的环境才能解析成功。
//

第五关 大小写绕过
绕过了htaccess文件,但是没绕过大小写,因此可以修改字母大小写绕过。
直接把后缀名改成大小写混合就能绕过文件检测上传php文件了。

在这里插入图片描述//
第六关 空绕过
打开源码发现 用了strtolower($file_ext); //转换为小写 函数,把所有的文件名改成了小写,。因此不能再用文件大小写来绕过,可以用空绕过。我发现直接修改文件名加空格不行,只能在burp上修改文件名,php+空格。就能直接绕过了。绕过之后直接复制图片地址,连接蚁剑。
//

  第七关 点绕过
在第七关源码中我们可以看见一个函数trim($file_ext); 是首尾去空函数,因此空绕过就不行了,还有点绕过!同理,在burp上修改上传的文件后缀,加一个.就行了。

//
第八关 :: D A T A 绕 过 d e l d o t ( DATA绕过 deldot( DATAdeldot(file_name);源码中的这个函数就是去除点的函数。

还可以用:: D A T A 绕 过 p h p 在 w i n d o w 的 时 候 如 果 文 件 名 + " : : DATA 绕过 php在window的时候如果文件名+":: DATAphpwindow+"::DATA"会把:: D A T A 之 后 的 数 据 当 成 文 件 流 处 理 , 不 会 检 测 后 缀 名 . 且 保 持 " : : DATA之后的数据当成文件流处理,不会检测后缀名.且保持":: DATA,."::DATA"之前的文件名
他的目的就是不检查后缀名。
//
第九关。
str_ireplace(’::$DATA’, ‘’, f i l e e x t ) 源 码 中 利 用 i r e p l a c e 函 数 把 : : file_ext)源码中利用ireplace函数把:: fileext)ireplace::DATA字符置换成空了。因此要另寻新路, 由源码可以看出先删掉文件名的末尾的点,然后又去除空格,那如果把文件名后面的空格和. 都加上,那么再绕过的话就可以绕过了,所有再加个点就可以绕过了,改文件名为shell.php.空格. 也可以加 空格 点 空格 点 都可以绕过。
function deldot(KaTeX parse error: Expected '}', got 'EOF' at end of input: s){ for(i = strlen( s ) − 1 ; s)-1; s)1;i>0;$i–){
c = s u b s t r ( c = substr( c=substr(s, i , 1 ) ; i f ( i,1); if( i,1);if(i == strlen($s)-1 and $c != ‘.’){
return $s;
}

	if($c != '.'){
		return substr($s,0,$i+1);
	}
}

}这个是deldot的函数代码,分析一下,对于字符串s,从末尾向前,substr是返回字符串中的子串,定义的是返回一个字符,用来判断是否是点,循环判断,如果是点的话就去掉末位。而且只去掉一次。因此要用两个点,才能绕过。php .空格. 经过deldot函数后就剩php.空格 再经过空格过滤后就剩php.了 就可以绕过了
//
第十关
查看源码
str_ireplace($deny_ext,"", $file_name);此替换函数可以用双写绕过,直接改后缀名位pphphp
//
第十一关
白名单绕过,可以用%00阶段后面的后缀,从而绕过后缀名必须是jpg。shell.php%00.jpg ,另外,此关是用get请求的 可以用%00阶段。
第十二关
post传参比get安全,也是可以用%00绕过的 但是要在二进制里修改。
%00截断在get中被url解码之后是空字符,但在post中,%00不会被url解码,所有只能通过burp修改hex值进行截断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值