赞
踩
开启:http://127.0.0.1/uploadlab/
1.js验证码分析
在客户端验证文件的后缀名,只允许.jpg,.png.gif文件上传
2.浏览器审计工具剔除JS
对于JS前端验证,直接删除掉JS代码之后就可以绕过JS验证。就是upload-labs的pass-1的删除check,这个是输入前端验证
3.burpsuite抓包修改
上传一个一句话木马,后缀是.jpg的文件
发给repeater模块,然后修改后缀为php,发送获得文件路径
浏览器访问
这时候就拿到shell
也可以简单利用
qqq=system("type flag.php");(linux系统)
qqq=system("cat ../flag.php");
qqq=system("dir");(windows系统)
4.菜刀链接
对于windows linux命令不了解,也可以直接使用菜刀连接
直接可以访问
1.MIME-Type介绍
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
2.验证MIME-Type代码分析
例如:这是是发生在服务端的验证
查看源代码分析 使用$_FILE[‘upload_file’][‘type’]获取上传文件的MIME-Type类型。其中upload_file是在表单中定义的。
3.Burpsuite绕过MIME-Type验证
首先上传文件抓包,利用Burpsuite工具截断HTTP请求,在Repeater重放修改MIME-Type类型绕过验证。image/jpeg
4.访问shell
再上一步修改完成后发给repeater模块
或者使用菜刀远程连接
1.基于文件后缀名验证介绍
对于文件上传模块来说,尽量避免上传可执行的脚本文件。为了防止上传脚本需要设置对应的验证方式。最简单的就是设置文件后缀名验证。
基于文件后缀名验证方式的分类:
1、基于白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
2、基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功。
2.基于黑名单验证代码分析
对于黑名单中的后缀名筛选。绕过黑名单可以通过寻找“漏网之鱼”,寻找某些可以被作为脚本执行同时也不在黑名单中。
3.测试
上传一个php一句话木马,发现存在黑名单,大部分情况可以再bp中测试
这里将一个小方法,利用Intruder模块进行枚举后缀名,寻找黑名单中没有过滤的后缀名。不需要自己手工测试。
以pass-3为例,首先抓包,然后以php为添加,加如事先准备好的字典,也就是php,php3,phtml等等,然后攻击,这样可以测试什么后缀可以使用
然后连接shell
1.htaccess介绍
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
其中.htaccess文件内容:
SetHandler application/x-httpd-php
设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行。不符合则报错。
2.配置文件http.conf
在Apache中如果需要启动 .htaccess,必须在http.conf中设置 AllowOverride
3.审计黑名单过滤代码
在黑名单中,没有对.htaccess进行过滤,可以直接上传.htaccess来设置使用php解析任意文件。
文件内容:SetHandler application/x-httpd-php
4.测试
步骤
抓包后缀改成.htaccess
把下面的一句话木马改成:<FilesMatch “123pinfo.jpg”>
SetHandler application/x-httpd-php
然后改成:一句话木马
把上面的文件名改成:123pinfo.jpg
Windows系统下,对于文件名中的大小写不敏感。例如:test.php和TeSt.PHP是一样的。
Linux系统下,对于文件名中的大小写敏感。例如:test.php和 TesT.php就是不一样的。
代码分析
可以清晰的看出,黑名单中增加了.htaccess的验证,但是缺少了对上传文件名获取的小写转换。
文件后缀名不一定必须在Burpsutie截断的HTTP请求中修改,可以直接修改文件后缀名进行上传。Pass-5为例
以pass-5为例
文件名后缀大小写混合绕过
1.空格绕过原理
Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单。
针对这样的情况需要使用Burpsuite阶段HTTP请求之后,修改对应的文件名 添加空格。
2.代码分析
经过代码分析可以看到代码没有对上传文件的文件名做去空格处理。存在添加空格绕过黑名单问题。
3.Burpsuite绕过验证
以pass-6为例
利用Windows系统的文件名特性。文件名最后增加空格,写成06.php ,上传后保存在Windows系统上的文件名最后的一个空格会被去掉,实际上保存的文件名就是06.php
1.号绕过原理
Windows系统下,文件后缀名最后一个点会被自动去除。
例如:
Windows下新建一个1.php.文件,查看会发现创建的文件是1.php。
2.代码分析
查看代码分析其中缺少去除文件名最后边点的处理,可以利用Windows系统特性,绕过黑名单。
3.验证
以pass-7为例
利用Burpsuite工具截断HTTP请求,上传文件加 . 绕过上传。就是在文件名后面加上. 但是访问的时候依旧访问1.php,因为windows会注释掉.
其他类似上一题
1.特殊符号绕过原理
Windows系统下,如果上传的文件名中test.php::
D
A
T
A
会
在
服
务
器
上
生
成
一
个
t
e
s
t
.
p
h
p
的
文
件
,
其
中
内
容
和
所
上
传
文
件
内
容
相
同
,
并
被
解
析
。
例
如
:
在
W
i
n
d
o
w
s
系
统
下
新
建
一
个
文
件
名
为
1.
p
h
p
:
:
DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。 例如: 在Windows系统下新建一个文件名为 1.php::
DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。例如:在Windows系统下新建一个文件名为1.php::DATA的文件,查看效果。但是在Window下新建的文件名中包含特殊符号不能成功新建。
2.代码分析
分析以下代码,发现没有黑名单过滤没有过滤掉 ::$DATA。
3.验证
以pass-8为例
Windows文件流特性绕过,文件名改成08.php::$DATA,上传成功后保存的文件名其实是08.php
然后访问的时候不需要带着$DATA
Pass-09:绕过黑名单验证(路径拼接绕过)
1.路径拼接绕过原理
在没有对上传的文件进行重命名的情况下,用户可以自定义文件名并在服务器中上传新建,就会造成对应的绕过黑名单。
例如:
用户新建 1.php.+空格+.
deldot删除最后一个点之后,不再进行删除,trim删除空格,那么最终上传的文件名为 1.php.。
利用Windows自动去除最后一个点,导致成功上传1.php。
2.代码分析
对代码进行分析,可得上传后的文件没有经过随机化重命名,直接保存在服务器上。
3.验证,以pass-9为例
修改文件名,绕过黑名单验证
原理同Pass-06,上传文件名后加上点+空格+点,改为09.php. .
代码编写过程中,只对黑名单中的内容进行空替换,因为只替换一次所以造成双写绕过。
例如:
1.phphpp
str_ireplace() 函数替换字符串中的一些字符(不区分大小写)。
该函数必须遵循下列规则:
如果搜索的字符串是一个数组,那么它将返回一个数组。
如果搜索的字符串是一个数组,那么它将对数组中的每个元素进行查找和替换。
如果同时需要对数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余元素将用空字符串进行替换
如果是对一个数组进行查找,但只对一个字符串进行替换,那么替代字符串将对所有查找到的值起作用。
注释:该函数不区分大小写。请使用 str_replace() 函数来执行区分大小写的搜索。
注释:该函数是二进制安全的。
3.验证,以pass-10为例
双写文件名绕过,文件名改成10.pphphp等格式
Pass-11:绕过白名单之00截断绕过
1.00截断原理
0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。
系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。
在PHP5.3之后的版本中完全修复了00截断。并且00截断受限与GPC,addslashes函数。
2.GET型00截断
GET型提交的内容会被自动进行URL解码。
注意:一定要关闭GPC,否则无法成功。
以pass-11为例
GET型的所以在上面拼接,/upload/123.php%00(这一题有一个疑问,虽然他是 GET型的但是抓包上面显示的是POAT,但是他的upload显示再上面)
然后访问
pass-12:POST型00截断
在POST请求中,%00不会被自动解码,需要在16禁止中进行修改00.
先上传一个.jpg文件,抓包,拼接…/upload/123.php 123pinfo.jpg
然后再hex找到,然后把空格的20改成00因为这是post型的
以pass-12为例
先增加…/upload/123.php 123pinfo.jpg
会显示上传失败然后
然后进行上传
方法一文件头绕过
方法二制作图片马
利用文件包含图片马
访问
http://127.0.0.1/uploadlab/include.php?file=./upload/3020220503100523.jpg
Pass-15 类似
二次渲染就是你上传的图片马,再上传到本地时候,中间会对图片进行渲染,也就是你插入的一句话木马会被改变,但是二次渲染对图片的内容会有一部分是不改变的,所以只需要找到没有改变的那部分,然后插入一句话木马,即可。
制作图片马
使用HxD查看图片马
上传图片,发现网页本地目录中存在二次渲染后的图片,这里的图片尽量找很小的,不然后面分析时候内容会很多
上传再后台文件找到
HxD软件打开该二次渲染后的图片会发现我们插入的代码<?php phpinfo(); ?>已经消失了
不过二次渲染会保留一些文件内容不会改变,所以我们要找到没有被渲染的部分,将其代码写入其中即可绕过二次渲染
对比发现 文件开始有部分没有被渲染,所以把一句话木马写入
再次上传,成功
1.竞争条件原理
网站逻辑:
1、网站允许上传任意文件,然后检查上传文件是否包含Webshell,如果包含删除该文件。
2、网站允许上传任意文件,但是如果不是指定类型,那么使用unlink删除文件。
在删除之前访问上传的php文件,从而执行上传文件中的php代码。
2.竞争条件代码分析
先进行上传,后进行判断与删除。利用时间差进行webshell上传。
3.测试
直接上传一个php文件,然后进行抓包,再reperter中发现upload等路径
将数据包发送至intruder下,如图操作
全部清除
修改一下线程
然后开始攻击,用另一个浏览器一直访问anbei.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了。
成功
Pass-19:二次渲染
Pass-20:%00截断
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。