Big Brother is watching
题目地址: https://ringzer0team.com/challenges/212
题目提示:Even Google cannot find this onegoogle是搜索引擎,能阻止它的自然是。。。robots.txt啦
访问https://ringzer0team.com/robots.txt
访问 https://ringzer0team.com/16bfff59f7e8343a2643bdc2ee76b2dc/
得到flag;
Looking for password file
题目地址:http://ringzer0team.com:1008/?page=lorem.php
读取password,猜测是passwd文件。访问:http://ringzer0team.com:1008/?page=/etc/passwd
得到flag:
Area 51
题目地址:https://ringzer0team.com/challenges/48
题目提示:Access to this area is restricted using some secure .htaccess
.htaccess中可以限制各种请求。通过尝试后,抓包,改请求方式GET为PUT。得到flag:
Headache
题目提示:Answer is closer than you think!
head,所以我们抓包看头部。得到flag:
Words mean something?
给了一段不知所云的文字。。不懂就抓包咯。抓包后在cookie处发现flag:0
。修改后发包得到flag:
flag:
Admin Panel
有一个登陆框,随便输点什么进去,抓包后发现一个302跳转,在跳转页面里有一个奇怪的东西,见下:
将方法改成GET请求,在尾部添加:?showflagforme=yesIwantafla
。见下:
得到flag:
Captcha I
题目地址:http://captcha.ringzer0team.com:7421/form1.php
测试一次后,题目提示说要验证一千次。查看源代码,可以发现如下js代码:
其中if判断条件里的ehage
就是当前的验证码,所以只要写脚本提取出这段字符串,然后再发包就行啦。脚本如下:
跑完后得到flag:
Password reset
有一个登陆框,需要用户名和密码,还有一个重置(reset)功能。题目提供了源码。如下:
伪随机数问题,还有就是关于unix时间戳的知识。目标很明确要对admin重置密码,当点了reset后,会根据当前的time生成一个token并存放在数据库中,这个就是下文的k值。
注意图片中是:2017 06:39:41 -0400。记得计算上时差为4个小时。所以实际时间应该是2017-07-01 10:39:41。写一个php脚本,生成需要的16位的digit code。
上面代码在win平台下无法生成16位的code,这个不知道为什么。。。我换到unix环境后生成的token为 32933381064794967。访问:
得到hint:
登陆,得到flag:
PHP Fairy
有一个登陆框。题目给了源码
考察php弱类型。经过md5加密后生成以0e开头的字符串,而以0e开头的字符串用==
比较时会被转换成0 == 0
即成立。而!==
不仅比较值,而且还会比较类型。所以我们只要传入pass的值为一个0e开头的值,并且长度为32位($pass长度为32位),比如说:0e509367213418206700842008763514。
得到flag:
Malicious upload
上传题,一般关注文件名后缀和content-type。经过fuzz:)知道,对filename,服务器端的检测时从左向右匹配.xxx
,若遇到的第一个.xxx
不是png则上传失败,另一个就是需要把content-type设置为image/png
得到flag:
Security through obscurity!
题目说:You don't have admin access.
。一脸懵逼,抓包发现一个奇奇怪怪的cookie:
看着。。就很像base64加密;)
|
|
后面那串感觉很像md5,解密无果。想想先尝试改改一些东西,,比如把guest改成admin,false改成true,base64加密后得到:
所以基本可以断定后面那串是md5,发包后,提示
之后我把原始的包,没有改过cookie的包直接fowward掉后提示说:
说明有时间限制,结合前面做过的题目推断1498908736
是unix时间戳,它可以直接转换为2017/7/1 19:32:16
。
接下来,从整体上看一下这个cookie,它被冒号:
分为两段。所以:
不过,第二个值不清楚是如何生成的,也许只是个随机值。所以我们改一改,记得把unix时间戳改大一点不然会提示过期:
得到flag:
REST in peace
题目提示:Your goal is to get superadmin access
题目地址是:https://ringzer0team.com/challenges_page/web100_c0f8a764ea6592548917aaf18261f42c.php
直接访问会显示Access Denied。
抓包后在响应包头部发现奇怪的东东,见下:
发现是sha512加密,简单咯:
将字符串admin经过sha512加密后,在请求包中添加Strong-Auth字段。发送后得到以下内容:
然后,,然后我还没做出来。待续。
PHP feature or 0day?
题目给了源码。
%0a绕过即可。
payload1:
发现有flag.txt。
payload2:
得到flag:
Password reset reloaded
题目提供了源码。伪随机数的问题,跟前面的reset passwd的题一样,点了reset后,会提示说:
所以为了得到16位digits code,需要得到randomDigit。为得到randomDigit,需要先得到seed。而seed由$seed = (int)bin2hex(openssl_random_pseudo_bytes($size / 2));
生成。用如下php代码生成:
得到16位digit code为3675356291270936。访问:
得到passwd:CrytoIsCool!1337。登陆得到flag:
Serial killer!
点进去时链接是:
后面跟的一串base64加密,解密后为:
注意解密后里有\x00
,是不可显示字符。从base64解密结果猜测为php反序列化问题。我们随便参数改改,传进去试试,结果得到报错:
格式化后源码如下:
由源码知道,uStruct由(object)array()得到,我们需要设置uStruct的action指为’ShowFlag’,这样才会调用ShowFlag函数。设置uStruct的flag值为’Please?’,设置uStruct的time值不为空,才能正确打印出flag。
用如下脚本构造:
得到:
为能让服务器端正确解析,需要再加入两个不可见字符\x00
,用python脚本如下:
得到:
抓包,替换参数,如下:
得到flag:
Looking for the flag?
可以用php://filter读到源码:
得到flag: