一.第一关
1.随便上传一个php文件看看他怎么说,
2.观察一下代码,可以发现他的代码是写在本地的,所以保存下来给他删了就好
3.就是这一段代码给他删了就好
4.删除之后我们还要补一个action去指定他的接收地址
5.现在我们再去上传文件试试(在本地的html上不是在原网页!!!!!)去我的docker里面看到了文件进来证明提交成功
二.第二关
1.先上传个文件试试,提示上传失败,然后打开后台源码看看
2.可以看到他写了MIME,来做防御,但是他只写了,文件类型匹配,没有做别的(文件名匹配这类的)所以我们抓包伪造一下文件类型
3.去确定一下有没有成功,出现了也就成功了
三.第三关
1.上传一个文件看看情况,他说的是这些后缀不能上传,这是个典型的黑名单绕过,这题思路是找找有没有不同后缀但是可以实现相同结果的东西,比如php可以写成php3,php5这种(但是这个方法使用的时候需要考虑他服务器搭建的时候有没有设置,这些后缀可以运行,有的是没有设置的,)
2.传个php5试试
3.很明显他传进来了
四.第四关
1.老样子随便传一个看看,
2.观察观察源码从源码就可以看出来他的防御很全面了,但是他的禁用名单里面是没有禁用.htaccess这个后缀的
3.这里就可以先传一个.htaccess文件上去,指定123.jpg文件按照php文件来执行,然后再传一个123.jpg上去再访问就好,这里由于我自己的靶场问题,我访问不了....就不演示了
五.第五关
1.直接看源码了没必要去尝试传文件了,反正也上不去...观察源码之后发现他没有过滤大小写(大写强转小写),同时他写的黑名单里面也没有包含完全
2.所以我们直接传一个Php后缀脚本上去就好了,很明显的成功
六.第六关
1.观察源码,发现他没有收尾去空这个代码,在windows中他是强制去除的但是数据包里面是不会有这功能的
2.所以我们只要抓个包给他末尾加个空格就好了
3.看一眼上去没有,上去了那个P被强制转成了p
七.第七关
1.很明显的少了一条,去除末尾的点这个代码
2.所以抓包后缀加个.就好了
3.这个题和上个题都是利用系统会自动删除空格和点但是数据包不会删的特性来绕过的
八.第八关
1.这关观察源代码之后发现他没有禁止$DATA,所以可以用这个方法来绕过,但是我的机子是linux系统,而这个绕过只能是windows环境才能绕,就没办法演示了,改这里就好了
九.第九关
1.观察代码之后可以发现他的过滤只是一次过滤而不是循环过滤,所以可以利用这个漏洞来进行上传
2.他的逻辑是去除空格,再去除点,所以我们改他的后缀为xxx.php. .这样的情况
3.观察他的情况,成功了(因为我的是linux环境所以没有去除最后的点,windows就会去除)
十.第十关
1.我们观察代码可以得出他的逻辑是把,敏感后缀替换为空,但是只有一次过滤,
2.所以我们双写末尾php就可以过去了
3.确定是否上传成功
十一.第十一关
1.和前面差不多这次使用的是%00来截断
十二.第十二关
1.这关其实和上面这关差不多,但是他是post的传输方式,一样在后面加上%00并且手动使用url编码一下就好
2.手动url编码之后应该会出现一个空格的但是我的不知道为什么编了没有用,这个好像和bp版本有关系
十三.第十三关
1.本关说了使用图片码,只需要用命令生成图片码并且上传就好.但是这里已经不是单纯的文件上传了,他还包含了文件包含部分的知识,
copy 1.jpg /b + 123.php /a 2.jpg
#这个就是图片码的生成方式
2.文件包含的代码
/include.php?file=./upload/XXX.jpg
十四-十七.这几关和十三关是一样的
十八.第十八关
但是第十八关他有条件竞争漏洞,就是可以抢时机访问文件,导致服务器删不掉,也就是代码逻辑问题
十九.第十九关
1.这关的话可以使用文件夹命名方式绕过(也可以使用%00截断的方式去上传)
二十.第二十关
1.这关涉及的东西蛮多的,还需要看懂代码去使用他的数组绕过(这个代码里面确定可以用)
2.这里是利用了他的数组编写问题,原理是
savename=["filename",".","jpg"]
然后我们拼接完了之后变成了
123.php/.jpg
所以给他的后缀判断越过了,同时因为/.jpg为文件夹,他是不会生成了就保留了123.php
番外
文件上传漏洞利用的时候,防御手段有,前端检测(可以通过直接改页面绕过),后端检测(检测他的数据包中的文件类型,与文件开头是否与传输文件类型一样 )
1.Apache服务器有一个漏洞,是因为他会使用.htaccess文件来做,伪静态,这里面可以通过这个代码绕过
<FilesMatch "XXX.jpg">
setHandler application/x-httpd-php
#在当前目录下,如果匹配到XXX.jpg文件,则被解析成PHP代码执行
</FilesMatch>
2.Nginx服务器带有,解析漏洞
3.fineCMS文件上传漏洞,上传图片(并改成了php后缀)后虽然是显示上传失败,但是会生成一个0x0.php文件,实际上是上传成功了,但是被后端代码拦了那是没办法了
http://目标地址///uploadfile/member/uid/0x0.php
4.这个::$DATA绕过是利用了windows,php的特性,他会把DATA后面的文件流忽略掉,同时不检查后缀名,以此来绕过
5.防御手段(简单)少一个都有绕过的可能,少谁绕谁
$deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".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");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
6.gif文件内容是GIF89a
7.当服务器存在对图片的二次渲染,同时逻辑是先存储后改名,可以无限发包加访问突破防御
8.有的时候可以考虑使用cve漏洞利用
9.当有命名代码是XXX/shell.php/.jpg或者XXX/shell.php/.他会绕过后缀检测,同时上传的是php文件
10.copy 1.jpg /b + 123.php /a 2.jpg #这个就是图片码的生成方式\
11.
.user.ini
文件和.htaccess
文件之间有一些区别:
-
.htaccess
文件:- 位于网站的根目录,用于配置Apache HTTP服务器。
- 可以用来设置网站的许多参数,例如URL重写、目录访问权限、缓存控制等。
- 主要用于服务器级别的配置。
-
.user.ini
文件:- 位于包含它的文件夹(及其子文件夹)中,用于自定义PHP命令。
- 仅影响所在文件夹及其子文件夹中的PHP脚本。
- 主要用于PHP运行时的配置。
- auto_prepend_file=文件名.jpg