获取上传文件信息
实验目的
通过本实验,理解文件上传过程中上传文件的信息,为熟练掌握文件上传的过滤和绕过方法奠定基础。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/up/1/up.html
实验原理
处理文件上传功能时,会利用表单中的文件上传域,定义表单时必须设置enctype=”multipart/form-data”参数。在上传文件后,可以使用$_FILES[‘upfile’]访问文件的有关信息。
上传文件的相关信息:
1 |
|
实验步骤
1、登录操作机,打开“Google Chrome”浏览器,输入实验地址:http://ip/up/1/up.html
2、在操作机上准备要上传的文件(任意文件都可以),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,查看上传文件信息
实验总结
掌握文件上传的过程以及上传文件的信息
文件上传漏洞利用
实验目的
通过本实验,掌握文件上传的过程以及文件上传漏洞的利用,理解文件上传的利用条件和漏洞危害。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/up/2/up.html
实验原理
上传文件时,如果未对上传的文件进行严格的验证和过滤,就容易造成文件上传漏洞,上传脚本文件(包括asp、aspx、jsp、php等)
造成文件上传漏洞的成因(比较复杂)有:
- Web应用开放了文件上传功能,并且对上传的文件没有进行足够的限制
- 程序开发部署的时候,没有考虑到系统特性和过滤不严格
- 通过其他漏洞绕过限制
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/up/2/up.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,上传info.php文件
5、输入http://ip/up/2/upload/info.php,访问上传的info.php脚本文件,查看脚本文件nfo.php文件可以成功上传并解析
6、在操作机上新建muma.php的一句话木马文件
7、上传一句话木马文件
8、打开桌面tools文件夹的“中国菜刀(过狗)”,双击exe文件
9、在空白处鼠标右击,点击“添加”,添加shell地址
- 地址为:一句话木马地址和连接密码
- 脚本类型:PHP
10、点击“添加”,双击一句话木马地址
11、浏览器服务器,对任意文件进行操作,可以上传、下载等,成功上传后门文件,服务器沦陷
思考
1 |
|
实验总结
掌握文件上传的过程和文件上传漏洞的利用过程,利用文件上传漏洞上传木马脚本,通过WebShell工具连接后门,拿下网站服务器,理解文件上传的危害。
客户端检测与绕过之删除浏览器事件
实验目的
通过本实验,掌握文件上传客户端的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/1/upload.html
实验原理
文件上传的客户端检测主要通过前端的JS代码获取文件后缀名进行验证,后端PHP代码没有对文件做任何检测,因此只需要绕过客户端检测。
客户端检测的绕过方法有三种:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/1/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败
5、根据提示,需要上传“jpg”的图片文件,点击“确定”返回上传页面,鼠标右击,点击“查看元素”
6、定位到文件域位置,可以看到表单调用了selectFile()函数
7、追溯到selectFile()函数,双击展开函数代码
8、从代码中可以分析出:表单调用JS代码的selectFile()函数,先获取上传文件的文件名,然后将文件名转换为小写,再通过substr函数截取文件后缀名(包括.)进行判断。所以只需要不调用该JS代码,删除浏览器事件,即onsubmit=” “
9、点击“submit”按钮,再次上传文件,脚本文件成功上传
10、访问http://ip/upfile/1/upload/info.php,上传的脚本文件成功解析
实验总结
掌握文件上传的客户端检测原理以及通过删除浏览器事件,绕过JS代码的限制。
客户端检测与绕过之抓包修改后缀名
实验目的
通过本实验,掌握文件上传客户端的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/1/upload.html
实验原理
文件上传的客户端检测主要通过前端的JS代码获取文件后缀名进行验证,后端PHP代码没有对文件做任何检测,因此只需要绕过客户端检测。
客户端检测的绕过方法有三种:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/1/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建test.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败
5、根据提示,需要上传“jpg”的图片文件,打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
6、切换到“Proxy”代理模块的“Options”,查看Bp的代理
7、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
8、客户端只能上传jpg文件,将脚本文件test.php更改后缀名为test.jpg,再选中文件
9、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
10、将数据包中的后缀名再改为php,绕过客户端的检测
11、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
12、关闭浏览器代理
13、访问http://ip/upfile/1/upload/test.php,上传的脚本文件成功解析
实验总结
掌握文件上传的客户端检测原理以及通过Burp Suite抓包工具抓取数据包,修改文件后缀名绕过JS代码的限制。
客户端检测与绕过之伪造上传表单
实验目的
通过本实验,掌握文件上传客户端的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/1/upload.html
实验原理
文件上传的客户端检测主要通过前端的JS代码获取文件后缀名进行验证,后端PHP代码没有对文件做任何检测,因此只需要绕过客户端检测。
客户端检测的绕过方法有三种:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/1/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建1.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败
5、右击,点击“查看页面源代码”
6、可以看到表单调用了JS代码的selectFile()函数做过滤限制,并且表单提交到upload.php页面,所以伪造一个没有做任何过滤限制的表单同样提交到http://ip/upfile/1/upload.php即可,新建1.html文件
7、双击1.html文件
8、点击“浏览”,选择要上传的脚本文件1.php
9、点击“submit”按钮,再次上传文件,脚本文件成功上传
10、访问http://ip/upfile/1/upload/info.php,上传的脚本文件成功解析
实验总结
掌握文件上传的客户端检测原理以及通过伪造一个没有做任何限制的表单,数据依然提交到http://ip/upfile/1/upload.php,绕过原来的JS代码的限制。
后缀名检测与绕过之大小写绕过
实验目的
通过本实验,掌握文件上传服务端检测中的后缀名的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/2/upload1.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
后缀名检测的绕过方法也有很多,常见的有:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/2/upload1.html
2、在操作机上准备要上传的文件(脚本文件),比如新建1.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,不允许的后缀名
5、尝试利用大小写绕过,将脚本文件1.php更改为1.pHp,再次选择脚本文件
6、点击“submit”按钮,上传文件,脚本文件成功上传
7、访问http://ip/upfile/2/upload/1.pHp,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的后缀名检测原理以及通过大小写的转换来绕过后缀名的检测。
后缀名检测与绕过之名单列表绕过
实验目的
通过本实验,掌握文件上传服务端检测中的后缀名的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/2/upload2.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
后缀名检测的绕过方法也有很多,常见的有:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/2/upload2.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,不允许的后缀名
5、尝试利用大小写绕过,将脚本文件info.php更改为info.pHp,再次选择脚本文件
6、点击“submit”按钮,上传文件,依然失败,不允许的后缀名
7、尝试寻找黑名单列表之外可允许上传的文件后缀名进行绕过,将脚本文件info.php更改为info.php3或者info.phtml,再次选择脚本文件
8、点击“submit”按钮,继续上传文件,脚本文件成功上传
9、访问http://ip/upfile/2/upload/info.php3,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的后缀名检测原理,通过尝试利用大小写绕过以及寻找黑名单列表之外可允许上传的文件后缀名进行绕过。
后缀名检测与绕过之Windows特性(末尾的点【.】)绕过
实验目的
通过本实验,掌握文件上传服务端检测中的后缀名的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/2/upload3.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
后缀名检测的绕过方法也有很多,常见的有:
1 |
|
一些特殊的文件命名方式在Windows下是不被允许的,利用Burp Suite工具抓包修改后缀名,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的。
注:此方法只适应于Windows,因为Unix/Linux系统没有这个特性。
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/2/upload3.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,此文件不允许上传
5、尝试利用大小写绕过,将脚本文件info.php更改为info.pHp,以及尝试寻找黑名单列表之外可允许上传的文件后缀名进行绕过,将脚本文件info.php更改为info.php3或者info.phtml,再次选择脚本文件上传,依然失败,此文件不允许上传
6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
7、切换到“Proxy”代理模块的“Options”,查看Bp的代理
8、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
9、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
10、利用Windows特性,给文件名加“.”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php.
11、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
12、关闭浏览器代理
13、访问http://ip/upfile/2/upload/info.php.(访问http://ip/upfile/2/upload/info.php也可以),上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的后缀名检测原理,“【.】”在Windows下是不被允许的,利用Burp Suite抓包在文件后缀名处添加“【.】”,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的点(【.】)。
后缀名检测与绕过之Windows特性(空格【 】)绕过
实验目的
通过本实验,掌握文件上传服务端检测中的后缀名的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/2/upload4.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
后缀名检测的绕过方法也有很多,常见的有:
1 |
|
一些特殊的文件命名方式在Windows下是不被允许的,利用Burp Suite工具抓包修改后缀名,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的。
注:此方法只适应于Windows,因为Unix/Linux系统没有这个特性。
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/2/upload4.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,此文件不允许上传
5、尝试利用大小写绕过,将脚本文件info.php更改为info.pHp,以及尝试寻找黑名单列表之外可允许上传的文件后缀名进行绕过,将脚本文件info.php更改为info.php3或者info.phtml,再次选择脚本文件上传,依然失败,此文件不允许上传
6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
7、切换到“Proxy”代理模块的“Options”,查看Bp的代理
8、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
9、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
10、利用Windows特性,给文件名加“.”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php.
11、点击“Forward”,转发数据包,切换到浏览器,依然上传失败,后缀名不允许“.”出现
12、关闭浏览器代理,重新选择脚本文件
13、再次打开浏览器代理,点击“submit”按钮,上传文件并抓取数据包
14、利用Windows特性,给文件名加“(空格)”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php
15、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
16、关闭浏览器代理
17、访问http://ip/upfile/2/upload/info.php (访问http://ip/upfile/2/upload/info.php也可以),上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的后缀名检测原理,“【 】”在Windows下是不被允许的,利用Burp Suite抓包在文件后缀名处添加“【 】”,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的空格(【 】)。
后缀名检测与绕过之Windows特性(::$DATA)绕过
实验目的
通过本实验,掌握文件上传服务端检测中的后缀名的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/2/upload5.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
后缀名检测的绕过方法也有很多,常见的有:
1 |
|
一些特殊的文件命名方式在Windows下是不被允许的,利用Burp Suite工具抓包修改后缀名,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的。
注:此方法只适应于Windows,因为Unix/Linux系统没有这个特性。
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/2/upload5.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,此文件不允许上传
5、尝试利用大小写绕过,将脚本文件info.php更改为info.pHp,以及尝试寻找黑名单列表之外可允许上传的文件后缀名进行绕过,将脚本文件info.php更改为info.php3或者info.phtml,再次选择脚本文件上传,依然失败,此文件不允许上传
6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
7、切换到“Proxy”代理模块的“Options”,查看Bp的代理
8、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
9、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
10、利用Windows特性,给文件名加“.”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php.,依然上传失败,后缀名不允许有.出现
11、利用Windows特性,给文件名加“(空格)”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php ,依然上传失败,此文件不允许上传
12、关闭浏览器代理,重新选择脚本文件
13、再次打开浏览器代理,点击“submit”按钮,上传文件并抓取数据包
14、利用Windows特性,给文件名加“(::$DATA)”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php
15、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
16、关闭浏览器代理
18、访问http://ip/upfile/2/upload/info.php,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的后缀名检测原理,“【::$DATA】”在Windows下是不被允许的,利用Burp Suite抓包在文件后缀名处添加“【::$DATA】”,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的::$DATA。
后缀名检测与绕过之.htaccess文件攻击
实验目的
通过本实验,掌握文件上传服务端检测中的后缀名的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/2/upload6.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
后缀名检测的绕过方法也有很多,常见的有:
1 |
|
.htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么将启用.htaccess文件,所有在.htaccess文件里的指令都将被重写,即允许.htaccess文件覆盖掉Apache的配置。
如果一个Web应用允许上传.htaccess文件,且.htaccess文件启用,那就意味着攻击者可以更改Apache的配置,这是十分危险。
.htaccess文件攻击有三种方式:
- 当.htaccess文件内容如下,会将内容符合php语法规则的文件当作php文件解析
- 匹配文件名中的关键字(比如:当文件名[info.php.png] 中包含关键字[.php],并且.htaccess文件内容如下,info.php.png中的代码会被执行)
- 匹配文件名,当.htaccess文件内容如下,可以将匹配到的文件名的文件中的代码执行
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/2/upload6.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,此文件不允许上传
5、尝试大小写绕过、Windows特性,依然失败,此文件不允许上传
6、新建.htaccess文件
7、选择.htaccess文件,点击“submit”按钮,上传.htaccess文件,成功上传
8、将脚本文件info.php修改后缀名为可允许上传得info.jpg,再选择文件
9、点击“submit”按钮,再次上传文件,成功上传
10、访问http://ip/upfile/2/upload/info.jpg,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的后缀名检测原理,类似于php、asp、jsp等脚本文件得后缀不允许上传,通过上传.htaccess文件,利用.htaccess文件攻击,将内容符合PHP语法规则的文件当作PHP脚本来解析,从而实现解析上传的脚本文件。
MIME类型检测与绕过
实验目的
通过本实验,掌握文件上传服务端检测中的MIME类型的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/3/upload.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的MIME类型如下:
文件扩展名 | Mime-Type |
---|---|
.js | application/x-javascript |
.html | text/html |
.jpg | image/jpeg |
.png | image/png |
application/pdf |
在HTTP协议中,使用Content-Type字段表示文件的MIME类型。
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/3/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,不允许的格式application/octet-stream
5、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
6、切换到“Proxy”代理模块的“Options”,查看Bp的代理
7、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
8、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
9、将数据包中Content-Type值application/octer-stream修改为image/jpeg
10、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
11、关闭浏览器代理
12、访问http://ip/upfile/3/upload/info.php,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的MIME类型检测原理以及MIME类型在HTTP数据包中的表示形式,php脚本的MIME类型不允许,通过Burp Suite工具抓包将php脚本的MIME类型修改为图片文件的MIME类型,绕过MIME类型的检测。
文件内容检测与绕过之文件幻数
实验目的
通过本实验,掌握文件上传服务端检测中的文件内容的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/4/upload.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
文件内容的检测是利用getimagesize()函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。
文件内容检测的绕过常见的有两种方式:
- 在脚本文件前面补充对应的文件头
常见的图片文件头
1 |
|
- 制作图片马
制作图片马的方式也有很多,常见的有:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/4/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,不允许的文件
5、以记事本或编辑器的方式打开脚本文件,补充图片的文件头(比如GIF文件头)
6、再次选择脚本文件
7、点击“submit”按钮,再次上传文件,脚本文件成功上传
8、访问http://ip/upfile/4/upload/info.php,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的文件内容类型检测原理以及绕过方法,了解三种图片格式的文件头,通过补充文件头绕过文件内容的检测。
文件内容检测与绕过之图片马
实验目的
通过本实验,掌握文件上传服务端检测中的文件内容的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/4/upload.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
文件内容的检测是利用getimagesize()函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。
文件内容检测的绕过常见的有两种方式:
- 在脚本文件前面补充对应的文件头
常见的图片文件头
1 |
|
- 制作图片马
制作图片马的方式也有很多,常见的有:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/4/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建1.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,不允许的文件
5、再准备一张正常的图片,打开cmd命令框,制作图片马
6、再次选择脚本文件
7、点击“submit”按钮,再次上传文件,脚本文件成功上传
8、访问http://ip/upfile/4/upload/info.jpg,上传的脚本文件不能解析,**因为图片马需要配合文件包含漏洞或者解析漏洞**
实验总结
掌握文件上传的服务端检测中的文件内容类型检测原理以及绕过方法,了解三种图片格式的文件头,通过制作图片马绕过文件内容的检测,但是图片木的解析需要配合文件包含漏洞或者解析漏洞。
基于GET方式的00截断绕过
实验目的
通过本实验,掌握文件上传服务端检测中的基于GET方式的00截断绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/5/up.php
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
截断漏洞出现的核心就是chr(0),这个字符不为空 (Null),也不是空字符 (“ “),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。
由于0x00是字符串的结束标识符,PHP会把0x00后面的所有字符删除。攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。
利用00截断绕过需要同时满足两个条件:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/5/up.php
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,不允许的后缀,且URL中有参数
5、将脚本文件info.php的后缀名修改为可允许上传的图片文件的后缀名,比如info.jpg,然后再次选择脚本文件
6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
7、切换到“Proxy”代理模块的“Options”,查看Bp的代理
8、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
9、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
10、将数据包”jieduan”参数添加”info.php%00”
11、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
12、关闭浏览器代理
13、访问http://ip/upfile/5/upload/info.php8620210529121207.jpg,脚本解析失败,找不到文件
14、访问http://ip/upfile/5/upload/info.php,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的基于GET方式的00截断绕过,在使用基于GET方式的00截断绕过服务端的检测上传脚本文件时可以利用Burp
Suite工具抓包在数据包的URL中添加“%00”,由于0x00是字符串的结束标识符,PHP会把0x00后面的所有字符删除,所以访问0x00前面的才可以成功解析。
基于POST方式的00截断绕过
实验目的
通过本实验,掌握文件上传服务端检测中的基于POST方式的00截断绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/5/up2.php
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
截断漏洞出现的核心就是chr(0),这个字符不为空 (Null),也不是空字符 (“ “),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。
由于0x00是字符串的结束标识符,PHP会把0x00后面的所有字符删除。攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。
利用00截断绕过需要同时满足两个条件:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/5/up2.php
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,不允许的后缀
5、将脚本文件info.php的后缀名修改为可允许上传的图片文件的后缀名,比如info.jpg,然后再次选择脚本文件
6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
7、切换到“Proxy”代理模块的“Options”,查看Bp的代理
8、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
9、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
10、在Burp Suite中点击右侧的”INSPECTOR”,并点击”Body Parameters(3)”
11、选中”jieduan”参数,点击右侧的”>”,显示细节
12、将”VALUE”中”./upload/“修改为”.%2fupload%2finfo.php%00”,然后将下方”DECODED FROM”中的字符串复制到左侧的”./upload/“处
13、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
14、关闭浏览器代理
15、访问http://ip/upfile/5/upload/info.php1220210529150618.jpg,脚本解析失败,找不到文件
16、访问http://ip/upfile/5/upload/info.php,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的基于POST方式的00截断绕过,在使用基于POST方式的00截断绕过服务端的检测上传脚本文件时可以利用Burp
Suite工具抓包在数据包使用十六进制修改消息数据,由于0x00是字符串的结束标识符,PHP会把0x00后面的所有字符删除,所以访问0x00前面的才可以成功解析。
注:老版本的Burp Suite在代理模块中有“Hex”功能,可以直接编辑消息的原始二进制数据,直接将脚本文件后缀名后的数据修改为”00”即可。
条件竞争检测与绕过
实验目的
通过本实验,掌握文件上传服务端检测中的条件竞争的检测原理以及绕过方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Apache + PHP
- 实验地址:http://ip/upfile/6/upload.html
实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1 |
|
条件竞争是一种服务器端的漏洞,由于服务器端在处理不同的请求时是并发进行的,因此如果并发处理不当或相关操作顺序设计的不合理时,将会导致此类问题的发生。
一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。如果在删除之前访问上传的php文件,从而执行上传文件中的php代码。在这整个过程中,会出现以下三种情况:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/6/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建1.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传成功
5、访问http://ip/upfile/6/upload/info.php,找不到该文件
6、将脚本文件info.php的脚本内容修改
7、点击“选择文件”按钮,再次选中要上传的文件
8、点击“submit”按钮,上传文件,并立即访问http://ip/upfile/6/upload/info.php(利用时间差,要**快**),没有报错,说明上传的脚本成功解析
9、访问http://ip/upfile/6/shell.php,新的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的条件竞争检测原理以及绕过方法。上传脚本文件,成功上传,但访问时找不到文件,可能存在条件竞争。可以上传一个生成新的文件的脚本文件,利用成功上传到删除文件的时间差(时间差太短可以利用Python脚本实现),在未删除之前立即访问(访问时不报错,说明上传的文件访问时成功解析),则会自动生成一个新的文件,新文件不在检查范围内,即不会被删除。
IIS6.0文件解析漏洞–特殊符号”/“
实验目的
通过本实验,掌握windows下IIS6.0文件解析漏洞的利用方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:windows server 2003下的IIS6.0
- 实验地址:http://ip/iis
实验原理
文件上传使用白名单做限制,只能上传图片文件,导致脚本文件无法上传,上传图片马绕过白名单文件上传的验证,但是图片马又无法解析,利用IIS6.0文件解析漏洞的特点,从而解析脚本文件。
- IIS除了可以解析.asp后缀的脚本以外,还可以解析.cer和.asa后缀的文件
- 特殊符号“/”,任意文件夹名.asp目录下的任何文件都会被IIS当作asp脚本执行
- 特殊符号“;”,任意文件名.asp;.jpg,后缀是.jpg,可以绕过限制,但是IIS6.0的特殊符号“;”会将该文件当作asp脚本执行
实验步骤
IIS除了可以解析.asp后缀的脚本以外,还可以解析.cer和.asa后缀的文件
1、登录操作机,打开浏览器,访问http://ip/iis/sangfor.asp,asp脚本解析执行,返回当前时间
2、访问http://ip/iis/sangfor.asa,文件依然解析执行,返回当前时间
3、访问http://ip/iis/sangfor.cer,文件依然解析执行,返回当前时间
特殊符号“/”
4、访问http://ip/iis/iis.asp/sangfor.asp,文件依然解析执行,返回当前时间
5、访问http://ip/iis/iis.asp/sangfor.txt,文件依然解析执行,返回当前时间
6、访问http://ip/iis/iis.asp/sangfor.jpg,文件依然解析执行,返回当前时间
7、访问http://ip/iis/iis.asp/sangfor.rar,文件依然解析执行,返回当前时间
8、访问http://ip/iis/iis.asp/sangfor.xxx,文件依然解析执行,返回当前时间
实验总结
掌握利用IIS6.0文件解析漏洞,绕过白名单限制,解析脚本文件。
IIS6.0文件解析漏洞–特殊符号”;”
实验目的
通过本实验,掌握windows下IIS6.0文件解析漏洞的利用方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:windows server 2003下的IIS6.0
- 实验地址:http://ip/upload/up.asp
实验原理
文件上传使用白名单做限制,只能上传图片文件,导致脚本文件无法上传,上传图片马绕过白名单文件上传的验证,但是图片马又无法解析,利用IIS6.0文件解析漏洞的特点,从而解析脚本文件。
- IIS除了可以解析.asp后缀的脚本以外,还可以解析.cer和.asa后缀的文件
- 特殊符号“/”,任意文件夹名.asp目录下的任何文件都会被IIS当作asp脚本执行
- 特殊符号“;”,任意文件名.asp;.jpg,后缀是.jpg,可以绕过限制,但是IIS6.0的特殊符号“;”会将该文件当作asp脚本执行
实验步骤
1、登录操作机,打开浏览器,访问http://ip/upload/up.asp
2、在操作机新建任意文件名的asp脚本,比如now.asp
3、点击“浏览”按钮,选择新建的asp脚本文件
4、点击“上传”按钮,上传选择的文件,文件格式不正确,上传失败
5、点击“重新上传文件”,将新建的文件重命名为now.asp;.jpg,并选择该文件
6、点击“上传”按钮,上传选择的文件,上传成功
7、访问http://ip/upload/image/now.asp;.jpg,脚本成功解析
实验总结
掌握利用IIS6.0文件解析漏洞,绕过白名单限制,解析脚本文件。
IIS7.5文件解析漏洞
实验目的
通过本实验,掌握windows下IIS7.5文件解析漏洞的利用方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:windows server 2008R2下的IIS7.5
- 实验地址:http://ip/index.php
实验原理
文件上传使用白名单做限制,只能上传图片文件,导致脚本文件无法上传,上传图片马绕过白名单文件上传的验证,但是图片马又无法解析,利用IIS7.5文件解析漏洞的特点:任意文件名/任意文件名.php,从而解析脚本文件。
实验步骤
1、登录操作机,打开浏览器,访问http://ip/index.php
2、在操作机上准备要上传的文件(任意文件都可以),比如新建info.php文件
3、上传任意的文件,发现为白名单验证。
4、创建后缀名为.png的文件,文件内容如下。
5、上传成功,F12查看文件返回地址。
6、访问文件。
7、利用IIS7.5文件解析漏洞特性访问:http://ip/upload/6720210701210811.png/.php,脚本文件成功解析
实验总结
掌握利用IIS7.5文件解析漏洞,绕过白名单限制,解析脚本文件。
Apache文件解析漏洞
实验目的
掌握Apache文件解析漏洞利用方法。
实验环境
两台主机
一台windows服务器,操作系统为windows10。
一台Centos7服务器,该服务器为目标靶机。
实验原理
利用Apache多后缀解析漏洞,绕过白名单文件上传验证。
实验步骤
1、登录操作机
1 |
|
2、访问http://192.168.0.131
3、上传一个名为xxx.xxx的文件,被拦截,判断为白名单验证。
4、上传文件xxx.php.png,文件内容如下,上传成功
5、利用Apache多后缀解析漏洞访问uploadfiles/xxx.php.png
6、xxx.php.png被成功解析为php文件
Nginx文件解析漏洞
实验目的
通过本实验,掌握Nginx文件解析漏洞的利用方法。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 靶机:Centos7.2下的Nginx
- 实验地址:http://ip
实验原理
文件上传使用白名单做限制,只能上传图片文件,导致脚本文件无法上传,上传图片马绕过白名单文件上传的验证,但是图片马又无法解析,利用Nginx文件解析漏洞的特点:任意文件名/任意文件名.php,从而解析脚本文件。
实验步骤
1、登录操作机,访问http://ip
2、上传任意的文件,上传失败,发现为白名单验证。
3、使用windows的画图创建任意的png图片文件。
4、使用Edit Plust编辑上一步中的png文件,在文件末尾加入代码
1 |
|
5、将.png文件上传。
6、上传成功,访问上传的.png文件,脚本没有解析。
7、利用Nginx文件解析漏洞访问:
http://ip/uploadfiles/4a47a0db6e60853dedfcfdf08a5ca249.png/.php,脚本文件成功解析
实验总结
掌握利用Nginx文件解析漏洞,绕过白名单限制,解析脚本文件。
Tomcat任意文件上传(CVE-2017-12615)
实验目的
通过本实验,掌握文件上传中的Tomcat任意文件上传的漏洞,以及该漏洞影响的Tomcat版本以及配置。
实验环境
- 操作机:Win10
用户名:Administrator
密码:Sangfor!7890 - 实验地址:http://ip:8080
实验原理
Tomcat配置文件web.xml中,servlet配置了readonly=fasle时,会引发任意文件上传漏洞。
readonly参数默认是true,即不允许delete和put操作,所以通过XMLHttpRequest对象的put或者delete方法访问就会报告http
403错误。但很多时候为了支持REST服务,会设置该属性为false。将readonly参数设置为false时,即可通过PUT方式创建一个JSP文件,并可以执行任意代码。
在Tomcat文件夹下的/conf/web.xml文件中,添加readonly参数,属性值为false,即在114行插入以下内容:
修改配置文件完成后需要重启Tomcat,重启的方式是双击Tomcat目录下的bin目录下的shutdown.bat,在点击startup.bat。
Tomcat任意文件上传(CVE-2017-12615)漏洞影响的Tomcat版本为:
1 |
|
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip:8080
2、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
3、切换到“Proxy”代理模块的“Options”,查看Bp的代理,选中该代理,点击左侧的”Edit”,将其端口修改为8088(避免与Tomcat端口冲突)
4、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),选中该代理,将其端口也修改为8088,与Bp的代理一致(注:代理名称可以修改也可以不修改)
5、刷新网页,Bp成功抓取数据包
6、鼠标右击,点击”Send to Repeater”(或者快捷键”Ctrl” + “R”),发送数据包到Repeater模块,然后切换到Repeater模块
7、修改数据包,尝试上传jsp脚本文件
8、点击上面的”Send”,发送修改后的数据包,结果返回404,请求被拦截,不能直接上传jsp文件
9、由于文件名的限制,在数据包中添加”%20”(空格的URL编码),绕过限制,再次点击上面的”Send”,返回201,上传成功
10、关闭浏览器代理
11、访问http://ip:8080/hack.jsp,新的脚本文件成功解析
实验总结
掌握文件上传中的Tomcat任意文件上传(CVE-2017-12615)漏洞影响的Tomcat版本以及配置文件,利用Burp
Suite工具抓取数据包,将数据包内容修改,请求方式修改为PUT方式,上传新建的jsp脚本文件,文件内容可以任意编写,也可以是木马。上传时结果返回404,请求被拦截,不能直接上传jsp文件,是因为有限制:
1 |
|
可以采取一些方法来绕过限制,比如Windows中文件名不能以空格结尾,在文件名后面加空格”%20”,也可以加斜杠”/“。