(1.16有更新)ROIS冬令营第一周Write Up
废话很多。。
web
[Week1]HTTPtest
- 这是什么?bp抓一下!这是什么?bp抓一下!这是什么?bp抓一下!这是什么?bp抓一下!这是什么?bp抓一下!这是什么?bp抓一下!这是什么?bp抓一下!这是什么?bp抓一下!
- Response里面可以看到:flag: I can only give you flag with the browser of
ROIS_browser
- 由题意得,把Request的User-Agent改成
ROIS_browser
[Week1]ViewSource
view-source是一种协议,可以查看网页源代码
- 在浏览器地址栏前面加上view-source:
btw其实我是上一题刚做完顺手在bp抓的 - 可以从源代码看出来,它大概的意思是它用一串函数复合表达了my_flag,但是没有明确打出来它完整的样子
- 在< script>里面< /script>给它加个JavaScript的输出函数alert()
alert(my_flag) - 🤗🤗🤗🤗
Crypto
[Week1] 0&1
因为没学过python,所以不知道有没有简单的方式,我是最基础的思路
首先,先把二进制八位八位的分开,每八个转一次十进制再转成相应的ASCII码
显然易得,出来的是十六进制,hex解一下
然后可以看出来这一层是base64加密,再解一下
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
28import binascii
import base64
bin = '00110101001101010011011001100010001100110011100100110100011000010011010100110101001100110011001100110111001101000011011000111001001101010011100100110101001110000011010001100101001101100110001100110100011001010011011001100001001101010011001000110110001101100011011000110001001101000011011100110101001101100011001100110100001101010011100000110011001100100011010001100001001101110011000000110110001100100011011001100100001101000011011000110111001110010011011000110101001101010011100000110011001100000011001101100100'
bins = [bin[i:i+8] for i in range(0, len(bin), 8)]
# 将字符串每八位分割
decs = [int(b, 2) for b in bins]
# 将每八位二进制转换为十进制
ascs = [chr(d) for d in decs]
# 将每个十进制数字转换为相应的ASCII码
str=''.join(ascs)
print(str)
# 输出第一次解密结果
hex_str = binascii.unhexlify(str).decode('utf-8')
# hex解密
print(hex_str)
# 输出第二次解密结果
b64_str = base64.b64decode(hex_str)
# base64解密
print(b64_str)
# 输出最后结果
btw,不写代码的方式:
二进制转ASCII
https://www.lddgo.net/convert/string-binary
hex解码
http://tool.geekapp.cn/hex.php
base64解码
https://base64.us/
[Week1]Aniely
这题我捋了一下题干,感觉应该是
1 | #!/usr/bin/env python3 |
首先有两个东西,一个叫passphrase一个叫flag,但咱现在不知道,是咱现在要求的
咱只知道key和enc
key是:
- 用zip函数将passphrase和flag这两个对应的元素打包成元组
- 然后使用列表推导式将元组中的元素进行异或运算
- 并将结果转换为字节形式,赋值给key
enc就复杂了,enc是:
- 判断得到的key长度是否小于32,若小于则将字符串重复多次,直至字符串大于等于32,取前面32位
- 用上面定义的aniely_stream加密key(咋加密还在理解
- 生成一个随机数rand
- 将用zip函数将(passphrase,加密后的key,rand)拉链,异或运算对拉链中的每个元素进行运算
- 返回的值即为enc
我的思路:
- key和enc解一下hex
- 判断得到的key长度是否小于32,若小于则将字符串重复多次,直至字符串大于等于32,取前面32位
- 用上面定义的aniely_stream加密key(咋加密的应该不用理解太仔细吧(是的我没理解
- enc=(aniely_stream加密后的key)^passphrase^rand
- 所以passphrase=enc^(aniely_stream加密后的key)^rand
- 因为key=passphrase^flag,所以把求出来的passphrase^key即为所求flag
- 很不幸里面的rand是随机数所以我们需要爆破一下
- 大概是:
1
2passphrase = bytes(a ^ b ^ c for a, b, c in zip(enc, aniely_stream(key), rand))
flag = bytes(a ^ b for a, b in zip(passphrase, key)) - 刚好题干给了咱一个
itertools.islice()
我们可以用它对rand进行爆破
。。。好吧我承认到这一步我真不会了。。。我一头雾水学了半天(这里的半天是实指)没明白最后我去搜了我有罪1
2for rand in itertools.product(range(256), repeat=2):
rand = bytes(rand) * 16 - 然后最后如果flag出现CCTF的字样,则输出flag这一步卡了半天因为我一开始开头没有b,这混帐玩意儿老给我报错😅
1
2if (flag.startswith(b'CCTF')):
print(flag)
因为flag是一个字节串,加上b的意思是表示以字节的形式来检测
最后附上我的代码。。
1 | from struct import * |
虽然搜了一部分(而且感觉搜的部分是最重要的。。。)但是还是有努力再搜的(目移。。
说起来这是非预期解法吗?我完全想不到其他解法。。也可能我刚学,脑袋里只有xor所以是这个思路
不管了先去吃饭。。。
Misc
Two Dimensional
- 一团乱码,看起来像base64,随便找个网站解一下字符串,看到前边开头是PNG。。显然。。是png文件。。。
2.找个base64转十六进制的网站
belike:
https://tool.hiofd.com/base64-convert-hex-online/ - 把结果导到winhex里面保存为.png后缀的文件
- 打开一看是个缺了一角的二维码,补齐就好了
我不会说我ps没使明白最后是开画板画上那个角的。。 - 找个扫二维码的网站
belike:
https://cli.im/deqr
其实我有QR_Research。。但是我从来不用,都是网上现找的网站。。
LSB
- 解压
- 由题意可知这是lsb隐写
- 用Stegsolve打开,Data Extract打开,勾选Red0/Green0/Blue0还有LSB First
- Save Bin保存为txt文件
misc套娃
base16转字符串
http://www.hiencode.com/base64.html
base64转字符串
https://c.runoob.com/front-end/693/
https://base64.us/
八进制(octal)转字符串
https://photo333.com/octal-to-text-zh.php
hex转字符串
https://www.lddgo.net/string/hex
凯撒密码(Caesar)解密本题位移是10
https://www.qqxiuzi.cn/bianma/kaisamima.php
Base32转字符串同第一个链接
摩斯密码(morse)
https://www.lddgo.net/encrypt/morse
Base32转字符串又是一个base32
10进制ASCII转字符串
https://www.asciim.cn/m/tools/convert_ascii_to_string.html
阿特巴希密码(atbash)
http://www.metools.info/code/atbash209.html
字母大小写转换
https://www.iamwawa.cn/daxiaoxie.html
鼠鼠的假期
- zip文件打开
- 把里面的图片拉去百度识图
- 出来一个北京BAMN coffee的和一个厦门HOUSE OF RA
- 搜索上面这两个的地址
- 提交试一试