本文章按心情随机更新任意题目,尽量一天一更
由于攻防世界题目会更新,导致有些题目会被删除或者难度会被更改
所以本篇文档的所有题目难度按本人做题的时候的难度算

上次更新时间为 2022-12-10 09:40,版本为:测试版v0.0.51
最新更新题目为:insanity (难度:3)

本教程仅供参考,请以实操为准
主顺序按难度,次顺序按发布题目的时间
跳转请使用Ctrl + f
有任何问题可以在评论区中留言

需要的工具或环境汇总

工具

名称地址
linux-kalilinux-kali 下载地址
python2.xpython2.x 下载地址
python3.7.xpython3.7.x 下载地址
Stegsolve(ss)Stegsolve 下载地址
隐写工具(zsteg)zsteg 安装方法
隐写工具(stegosaurus)stegosaurus 下载地址
010 Editor010 Editor 下载链接

线上工具

名称地址
在线工具站在线工具站
在线工具-培根密码在线工具-培根密码
在线工具-凯撒密码在线工具-凯撒密码
在线工具-hex16转字符串在线工具-hex16转字符串
在线工具-Brainfuck在线工具-Brainfuck
在线工具-pyc反编译在线工具-pyc反编译
在线工具-python2在线工具-python2
在线工具-python3在线工具-python2
在线工具-二维码解码器在线工具-二维码解码器

所需环境

windows
环境名安装方式
linux
环境名安装方式
点击查看开发记录

如有错误和遗漏还请联系我修改。

开发记录

2022-12-06 16:30:38:版本:测试版v0.0.51

  1. 更新版本为:v0.0.51
  2. 更新题目材料栏目的排版
  3. 更新题目排版顺序(已有的题目排版不做变化,新增题目按照发布解题思路的时间排序)

2022-11-06 22:44:08:版本:测试版v0.0.50

  1. 所需工具汇总

2022-10-31 23:55:25:版本:测试版v0.0.50

  1. 新增题目更新记录模块

2022-10-30 23:41:50:发布测试版v0.0.50

  1. 创建文章 Adworld
  2. 创建 MiscPwnWebReverseCryptoMobile 模块框架
点击查看题目更新记录

Misc

