粤嵌科技毕业实习Day16
粤嵌科技毕业实习Day16
文件上传漏洞的检测
-
客户端js校验(也称前端验证,一般只校验后缀名)
- 一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。
- 判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。前端验证非常不可靠,通过修改数据包后缀名即可绕过,甚至关闭js都可以尝试绕过。
- 服务端校验:
- 文件头content-type字段校验(image/gif)
- 文件内容头校验(GIF89a)
- 后缀名黑名单校验
- 后缀名白名单校验
- 自定义正则校验
-
前端验证绕过
- 上传一个带一句话木马的PHP,会弹出提示只能上传的图片类型。这就是典型的前端检测。
- 我们把这个PHP文件的后缀改为JPG,就会提示上传成功,并开始Burp抓包,然后将JPG的后缀改回为PHP,这样就达到了我们上传PHP木马的目的。
- 接下来就是连接菜刀,进行getshell。
-
Content-Type方式绕过
- Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签,用于区分数据类型。最初MIME是用于电子邮件系统的,后来HTTP也采用了这一方案。
- 在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析并展示html等等。
- 所以同样还是Burp抓包,然后找到Content-Type,将里面的类型修改为你想要上传的文件类型就可以成功绕过检测。
-
绕过黑白名单策略:
- 黑名单绕过
- 通过上传不受欢迎的php扩展来绕过黑名单。例如:pht,phpt,phtml,php3,php4,php5,php6
- 黑名单绕过
-
.htaccess文件绕过
-
htaccess是超文本访问(Hypertext Access)的缩写,是一个基于Apache的Web服务器使用的配置文件,用于控制它所在的目录以及该目录下的所有子目录。
-
AddType application/x-httpd-php .jpg
这个指令代表JPG会被当做PHP来执行,由于图形化界面无法将文件命名为.htaccess,所以使用CMD命令Ren更改后缀。
只要把这个.htacess文件上传,之后上传的JPG文件都会被当成PHP解析。
-
-
后缀大小写绕过
- 我们将做成图片马直接将后缀改成Php,进行上传。
- 让文件的后缀由大小写字母穿插组成。
-
文件后缀(空)绕过
- 这里相对于前面关卡的代码是少了一个消除两旁空格的函数trim();所以我们我们可以通过在后缀加个空格尝试绕过,黑名单机制中,是不允许上传什么,但如果我们传上去的文件与所限制的稍有不一样,就可以直接绕过黑名单了
- 我们进行将带有一句话的php文件上传并抓包,在后缀加个空格,上传。
-
文件后缀(点)绕过
- 这里是少了一个删除末尾的点的函数。
- 我们还是进行将带有一句话的php文件上传并抓包在后缀加个点,上传,在上传到服务器后,服务器会自动将点去掉,只读取前面有用的后缀;
-
::$DATA(Windows文件流绕过)
-
::$DATA(Windows文件流绕过)(这里利用到了NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都存在许多个数据流。通俗理解,就是其他文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。)
-
例如在cmd命令下运行:echo abcd>>a.txt:b.txt 很明显生成一个a.txt,但是会是空值,因为系统将值写到寄宿文件上去了;
然后再运行 echo 123>>a.txt::$DATA,是会在a.txt中输出123的,因为
::$DATA相当是个空值,不是一个寄宿文件,所以还是会将文件写入到a.txt中去,不修改文件存储过程;
在利用Windows特性,可在后缀加上“ ::$DATA ”绕过。
跟之前一样的思路,抓包改包绕过。
-
-
构造文件后缀绕过
- 这关好像用了我们前面关卡的所有过滤,那我们可不可以构造一个文件名后缀111.php. .
- 过滤参数在发现.时会将.去掉,在将空格去掉,最后只剩下111.php. 这样还是可以绕过黑名单机制的,因为111.php.不等于111.php,所以还是能绕过上传;
-
双写文件后缀绕过
- 会将符合条件的文件后缀删除,我们只需要将文件后缀进行双写,令他删除后合并就能成功绕过
-
白名单绕过
-
00截断
截断条件:php版本小于5.3.4,php的magic_quotes_gpc为OFF状态
0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。
系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束
GET型00截断
-
-
POST型00截断
POST请求中,%00不会被自动解码,需要在16进制中进行修改00
-
文件包含漏洞
在PHP中,使用include、require、include_once、require_once函数包含的文件都会被当作PHP代码执行,
无论文件的名称是什么,只要符合文件内容符合PHP代码规范,都会被当作PHP代码执行。
-
图片马制作
copy b.png /b + a.php /a shell.jpg(a表示ascii文件/b表示二进制形式)
上传漏洞利用(2)
打开http://127.0.0.1/upload-labs/
-
Pass-08
-
打开Pass-08
-
查看提示
-
查看源码,可知,缺少了检测字符串::$DATA的 代码,可以作为突破口
-
打开burp suite对上传进行抓包,修改文件名
-
上传成功
-
打开图片链接http://127.0.0.1/upload-labs/upload//efg.php
-
-
Pass-10
-
打开Pass-10
-
查看提示
-
查看源码
-
上传abc.php,发现上传成功
-
打开图片链接http://127.0.0.1/upload-labs/upload//abc. 发现尾缀不见了
-
对abc.php重命名为abc.phphpp,再次上传
-
打开图片链接http://127.0.0.1/upload-labs/upload//abc.php
-
-
Pass-11
-
phpStudy上切换到5.2.17并关闭magic_quotes_gpc
-
打开Pass-11
-
查看提示
-
查看源码,可知只允许上传jpg、png、gif文件
-
重命名jkl.php为jkl.png,打开burp suite开启对图片上传进行抓包
-
修改路径
-
打开图片链接http://127.0.0.1/upload-labs/upload/jkl.php
-
-
Pass-12
-
打开Pass-12
-
查看提示
-
查看源码,可见这次是post型,不能像get型可以直接修改url达到目的。
-
开启burp suite,上传ccv.png进行抓包
-
修改路径
-
将61(a)的修改为00,删除掉
-
上传成功打开图片链接http://127.0.0.1/upload-labs/upload//ccv.php
-
本文作者:AlubNoBug
本文链接:https://www.cnblogs.com/AlubNoBug/p/13696484.html