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的路径,这些都是很有帮助的。

相关推荐
GISer_Jing11 分钟前
Vue3状态管理——Pinia
前端·javascript·vue.js
好开心3325 分钟前
axios的使用
开发语言·前端·javascript·前端框架·html
又蓝1 小时前
使用 Python 操作 Excel 表格
开发语言·python·excel
余~~185381628001 小时前
稳定的碰一碰发视频、碰一碰矩阵源码技术开发,支持OEM
开发语言·人工智能·python·音视频
Am心若依旧4092 小时前
[c++11(二)]Lambda表达式和Function包装器及bind函数
开发语言·c++
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 20课题、单元测试
开发语言·青少年编程·单元测试·编程与数学·goweb
大G哥2 小时前
java提高正则处理效率
java·开发语言
VBA63372 小时前
VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL
开发语言
轩辰~2 小时前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
小_太_阳2 小时前
Scala_【1】概述
开发语言·后端·scala·intellij-idea