sanyer

博客园 首页 新随笔 联系 订阅 管理

docker搭建环境拉取得monstertsl/upload-labs共21题,这个镜像不需要更改apaache配置即可解析php3文件

1.单纯的前端js验证,我们直接在浏览器禁用即可。或者可以通过上传图片后缀再抓包修改为php的方式

 

2.这个是通过验证包中的Content-Type: 进行,只需要抓包之后更改即可(图片中没改)

 3.这个是进行的黑名单过滤,可以通过上传php3,php5进行绕过。(新版的phpstudy修改conf文件后仍然不行)

php的解释器是可以向下兼容的,主要是通过扫描文件内容判断解析的。但为什么需要更改apache的http.conf呢?

当请求一个以.php为后缀的文件时,Apache会将其视为PHP文件,并将其发送给PHP解析器进行处理。如果文件的扩展名不是.php,Apache可能会将其视为其他类型的文件(如纯文本或HTML文件),并将其直接发送给客户端。

因此,为了在Apache服务器上解析以非标准后缀名结尾的PHP文件,需要在Apache的配置文件中进行相应的更改。这通常涉及将非标准后缀名映射到PHP MIME类型,以便Apache能够正确地将这些文件发送给PHP解析器进行处理。

4.也是黑名单过滤,.htaccess文件可以控制当前目录下的行为,和哪个http.conf相似,所以在phpstudy搭建的环境中还是不能用。

或者

<FilesMatch "\.jpg$"> SetHandler application/x-httpd-php </FilesMatch>也可以

5.查看源码

这里过滤了很多东西,包括.htaccess也被过滤了。根据提示,上传目录里有一个readme.php,同时没有过滤掉.user.ini文件

编写一个.user.ini文件 auto_prepend_file=2.jpg这个就是会让这个目录下的自动包含2.jpg文件

这个也存在一定的条件,现在我的docker环境就不好用了。phpstudy可以用。等有时间好好研究一些这个apache是个什么原理。

6.查看源码,与之前相比少了一个全部转换为小写。那么我们直接把上传的文件名改为2.Php

7.通过查看代码发现这个没有去除空格。那么根据windows的特性,保存文件时会自动去掉后缀名里的空格。

但对于linux来说,他不会去除空格,同时如果访问*.php%20的话,也并不会被解析,而是当作一个文本返回出来

8. 在这个代码中缺少去除.的操作,所以直接在最后加一个.即可。按理说windows会去除最后的.和空格,但是linux'不会去除。但在这个环境中,直接访问php.也是可以解析的。

9.这个题不会去除::$data,这个绕过是属于windows的,对于linux是不适用的。主要是因为系统文件系统不同

10.这个题去除了.但是遇到空格时就会停止,后续又会去除空格所以又正常了。在linux服务的话可以访问a.php. 对就是点空格。他最后存起来的居然不是最后经过处理的文件名$img_path = UPLOAD_PATH.'/'.$file_name;

11.这个是对后缀名进行一次替换,直接通过双写即可过去。

12.要求php<=5.3.4 gpc关闭

这个docker镜像超了,没办法。。。从windows.php.net - /downloads/releases/archives/下载php版本直接扔在phpstudy里面,然后修改php.ini-dist文件把magic_quotes_gpc 改为Off就行了

 13.这个是post的00绕过,和上面的差不多但那就是在post参数里面去找那个上传位置改到upload/a.phpa加a是为了方便在hex里寻找,然后把61改成00就行了

14.图片马,在windows使用copy /b 1.jpg+2.shell 3.jpg生成图片马,必须图片在前然后上传后直接包含即可

 

15.相对于上一个来说在分析图片的时候多读了一点点,还是直接上传图片马就行了。上一个是读了类型头,这个多读了大小啥的

16.还可以使用上面那个图片马一样

17.这个进行了二次渲染,我们需要将上传后的文件下载之后与上传前的进行对比,python脚本如下将两个文件的16进制文件导出为txt然后脚本对比

def compare_files(file1, file2):
with open(file1, 'r') as f1, open(file2, 'r') as f2:
file1_data = f1.readlines()
file2_data = f2.readlines()

common_data = set(file1_data).intersection(file2_data)

return common_data


if __name__ == '__main__':
file1 = 'J:/FFOutput/1.txt'
file2 = 'J:/FFOutput/2.txt'

common_data = compare_files(file1, file2)

print('Common data found in both files:')
for line in common_data:
print(line)
然后把后面塞到这个位置。

 18.条件竞争,会先保存临时文件然后再进行规则匹配。不符合规则再删除,但是文件处理需要时间。

写一个生成shell.php的php通过python脚本不断访问以及burpsuit不断上传,只要成功访问一次即可,

 

posted on 2023-09-20 14:45  红甲小宝  阅读(44)  评论(0编辑  收藏  举报