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不断上传,只要成功访问一次即可,