upload-labs通关

前记:

在这里面我们使用一句话木马时使用php里的一个函数phpinfo(),该函数能显示出网页具体的php版本和有关的信息。

pass-01(js前端验证)

方法1:禁用js/删除js验证

1.禁用js

按f12,在"调试器"右端的设置中,禁用js,上传成功后右键图片,在新页面中打开图片即可

2.删除js

把网页源码中的return checkFile删除后上传打开即可。(和删除代码是一样的)

方法2:bp抓包改文件后缀

上传一个允许上传类型的文件,bp抓包以后,修改后缀回.php即可

方法3:删除代码

将选中部分的源码删除掉,再上传即可,如果找不到路径,可在f12的"网络"模块中找到

pass-02(MIME验证)

方法1:修改文件类型

上传一个php文件,bp抓包后修改Content-Type为image/jpeg(常用)、image/png、image/gif,另外两个是源码中承认的

方法2:上传合法文件和改后缀

上传一个合法的文件,例如jpg,bp抓包后再把文件的后缀改回来即可(可能需要多次放包,直至出现上传成功的框)

pass-03(黑名单验证,特殊文件类型)

查看源码后发现禁止上传.asp|.aspx|.php|.jsp,修改文件后缀为php1,php2,php3,php4.php5,phtmI, pht上传即可

注意:phpstudy_pro在此上传成功后不能正确显示,如果要正确显示,需要回溯2018版本,选择php版本不带nts的,如果是其他的可以尝试修改httpd.conf配置文件,Pro版本不知道改了能不能,可以试一下

pass-04(.htaccess)

这个和ctfhub上的那个一样,在源码中许多后缀都被禁用了,我们这里使用.htaccess是因为在我们上传了一个.htaccess文件后再上传一个某类型的文件,后面上传的文件就可以变成php解析过的,详情请搜索"分布式配置文件"或者".htaccess"。所以我们再上传了.htaccess后就再上传一个.jpg再访问就行了

.htaccess文件内容有以下几种(常见)

AddHandler php5-script .png  //使用 php5-script 处理器来解析所匹配到的文件
AddType application/x-httpd-php .png  //将特定扩展名文件(这里是.png)映射为php文件类型
SetHandler application/x-httpd-php    //将该目录及子目录的所有文件均映射为php文件类型

pass-05(黑名单验证,.user.ini)

.user.ini是php的一种配置文件,相当于一个用户自定义的php.ini,它可以在(你在语句中定义的那个)php文件执行之前将其包含,然后获取shell,细节去搜索,展开讲有点多。

上传目录存在php文件(readme.php),再先上传.user.ini后,修改php.ini配置文件,上传后面的图片码,最后访问这个(readme.php)或者图片码文件的路径即可

auto_prepend_file=文件名
auto_append_file=文件名

修改如下

pass-06(大小写绕过黑名单)

查看源码,发现大小写绕过这种方式没有被禁止,我们就可以利用,上传文件后缀为Php这类

pass-07(收尾去空)

查看源码和上面的相比,收尾去空这一项没有了,我们可以利用bp抓包后在后缀后添加空格,就可以上传成功。

pass-08(字符绕过)

查看源码,与前面的相比,没有了删除文件名后的点那项,我们在bp抓包以后可以再文件后缀后加一个.这样的字符就可以绕过了

pass-09(::$DATA绕过黑名单)

还是看源代码,与之前的相比,没有了去除字符串那项,用::$DATA绕过

pass-10(点空格点绕过黑名单)

查看源码:deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来,因此我们在文件后缀后加". ."后上传即可。

pass-11(双鞋绕过)

str_ireplace()函数:此函数无视大小写, 如果文件名含有黑名单里面的字符串就替换为空,而且只替换一次,它从左往右读,所以替换为空后还是php,可以双写为pphphp,phphpp

pass-12(%00截断-get型)

源码中有一个很重要的点,上面的 $img_path = _GET\['save_path'\]."/".rand(10, 99).date("YmdHis").".".file_ext;这行代码规定了组成上传路径的方法,这里就是我们要操作的地方。

注意:因为这个是自己搭的网站,而且是比较老的了,所以要修改一些配置

在php.ini中修改magic_quotes_gpc=On为magic_quotes_gpc=Off

还有php的版本需要修改或者说版本号要<5.3.29,在phpstudy2018中点击切换版本,将其改为php-5.2.17+Apache;注意:前文说过我们不选后面带nts的版本,我们访问上传页面时会出错。

上传php文件后,在开始save-path那行,把上传的方式改为get,然后在upload后加上文件名和%00,下面的filename=的后缀改为.jpg,再上传,用蚁剑连接即可

pass-13(%00截断-post型)

和第12题一样,上传php文件后,在开始save-path那行,把上传的方式改为post,然后在upload后加上文件名和%00,将filename=后面的后缀改为.jpg,再上传,用蚁剑连接即可

小结

1.重回php解析

pass-04,05这两个关卡都是用php的配置文件将我们修改过后缀的php一句话木马重新变为php解析

2.函数

pass-06:strtolower() 函数把字符串转换为小写

pass_07:trim()去除空格

pass-08:deldot()过滤文件名末尾的点,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来

pass-09: ::DATA之后的数据会被当成文件流处理,不会检测后缀名,且保持"::DATA"之前的文件名 他的目的就是不检查后缀名。

pass-11:str_ireplace()函数寻找文件名中存在的黑名单字符串,将它替换成空(即将它删掉)

3.window文件名规则

pass-07/08/09都利用了window的文件名规则,文件名后的空格和点会被删除,我们在文件名上直接修改是行不通的,因此,我们必须抓包来修改

4.%00截断

这是一个大类,00截断是操作系统的漏洞,因为windows系统是用c语言或汇编语言写的,他们都是以\0即0x00结尾的,这样就可以截断字符串,因此,我们也可以用来绕过web的软waf白名单限制。

5.为什么

为什么我们要用phpinfo和文件上传,我们其实是通过上传文件时web的漏洞上传木马来进入内部,从而获得我们想要的信息。包括一系列的绕过,其实我们的最终目的就是成功的文件上传,然后进去内部。phpinfo可以显示php版本和配置信息,更方便我们入侵,也会有web的路径,这些都是很有帮助的。

相关推荐
王俊山IT11 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。13 分钟前
c++多线程
java·开发语言
小政爱学习!15 分钟前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
魏大帅。20 分钟前
Axios 的 responseType 属性详解及 Blob 与 ArrayBuffer 解析
前端·javascript·ajax
花花鱼27 分钟前
vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法
前端·javascript·elementui
k093330 分钟前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
神奇夜光杯38 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
Themberfue40 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
plmm烟酒僧42 分钟前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
测试界的酸菜鱼1 小时前
Python 大数据展示屏实例
大数据·开发语言·python