[简单] 凯撒大帝在培根里藏了什么 (难度:1

题目来源:XSCTF联合招新赛
题目描述:究极简单题(认真
                  格式为flag{你所得到的大写字符串}
题目材料:点我获取
题目链接:点我跳转
可选工具:在线工具-凯撒密码在线工具-培根密码

下载解压,里面有一个 flag.txt ,打开后发现全是 ABAB ,提交发现失败。
想想题目暗示:凯撒(加密)大帝在培根(加密)里藏了什么,说明这个 flag 至少用了两种加密方式:凯撒密码培根密码
凯撒密码即循环移位密码,其公式为
加密: En(x) = (x + n) mod 26
解密: Dn(x) = (x - n) mod 26
具体可以查看关于凯撒密码的百度百科 => 跳转链接
培根密码加密方式有两种:
第一种:26位加密

26位加密对照表
aAAAAAhAABBBoABBBAvBABAB
bAAAABiABAAApABBBBwBABBA
cAAABAjABAABqBAAAAxBABBB
dAAABBkABABArBAAAByBBAAA
eAABAAlABABBsBAABAzBBAAB
fAABABmABBAAtBAABB
gAABBAnABBABuBABAA

第二种:24位加密

24位加密对照表
aAAAAAhAABBBpABBBAxBABAB
bAAAABi/jABAAAqABBBByBABBA
cAAABAkABAABrBAAAAzBABBB
dAAABBlABABAsBAAAB
eAABAAmABABBtBAABA
fAABABnABBAAu/vBAABB
gAABBAoABBABwBABAA

加密者需使用两种不同字体,分别代表A和B。准备好一篇包含相同AB字数的假信息后,按照密文格式化假信息,即依密文中每个字母是A还是B分别套用两种字体。

解密时,将上述方法倒转。所有字体一转回A,字体二转回B,以后再按上表拼回字母。

法兰西斯·培根另外准备了一种方法,其将大小写分别看作A与B,可用于无法使用不同字体的场合(例如只能处理纯文本时)。但这样比起字体不同更容易被看出来,而且和语言对大小写的要求也不太兼容。

培根密码本质上是将二进制信息通过样式的区别,加在了正常书写之上。培根密码所包含的信息可以和用于承载其的文章完全无关。

具体可以查看关于培根密码的百度百科 => 跳转链接

知道了加密方式,就可以使用在线工具-培根密码
解密出一个字符串 NGBKLATCOZNIXEVZU
然后使用在线工具-凯撒密码
密钥 0~25,试出当 key=6 时解密 或 key=20 时加密,能解出一个有语义的原文 havefunwithcrypto
然后发现要求要大写,可以使用 f12 打开网页调式工具,在 控制台 中输入:

1
"havefunwithcrypto".toUpperCase();

即可得到大写 flag ,格式为:flag{XXX}

[简单] 简单的base编码 (难度:1

来自银河的信号 (难度:1

steg没有py (难度:1

时间刺客! (难度:1

看雪看雪看雪 (难度:1

流量分析2 (难度:1

nice_bgm (难度:1

fakezip (难度:1

Check (难度:1

Wire1 (难度:1

Encode (难度:1

1-misc (难度:1

碎纸机11 (难度:1

Let_god_knows (难度:1

misc2-1 (难度:1

pcap1 (难度:1

running (难度:1

流量分析1 (难度:1

津门杯2021-m1 (难度:1

m0_01 (难度:1

miss_01 (难度:1

pcap1 (难度:1

Ditf (难度:1

QAQ..正在分析中

a_good_idea (难度:1

题目来源:NJUPT-CTF
题目描述:汤姆有个好主意
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

Aesop_secret (难度:1

题目来源:ISCC
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

normal_png (难度:1

题目来源:
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

glance-50 (难度:1

hit-the-core (难度:1

题目来源:CTF
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:Kali LinuxPython3.x

下载解压材料后得到一个后缀为 .core 的文件,拖到 kalistring 输出一下发现不行,有好多干扰项,分隔 flag 也不行,于是只能分隔 {

1
strings 8deb5f0c2cd84143807b6175f58d6f3f.core | grep {

发现可以得到以下字符串

1
cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}

通过观察可以发现每隔4个就有一个大写字母,按照这个规律写一个 py 脚本

1
2
3
4
5
6
7
8
9
10
import re
import sys
from curses.ascii import isupper
a='cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}'
flag=' '
# 从第3个开始(索引为4),到 len(a) 结束,步长为 5
for i in range(3,len(a),5):
flag=flag+a[i]

print(flag)

输出 flag 格式为:ALEXCTF{xxx..}

reverseMe (难度:1

题目来源:XCTF
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:画图工具

打开画图,点击水平翻转
得到 flag 的格式为 flag{xxx}

misc_pic_again (难度:1

hong (难度:1

Test-flag-please-ignore (难度:1

题目来源:CTF
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:在线工具-hex16转字符串

下载解压,得到一个没后缀的文件 misc10
用记事本打开,得到一个字符串
通过观察字符串(都是 0~9,a~f 以内的字符)判断可能和 hex(16进制) 有关,可以用 在线工具-hex16转字符串,转成字符串
就可得到 flag 格式为:flag{xxx}

János-the-Ripper (难度:1

题目来源:CTF
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

Erik-Baleog-and-Olaf (难度:1

can_has_stdio? (难度:1

题目来源:CTF
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:trainfuck

下载解压文件,得到没后缀的文件 misc50,先用记事本打开,打开发现是由 trainfuck 编码组成的小星星阵容,果断交给解密网站 => trainfuck 进行解密
得到 flag 格式为:flag{xxx..}

Training-Stegano-1 (难度:1

题目来源:
题目描述:这是我能想到的最基础的图片隐写术
题目材料:点我获取
题目链接:点我跳转
可选工具:Kali Linux

提示:基础图片隐写
下载后是一个 bmp 文件,直接丢 kali 里用 strings 查看一下

1
strings 2e5e19744c644912928eddc882f3b0b9.bmp

得到 flag,提交 flag{xxx},发现失败
所以 flag 格式为:你所得到的字符串(passwd: 后面的东西)

simple_transfer (难度:1

2017_Dating_in_Singapore (难度:1

题目来源:XCTF
题目描述:01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-0203040310172431-0102030108152229151617-04050604111825181920-0108152229303124171003-261912052028211407-04051213192625
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

pure_color (难度:1

题目来源:CTF
题目描述:格式为flag{xxxxxx}
题目材料:点我获取
题目链接:点我跳转
可选工具:Stegsolve画图工具

下载材料,为一个背景为白色的png图片,想到两种解法
第一种直接用画图打开此图片,在 文件->图片属性 里把 彩色 改为 黑白 即可
第二种需要用到 Stegsolve => ss下载链接
下载解压后得到一个 jar 文件,双击打开,点击 File 选择该图片,点击下方切换键(向左向右都行,建议向左只要切一次) 切换到 Gray bits 模式下即可看到 flag

心仪的公司 (难度:1

适合作为桌面 (难度:1

Banmabanma (难度:1

Become_a_Rockstar (难度:2

倒立屋 (难度:2

halo (难度:2

打野 (难度:2

题目来源:CTF
题目描述:菜你了解CTF圈的实时动态么?flag格式qwxf{}
题目材料:点我获取
题目链接:点我跳转
可选工具:Kali Linuxzsteg

得到一张图片,因为是 bmp 格式的,所以改个名(我改成 dy.bmp)扔进 kali 中执行 zsteg 一下看看
如果报错: zsteg: command not found,说明没安装,可以参考文档 => 安装zsteg,或者看以下我写的教程

kali安装zsteg参考教程

逐行执行代码(如果是注释可以不用)
国内国外下载二选一

1
2
3
4
5
6
7
8
9
10
git clone https://github.com/zed-0xff/zsteg
cd zsteg/
# 国外源
gem install zsteg
# 国内源
# 删除之前下载的(直接选国内的可以不删)
gem sources --remove https://rubygems.org/
# 创建新下载
gem sources --add https://gems.ruby-china.com/
gem sources -l

报错 Failed to connect to github.com port 443:connection timed out 解决方法 => 参考文档,或者看以下我写的教程

1
2
3
4
5
6
# 第一步:设置全局代理
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy http://127.0.0.1:1080
# 第二步:取消全局代理
git config --global --unset http.proxy
git config --global --unset https.proxy

查看是否成功

1
zsteg -h

如果帮助可以出来就说明安装完成,可以正常使用

在保证 zsteg 可以正常使用的情况下执行以下命令

1
zsteg dy.bmp

得到以下结果,其中 flag 格式为:qwxf{xxx..}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[?] 2 bytes of extra data after image end (IEND), offset = 0x269b0e
extradata:0 .. ["\x00" repeated 2 times]
imagedata .. file: OpenPGP Public Key
b1,lsb,bY .. <wbStego size=120, ext="\x00\x8E\xEE", data="\x1Ef\xDE\x9E\xF6\xAE\xFA\xCE\x86\x9E"..., even=false>
b1,msb,bY .. text: "qwxf{xxx}"
b2,msb,bY .. text: "i2,C8&k0."
b4,msb,bY .. file: OpenPGP Public Key
b2,r,lsb,xY .. text: "UUUUUU9VUUUUUUUUUUUUUUUUUUUUUU"
b2,g,msb,xY .. text: ["U" repeated 22 times]
b2,b,lsb,xY .. text: ["U" repeated 10 times]
b3,g,msb,xY .. text: "V9XDR\\d@"
b4,r,lsb,xY .. text: "222\"#33\"#33\"#33\"3222333\"3#321"
b4,g,lsb,xY .. text: "3\"\"\"\"\"3###33##3#UDUEEEEEDDUETEDEDDUEEDTEEEUT#!"
b4,g,msb,xY .. text: "\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"DDDDDDDDDDDD\"\"\"\"DDDDDDDDDDDD*LD"
b4,b,lsb,xY .. text: "gfffffvwgwfgwwfw"

something_in_image (难度:2

flag_universe (难度:2

题目来源:百越杯2018
题目描述:please find the flag in our universe!
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

base64÷4 (难度:2

题目来源:
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

funny_video (难度:2

red_green (难度:2

题目来源:
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

this_is_flag (难度:2

Just-No-One (难度:2

intoU (难度:2

我们的秘密是绿色的 (难度:2

3-11 (难度:2

2-1 (难度:2

Get-the-key.txt (难度:2

MISCall (难度:2

题目来源:noconname-2014-quals
题目描述:没有提示
题目材料:点我获取
题目链接:点我跳转
可选工具:Kali LinuxPython2.x

下载了一个没后缀的文件,不知道是啥,拉到 kali 里面康康

1
2
# 查看文件类型
file d02f31b893164d56b7a8e5edb47d9be5

发现是 bz2 压缩包,进行解压

1
2
# 解压
tar -jxvf d02f31b893164d56b7a8e5edb47d9be5

解压出来一个 ctf 文件夹,进入文件夹发现有一个假的 flag 文件 flag.txt

1
2
3
4
# 进入 ctf 文件夹
cd ctf
# 查看 flag.txt 内容
cat flag.txt

查看是否有隐藏文件,发现有一个 .git,查看一下 git 记录并校验列表中存储的文件,发现了一个 s.py 的文件

1
2
3
4
5
6
# 查看隐藏文件
ls -al
# 查看 git 记录
git log
#校验文件
git stash show

恢复 s.py 文件,然后用 python 执行后(注意是 python2 的语法,使用 python3 需要修改部分内容)即可得到 flag

1
2
3
4
# 恢复文件
git stash apply
# 执行 py 文件
python2 s.py

embarrass (难度:2

题目来源:CISCN
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:Kali LinuxWireshark

下载解压文件,发现是 pcapng 后缀的,直接丢 kali 里面看看
发现是小鲨鱼(Wireshark)的文件,双击打开
ctrl + f
在跳出的搜索框中:
英文版:第一个下拉栏选 Packet bytes,第三个下拉栏选 string 搜索 flag 点击 find,多点几次直到找到 flag,格式看下边
中文版:第一个下拉栏选 分组字节流,第三个下拉栏选 字符串 搜索 flag 点击 查找,多点几次直到找到 flag,格式看下边

也可以用以下方法(在 kali 里执行):

1
strings misc_02.pcapng | grep flag

找到 flag 格式为 flag{Go od..xxx..}

再见李华 (难度:2

题目来源:ISCC
题目描述:假如你是李华(LiHua),收到乔帮主一封密信,没有任何特殊字符,请输入密码,不少于1000个字。同学,记得署名哦~
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

就在其中 (难度:2

QAQ..正在分析中

很普通的Disco (难度:2

很普通的数独 (难度:2

What-is-this (难度:2

QAQ..正在分析中

Recover-Deleted-File (难度:2

Hidden-Message (难度:2

Hear-with-your-Eyes (难度:2

Miscellaneous-200 (难度:2

题目来源:CTF
题目描述:Flag在这里!
题目材料:点我获取
题目链接:点我跳转
可选工具:暂无

QAQ..正在分析中

stage1 (难度:2

题目来源:XCTF
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:Stegsolve微信扫码在线工具-二维码解码器010 EditorKali LinuxPython在线工具-pyc反编译在线工具-python2

下载得到一个 png 图片
扔进 ss(Stegsolve)=> ss下载链接
点击 file 打开文文件,点击下方按钮,即可得到一个二维码,随便找一张,不能用就换一张
可以使用微信扫码也可以使用在线二维码解码器 => 在线工具-二维码解码器
扫描成功后得到一串数字,新建 txt 文件存放这串数字,使用 010 Editor 工具转换 => 010 Editor 下载链接
导入到 010editor(双击打开 => 文件 => 导入十六进制 => 保存)得到一个没有后缀的文件(我命名为 stage1),不知道是什么文件,扔到 kali 中查看是什么文件

1
file stage1

输出 stage1: python 2.7 byte-compiled,说明是 python2.7 的编译文件 pyc,需要进行反编译
将无后缀名文件 stage1 手动改为 stage1.pyc
扔进在线反编译工具进行编译 => 在线工具-pyc反编译
编译后得到源码,如果是 python3 需要修改部分内容(- 表示删除该行,+ 表示添加该行,-和+不需要写)

1
2
-    print flag
+ print(flag)

python2 没有语法问题扔进 python2在线工具 => 在线工具-python2 运行,或者自己电脑上有装 python2 可以直接运行,发现没有结果输出
查看源码,发现是个自定义函数,所以还需要调用,在最后一行加入调用

1
+ flag()

运行 python 文件得到 flag

easycap (难度:2

QAQ..正在分析中

4-2 (难度:2

Excaliflag (难度:2

Cephalopod (难度:2

小小的PDF (难度:2

神奇的Modbus (难度:2

题目来源:XCTF
题目描述:寻找flag,提交格式为sctf{xxx}
题目材料:点我获取
题目链接:点我跳转
可选工具:Kali LinuxWireshark

下载文件,发现是 pcapng 后缀的,直接丢 kali 里面看看
发现是小鲨鱼(Wireshark)的文件,双击打开
题目很明确的告诉我们了寻找 flag ,直接找:

工业设备消息传输使用modbus协议。所以我就采集了modbus的通信数据包。在这些数据传输中存在着flag。接替思路是这样的,利用该modbus读取设备的相关数据。首先读取数据的话modbus 有01,02,03,04功能码,01是读取线圈状态:取得一组逻辑线圈的当前状态(ON/OFF ),02是读取输入状态:取得一组开关输入的当前状态(ON/OFF),03是读取保持寄存器:在一个或多个保持寄存器中取得当前的二进制值,04读取输入寄存器:在一个或多个输入寄存器中取得当前的二进制

wireshark输入modbus过滤追踪tcp流:tcp.stream eq 4
英文版:Analyze => Follow => tcp stream
中文版:分析 => 追踪流 => tcp流
找到 tcf.{E.a…}
得到 flag 格式为 xtcf{Ea…}

misc1 (难度:2

low (难度:2

[中等] QR1 (难度:3

[中等] Lottery彩票 (难度:3

Misc文件类型 (难度:3

信号不好先挂了 (难度:3

saleae (难度:3

Keyes_secret (难度:3

隐藏的信息 (难度:3

奇怪的TTL字段 (难度:3

miscmisc (难度:3

打开电动车 (难度:3

如来十三掌 (难度:3

pdf (难度:3

签到题 (难度:3

QAQ..正在分析中

互相伤害!!! (难度:3

传感器1 (难度:3

warmup (难度:3

Miscellaneous-300 (难度:3

challenge_how_many_Vigenère (难度:3

latlong (难度:3

5-1 (难度:3

4-1 (难度:3

3-1 (难度:3

肥宅快乐题 (难度:3

Py-Py-Py (难度:3

题目来源:XCTF
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:在线工具-pyc反编译python2.xpython2在线编译Kali Linuxstegosaurus

下载得到 pythonpyc 包,用网页工具 在线工具-pyc反编译 进行反编译
得到 python 代码

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# uncompyle6 version 3.5.0
# Python bytecode 3.6 (3379)
# Decompiled from: Python 2.7.5 (default, Aug 7 2019, 00:51:29)
# [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
# Embedded file name: pystego.py
# Compiled at: 2017-08-01 00:44:47
# Size of source mod 2**32: 1961 bytes
import sys, os, hashlib, time, base64
fllag = '9474yeUMWODKruX7OFzD9oekO28+EqYCZHrUjWNm92NSU+eYXOPsRPEFrNMs7J+4qautoqOrvq28pLU='

def crypto(string, op='encode', public_key='ddd', expirytime=0):
ckey_lenth = 4
public_key = public_key and public_key or ''
key = hashlib.md5(public_key).hexdigest()
keya = hashlib.md5(key[0:16]).hexdigest()
keyb = hashlib.md5(key[16:32]).hexdigest()
keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or ''
cryptkey = keya + hashlib.md5(keya + keyc).hexdigest()
key_lenth = len(cryptkey)
string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string
string_lenth = len(string)
result = ''
box = list(range(256))
randkey = []
for i in xrange(255):
randkey.append(ord(cryptkey[(i % key_lenth)]))

for i in xrange(255):
j = 0
j = (j + box[i] + randkey[i]) % 256
tmp = box[i]
box[i] = box[j]
box[j] = tmp

for i in xrange(string_lenth):
a = j = 0
a = (a + 1) % 256
j = (j + box[a]) % 256
tmp = box[a]
box[a] = box[j]
box[j] = tmp
result += chr(ord(string[i]) ^ box[((box[a] + box[j]) % 256)])

if op == 'decode':
if result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0:
if result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]:
pass
return result[26:]
else:
return
else:
return keyc + base64.b64encode(result)


if __name__ == '__main__':
while True:
flag = raw_input('Please input your flag:')
if flag == crypto(fllag, 'decode'):
print('Success')
break
else:
continue

改写此代码并输出 fllag

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# uncompyle6 version 3.5.0
# Python bytecode 3.6 (3379)
# Decompiled from: Python 2.7.5 (default, Aug 7 2019, 00:51:29)
# [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
# Embedded file name: pystego.py
# Compiled at: 2017-08-01 00:44:47
# Size of source mod 2**32: 1961 bytes
import sys, os, hashlib, time, base64
fllag = '9474yeUMWODKruX7OFzD9oekO28+EqYCZHrUjWNm92NSU+eYXOPsRPEFrNMs7J+4qautoqOrvq28pLU='

def crypto(string, op='encode', public_key='ddd', expirytime=0):
ckey_lenth = 4
public_key = public_key and public_key or ''
key = hashlib.md5(public_key).hexdigest()
keya = hashlib.md5(key[0:16]).hexdigest()
keyb = hashlib.md5(key[16:32]).hexdigest()
keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or ''
cryptkey = keya + hashlib.md5(keya + keyc).hexdigest()
key_lenth = len(cryptkey)
string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string
string_lenth = len(string)
result = ''
box = list(range(256))
randkey = []
for i in xrange(255):
randkey.append(ord(cryptkey[(i % key_lenth)]))

for i in xrange(255):
j = 0
j = (j + box[i] + randkey[i]) % 256
tmp = box[i]
box[i] = box[j]
box[j] = tmp

for i in xrange(string_lenth):
a = j = 0
a = (a + 1) % 256
j = (j + box[a]) % 256
tmp = box[a]
box[a] = box[j]
box[j] = tmp
result += chr(ord(string[i]) ^ box[((box[a] + box[j]) % 256)])

if op == 'decode':
if result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0:
if result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]:
pass
return result[26:]
else:
return
else:
return keyc + base64.b64encode(result)


if __name__ == '__main__':
print crypto(fllag,'decode')

报错

1
2
3
4
5
6
Traceback (most recent call last):
File "d:\Adworld\py-py-py\py.py", line 56, in <module>
print(crypto(fllag,'decode'))
File "d:\Adworld\py-py-py\py.py", line 14, in crypto
key = hashlib.md5(public_key).hexdigest()
TypeError: Strings must be encoded before hashing

可能是 python2 的语法在 python3 中废弃了,所以使用 python2 => python2在线编译,发现输出说是隐写 => The challenge is Steganography
参考文档 => Stegosaurus
下载地址 => Stegosaurus

使用 kali 运行 stegosaurus 破译隐写(建议使用python3.7.x或以下版本,3.10.x以上不支持)

1
python3 stegosaurus.py -x 58cadd8d8269455ebc94690fd777c34a.pyc

解得 flag 格式为

1
Extracted payload: flag{xxx}

Time_losing (难度:4

crc (难度:4

Disk (难度:4

ewm (难度:4

双色块 (难度:4

掀桌子 (难度:4

gif (难度:4

QAQ..正在分析中

坚持60s (难度:4

stegano (难度:4

give_you_flag (难度:4

题目来源:XCTF
题目描述:暂无
题目材料:点我获取
题目链接:点我跳转
可选工具:PhotoShop微信扫码在线扫码工具

下载得到一个 gif 动图,通过观察发现有一帧二维码
动图用 PhotoShop 打开,发现在 图层50 有一个缺了 3 个边的二维码,在网上随便找个二维码的图 => 二维码图,把边上的框取下来,粘在缺角的图上
粘出一个完整的二维码可以先用微信扫码试试,微信都扫不出来说明拼接有问题,大概率是拼接位置不对,如果微信可以扫出来就可以用 => 在线扫码工具,扫出来格式为:flag{xxx},提交即可

mysql (难度:4

message (难度:4

qr-easy (难度:4

Avatar (难度:4

test.pyc (难度:4

picture2 (难度:4

Keyword (难度:4

Pwn

empty (难度:2

empty (难度:3

Web

empty (难度:1

empty (难度:2

empty (难度:3

empty (难度:4

Reverse

open-source (难度:3

题目来源:Hack-You
题目描述:菜鸡学逆向学得头皮发麻,终于它拿到了一段源代码
题目材料:点我获取
题目链接:点我跳转
可选工具:Visual Studio Code

下载打开文件 8b6405c25fe447fa804c6833a0d72808.c
查看代码,看到好几个条件判断,分析需求

1
2
3
4
if (argc != 4) {
printf("what?\n");
exit(1);
}

说明 argc 要为 4,否则就退出程序,那 argc = 4

1
2
3
4
if (first != 0xcafe) {
printf("you are wrong, sorry.\n");
exit(2);
}

说明 first 要等于 0xcafe,否则就退出程序,那 firse = 0xcafe

1
2
3
4
if (second % 5 == 3 || second % 17 != 8) {
printf("ha, you won't get it!\n");
exit(3);
}

说明 second 要满足 second % 5 == 3second % 17 != 8其中一个,否则就退出程序,
second = 2525 % 5 == 3false25 % 17 != 8falsefalse || false 结果为 false,那 second = 25

1
2
3
4
if (strcmp("h4cky0u", argv[3])) {
printf("so close, dude!\n");
exit(4);
}

strcmp(value1, value)value1 == value2 时返回0,退出 if 条件,那 argv[3]="h4cky0u"

综上所述,代码修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {
argc = 4;
int first = 0xcafe;
int second = 25;
argv[3] = "h4cky0u";

printf("Brr wrrr grr\n");

unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207;

printf("Get your key: ");
printf("%x\n", hash);

system("PAUSE");
return 0;
}

运行后就能得到 flag

insanity (难度:3

题目来源:CTF
题目描述:菜鸡觉得前面的题目太难了,来个简单的缓一下
题目材料:点我获取
题目链接:点我跳转
可选工具:Kali Linux

下载文件 428f6e6f75754fca8964d35b16a4b709
不知道是什么文件,扔到 kali 里面看看
看起来像是个 Linux 的可执行文件
file 命令查看一下

1
file 428f6e6f75754fca8964d35b16a4b709

提权

1
chmod +x 428f6e6f75754fca8964d35b16a4b709

执行

1
./428f6e6f75754fca8964d35b16a4b709

如果执行没出结果,可以使用字符串查找

1
strings 428f6e6f75754fca8964d35b16a4b709 | grep flag

即可出 flag,格式为: 9447{xxx}

Crypto

Mobile

Android2.0 (难度:4

基础android (难度:4