第一关JS校验
利用文件上传js前端的后缀名检测来进行检测
后端并没有对文件进行检验
上传文件方法
1.关闭前端的js
2.burp抓包 先上传允许上传的文件,然后抓包后修改上传文件的后缀
3、将网站源码复制下来,放到本地,然后将js代码删除。
先查看网页源代码然后复制粘贴到本地文本文件,将文件名后缀改为html,用vscode打开删除js校验的代码
若是直接打开则能看到文件上传还是存在
但是我们并没有上传的目的地址
回到原先正常的页面,上传一个正常的照片,从开发者工具网络中
请求地址就是我们需要上传的地址
修改我们的代码文件action 这个action是告诉他这个图片提交给谁,因为这个源代码中没有,那我只好给它整一个
保存后以HTML浏览器打开
上传成功
第二关服务端(后端)验证
一如既往burp抓包
漏洞描述:只检测 content-type 字段导致的漏洞。(后端利用 PHP 的全局数组$_FILES()获取上传文件信息)
利用方法:修改 content-type 字段的值为图片格式。
常用 content-type 字段:
image/jpeg :jpg 图片格式
image/png :png 图片格式
image/gif :gif 图片格式
text/plain :纯文本格式
text/xml : XML 格式
text/html : HTML 格式
上传成功
第三关文件名后缀校验(黑名单绕过)
由代码可见,获取文件后缀名后,进行判断有些是不能上传的,但是这哥们明显没有将所有危险文件都deny
特殊文件名绕过: .php3 .php4 .php5 .phtml .phtm .phps .phpt .php345
上传成功,页面回显访问回显路径
因为上传上去的文件名会改变,但是在数据包(burp)中有回显(实战中可能没有),所以我们还是可以访问的
上传成功
注意
要在apache的httpd.conf中有如下配置代码:AddType application/x-httpd-php .php .phtml .phps .php5 .pht,如果不配置他是无法解析php5代码的,访问的时候就是一个空白页
配置过程
打开配置文件---打开httpd.conf
存疑我没找到
第四关文件名后缀校验(配置文件解析控制)
黑名单长到心碎
但可
以允许上传.htaccess 文件。
htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess 文件,可以实现:网页 301 重定向、自定义 404 错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
利用方法:上传.htaccess 解析文件,利用其配置,将白名单文件的类型解析成php 文件类型。
上传.htaccess 文件 内容如下:(将服务器上的 1.jpg 文件解析成 php 文件,这里文件可以自由配置)
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
再上传一个一句话木马,文件名为 1.jpg,依旧访问 1.jpg,但其会以 php形式显示
注意.htaccess文件不能起名字,他就是.htaccess文件,如果你将他改为4.htaccess或者其他的什么名字是不可以的,无法解析。在实战中有可能上传上去这个文件会被自动重命名,被重命名了就不可以了。
如果以上操作都弄好了,还是出不来,还是去改phpstudy配置文件,其他选项菜单--打开配置文件---httpd.conf
箭头指向位置一开始none,改为all保存,重启phpstudy,就可以了。
第五关
很好他把上一关学到的htaccess禁用了
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
利用方法:
(1)使用大小写绕过.htaccess (网上有这个方法,但我看了看我的这个版本的源码,它给转化了)
真的难受兄弟
(2)利用.user.ini 配置文件
.user.ini。它比.htaccess 用的更广,不管服务器是 nginx/apache/IIS,当使用 CGI/FastCGI 来解析 php 时,php 会优先搜索目录下所有的.ini 文件,并应用其中的配置。类似于 apache 的.htaccess,但语法与.htacces 不同,语法跟 php.ini 一致。
php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。
但是想要引发 .user.ini 解析漏洞需要三个前提条件
- 服务器脚本语言为PHP
- 服务器使用CGI/FastCGI模式
- 上传目录下要有可执行的php文件
CGI
[公共网关接口](https://baike.baidu.com/item/公共网关接口/10911997)(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与[浏览器](https://baike.baidu.com/item/浏览器/213911)进行交互,还可通过数据API与[数据库服务器](https://baike.baidu.com/item/数据库服务器/613818)等外部数据源进行[通信](https://baike.baidu.com/item/通信/300982),从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。
FastCGI
快速通用网关接口**(**Fast** **C**ommon **G**ateway **I**nterface/**FastCGI**)是一种让交互程序与Web服务器通信的协议。FastCGI是早期[通用网关接口](https://zh.wikipedia.org/wiki/通用网关接口)(CGI)的增强版本。
FastCGI致力于减少[网页服务器](https://zh.wikipedia.org/wiki/網頁伺服器)与[CGI](https://zh.wikipedia.org/wiki/通用网关接口)[程序](https://zh.wikipedia.org/wiki/计算机程序)之间交互的开销,从而使[服务器](https://zh.wikipedia.org/wiki/伺服器)可以同时处理更多的网页请求。
以上全是互联网产物
上传文件 .user.ini,内容为: auto_prepend_file=1.jpg
.user.ini文件里的意思是:所有的php文件都自动包含1.jpg文件。.user.ini相当于一个用户自定义的php.ini
然后在复制图像地址后,用蚁剑访问将文件名改为readme.php
3、这关其实也可用 php. .
点空格点 绕过上传(如下图)
第六关文件名后缀校验(大小写绕过)
这一关同样是后端黑名单,同时过滤掉.htaccess和.ini。但是没有使用strtolower()函数,可以使用大小写绕过黑名单
把.php 格式改为 .Php 上传上去之后,就会自动解析为.php.
大小写绕过原理:
Windows 系统下,对于文件名中的大小写不敏感。例如:test.php 和 TeSt.PHP 是一样的。
Linux 系统下,对于文件名中的大小写敏感。例如:test.php 和 TesT.php 就是不一样的
第七关文件名后缀校验(空格绕过)
漏洞描述:对上传的文件名未做去空格的操作->trim()
Windows 系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单。
利用方法:burp 抓包,修改对应的文件名 添加空格
上传成功
第八关文件名后缀校验(点号绕过)
漏洞描述:对上传的文件后缀名未做去点.的操作 ->deldot()过滤文件名末尾的.
利用 Windows 系统下,文件后缀名最后一个点会被自动去除。
利用方法:文件后缀名为 .php.
上传成功
第九关 文件名后缀校验(::$DATA 绕过)
漏洞描述:对上传的文件后缀名没有做去::$DATA 处理
这个关卡的代码没有这一行 因此我们可以利用::$DATA后缀
Windows 系统下,如果上传的文件名为 1.php::$DATA 会在服务器上生成一个
1.php 的文件,其中内容和所上传文件内容相同,并被解析。
利用方法:上传带有一句话木马的文件,其文件名为 1.php::$DATA
但是直接按照路径打开
把::$data 删掉
成功上传
也就是说用蚁剑连接的时候也要url中删除::$data
第十关文件名后缀校验(拼接绕过)
漏洞描述:将文件名进行过滤操作后,将文件名拼接在路径后面,所以需要绕过前面的首尾去空以及去点。
利用方法:上传文件名为 .php. .(点+php+点+空格+点)
上传成功
第十一关文件名后缀校验(双写绕过)
漏洞描述:利用 str_ireplace()将文件名中符合黑名单的字符串替换成空
利用方式:利用双写黑名单字符,对字符串的一次过滤后拼接出 php,文件名.pphphp
<?php
echo str_ireplace("WORLD","Shanghai","Hello world!");
?>
把字符串 "Hello world!" 中的字符 "WORLD"(不区分大小写)替换成 "Shanghai":
上传成功
标签:11,文件,文件名,验证,upload,htaccess,ini,php,上传 From: https://www.cnblogs.com/vaneshadow/p/17428796.html