首页提示:
You'll be rewarded with a flag if you can make it over some /hurdles.
修改url,尾后加上/hurdles
,提示:
I'm sorry, I was expecting the PUT Method.
这个还挺简单的,让我们修改请求方式为PUT,抓包修改:
I'm sorry, Your path would be more exciting if it ended in !
这个提示有点离谱,但是肯定是和路径(path)有关,想让输入的路径,刺激(?)一点?
但直接输入任何非“/hurdles”的路径又会报:
You'll be rewarded with a flag if you can make it over some /hurdles.
所以再加一个目录,以”!“结尾:
在”!“后构造get=flag
:/hurdles/!?get=flag
I'm sorry, I was looking for a parameter named &=&=&
传入”&=&=&“之前需要对其进行url编码,得%26%3D%26%3D%26
,最后加上任意值:
I'm sorry, I expected '&=&=&' to equal '%00 '
这里的提示是其实仔细观察可以发现是两行,阴滴狠。%2500
进行URL解码之后就是%00
,最后加上换行符%0a
I'm sorry, Basically, I was expecting the username player.
提示希望有用户名,涉及到的知识点是HTTP基础认证:
在HTTP中,基本认证(英語:Basic access authentication)是允许http用户代理(如:网页浏览器)在请求时,提供用户名 和口令 的一种方式。
使用curl工具进行认证,使用-u参数填入用户名和密码,填入的时候输入username错了很久,最后反应过来应该是用户名player密码player:
curl -X PUT 'http://node3.buuoj.cn:25896/hurdles/!?get=flag&%26%3D%26%3D%26=%2500%0a' -u 'player':'player'
这个提示很明显的,想要的密码的值为md5(”open sesame“):
curl -X PUT 'http://node3.buuoj.cn:25896/hurdles/!?get=flag&%26%3D%26%3D%26=%2500%0a' -u 'player':'54ef36ec71201fdf9d1423fd26f97f6b'
提示:
I'm sorry, I was expecting you to be using a 1337 Browser.
这个比较简单,修改UA,curl工具中,-A参数用来指定客户端的浏览器。
curl -X PUT 'http://node3.buuoj.cn:25896/hurdles/!?get=flag&%26%3D%26%3D%26=%2500%0a' -u 'player':'54ef36ec71201fdf9d1423fd26f97f6b' -A 1337
提示:
I'm sorry, I was expecting your browser version (v.XXXX) to be over 9000!
需要额外修改XFF,增添参数-H 'X-Forwarded-For:1.1.1.1'
,填入一个会回显:
I'm sorry, I was eXpecting this to be Forwarded For someone through another proxy!
查找资料:
标准格式如下:X-Forwarded-For: client1, proxy1, proxy2。从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个。
这里连踩三个坑:
添加Cookie使用的参数是-b,值为Fortune
:
curl -X PUT 'http://node3.buuoj.cn:25896/hurdles/!?get=flag&%26%3D%26%3D%26=%2500%0a' -u 'player':'54ef36ec71201fdf9d1423fd26f97f6b' -A 1337v.9000 -H 'X-Forwarded-For: 13.37.13.37,127.0.0.1' -b 'Fortune=1'
提示:
I'm sorry, I was expecting the cookie to contain the number of the HTTP Cookie (State Management Mechanism) RFC from 2011.
需要Cookie中包含2011年的RFC编号,谷歌一下是6265^^
希望只接受纯文本(MIME)形式的请求:
I'm sorry, I expect you to accept only plain text media (MIME) type.
和XFF那个一样,加个-H参数:
curl -X PUT 'http://node3.buuoj.cn:25896/hurdles/!?get=flag&%26%3D%26%3D%26=%2500%0a' -u 'player':'54ef36ec71201fdf9d1423fd26f97f6b' -A 1337v.9000 -H 'X-Forwarded-For: 13.37.13.37,127.0.0.1' -b 'Fortune=6265' -H 'Accept:text/plain'
最后居然出来了俄语0.0:
Я ожидал, что вы говорите по-русски.(我希望你会说俄语。)
添加参数:-H ‘Accept-Language:ru’
Origin Header 存在于请求中,用于指明当前请求来自于哪个站点。
最后希望Referer是https://ctf.bsidessf.net/challenges,继续加-H:
curl -X PUT 'http://node3.buuoj.cn:25896/hurdles/!?get=flag&%26%3D%26%3D%26=%2500%0a' -u 'player':'54ef36ec71201fdf9d1423fd26f97f6b' -A 1337v.9000 -H 'X-Forwarded-For: 13.37.13.37,127.0.0.1' -b 'Fortune=6265' -H 'Accept:text/plain' -H 'Accept-Language:ru' -H 'Origin:https://ctf.bsidessf.net' -H 'Referer:https://ctf.bsidessf.net/challenges'
返回只有”Congratulations!“,猜测flag隐藏在响应头中,使用-i参数查看响应头具体信息:
总结:
%2500
进行URL解码之后就是%00
。- curl工具使用
-u
参数进行基本验证。 - curl工具中使用
-A
参数指定浏览器。 - curl工具中使用
-H
参数增加请求头。 - curl工具中使用
-b
参数添加Cookie。 - 请求头中,
Origin
指明当前请求来自于哪个站点。 - curl工具中使用
-i
参数显示响应头信息。