前言
这题主要考察了信息泄露,字典**,文件上传,和文件读取(或者文件包含)。
WP
首先进入环境,发现是一个使用用户名和密码进行登录的界面。我们随便尝试,同时使用dirsearch扫一扫,然后看看源码。
源码中提示我们用户信息都在user.php里,用户默认密码为用户名+出生日期 例如:zhangwei1999。
因此我们进入user.php,发现空空的没有东西。我又使用burp抓包也没有办法。这时候我又去想了想是不是http请求头需要改一些东西,有特定的验证才可以,结果还是不行。以前这种看不了文件的情况我也遇到过,不过当时是其他的网页有文件包含的漏洞,利用其他网页的包含漏洞利用php伪协议就可以读取php页面源码,但是这题什么都没有。我又试了试把后缀改成phps,还是不行,于是就卡在这里了。
这里其实考察的是信息泄露的点,就是当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。这题我们尝试一些敏感文件和备份文件的后缀,如:
.git .svn .swp .~ .bak .bash_history .old
发现user.php.bak整个备份文件可以被我们所下载,下载之后得到了用户名的**字典。
接下来就是不断的**,在出生日期为1990的时候,我们**得到了结果:
登录成功后再查看源码,发现注释里有一个表单,我们用前端修改的方法让表单显示出来,发现这是一个文件上传:
我们开始文件上传的绕过:
首先前端进行绕过,burp抓包把.jpg改成.php
结果:只允许上传.jpg,.png,.gif,.bmp后缀的文件
说明这应该是后端检测了。为了具体猜猜它是怎么检测的,我再把.php改成.jpg试试:
结果文件名不合法。这题我一开始就觉得不太可能是00截断,因为burp抓到的http请求里面并没有给出具体的类似/upload/这样的目录用来00截断。那么我们只能不断的尝试:
我们把后缀改成.jpg.php,发现提示不能存在php。我又尝试了大小写绕过,还是不行后,卡在了这里。看了看WP才知道php还有这么多的别名:
php2, php3, php4, php5, phps, pht, phtm, phtml
这么多后缀名都是干啥的我也不太清楚,反正以后遇到这样的情况试就完事了。不过phps应该是php的源码,这我是知道的。
当我们改成.jpg.pht的时候文件名终于可以了,但是文件内容又不合法了:
经过一些尝试,我们发现他过滤了php而且不区分大小写。其实这题随便上传什么内容都是可以成功的,因为不会给我们上传的地址,不能用蚁剑来连。因此我们随便上传,就可以得到一个view.php:
看到file?,猜想应该是文件包含或者文件读取。但是没有任何信息,我随便输入个1,看到了过滤了flag:
因此这里我尝试了大小写绕过但是不行,因此进行双写绕过,成功获得flag: