水题集合

杂项题记录

刷过的杂项题记录

  • JarvisOJ basic_help!!
  • afctf 数据恢复2
  • 网鼎杯 advenced
  • hackergame2018 喵咪遥控器
  • hackergame2018 喵咪克星
  • gettingStart
  • FEZ
  • 迟来的签到
  • 国庆杂项大礼包

JarvisOJ basic_help!!

打开压缩包发现有加密,但是拖到爆破软件中未能得到密码,查找资料发现可能是伪加密。用010editor查看文件,并修改二进制文件。修改结果如下,也就是将ushort deFlags的值将09改为00

进行了这个修改之后,就可以直接将压缩文件解压,是一个word文件,打开如下

考虑这是一种word隐写(关于word隐写的各种类型和破解方法详看这个博客https://blog.csdn.net/drondong/article/details/79322799 ),而这个word的隐写方式为博客中的第三种,解压后得到几个文件夹,最后在word>media中找到了flag如下

afctf 数据恢复2

打开压缩包发现有大量的文件夹,文件夹最底层才是可能存在flag的txt文件,编写脚本提取字符串并输出flag

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
path = r'C:\Users\Max_Wang\Documents\CTF\Challenge\Misc\temp'
text = ''
for root,dirs,files in os.walk(path,topdown=False):
for name in files:
temp = os.path.join(root,name)
if temp.endswith('.txt'):
f = open(temp)
text = f.read()
if 'afctf' in text:
print text

得到flag

afctf{Traver31ng_the_d1rect0ry}

网鼎杯 advenced

看到writeup之后,真的觉得这道题就是用来耍我们的

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/python
# -*- coding: ascii -*-
enc = 'K@LKVHr[DXEsLsYI@\\AMYIr\\EIZQ'
s = ''
for i in range(len(enc)):
if i % 2 == 0:
s+= chr(ord(enc[i]) ^ 45)
else:
s+= chr(ord(enc[i]) ^ 44)
print s

解得flag如下

flag{d_with_a_template_phew}

hackergame2018 喵咪遥控器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import cv2
import os
import numpy as np
canvas = np.ones((600,600,3),dtype="uint8")
canvas = canvas*255
list = open("C:\Users\Max_Wang\Desktop\seq.txt").read()
r_point = [7,7]
for c in list:
canvas[r_point[0],r_point[1]] = [0,0,0]
if c =='D':
r_point[0] += 1
elif c == 'R':
r_point[1] += 1
elif c == 'U':
r_point[0] -= 1
else:
r_point[1] -= 1
cv2.imwrite("1.jpg",canvas)
cv2.imshow("Canvas",canvas)
cv2.waitKey(0)

hackergame2018 喵咪克星

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#!/usr/bin/env python3
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('202.38.95.46',12009))
s.recv(2048)
while True:
expression = s.recv(0x200).decode('utf-8')
expression = expression.replace('exit()',"None")
expression = expression.replace('__import__(\'time\').sleep(100)',"None")
expression = expression.replace('__import__(\'os\').system(\'find ~\')','None')
print(expression)
buf = ''
buf += str(eval(expression))
buf += '\n'
s.send(buf.encode('utf-8'))

gettingStart

1
2
3
4
5
6
7
8
from pwn import *
p = remote('117.78.26.135','30176')
context.log_level = 'debug'
addr = 0x559488168D81
payload = 'a'*0x18+p64(v7)+p64(v8)
p.recvuntil('on you.\n')
p.send(payload)
p.interactive()

flag{d7e2d80b9ed681dbbcc8c2b5b0b63374}

FEZ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import binascii
test_L = 0x0b7361c8143e5935f9f5be3949cc07ed7a5ba6f258ebd91f29c5a7
test_R = 0xd16976f8dfb7fa422a6167281e573d015cc6d995841d5cab07923c
c_test_L = 0xf46d9ffa6a28a3fc2aa17c244ec29fc6a7bf5cac0da4489ad53782
c_test_R = 0xf1ef66597dc2928517b56693347ad468154e6f0f1ff8501fa6a1b1
a = test_R ^ c_test_L
b = c_test_R ^ test_L ^ test_R
c_L = 0x44668860d4e23030bd4a0981530bc1d6da1a20f821aa5194125886
c_R = 0x2cfb716cac503d0f0dcec150171aecfe4d86839f346ff26f2a6a70
origin_R = c_L ^ a
origin_L = c_R ^ origin_R ^ b
R = str(hex(origin_R))
L = str(hex(origin_L))
print binascii.a2b_hex(L[2:-1]+R[2:-1])

flag{festel_weak_666_rbababababa}

迟来的签到

1
2
3
4
5
6
7
8
9
10
11
12
import base64
cipher = 'AAoHAR1XICMnIlBfUlRXXyBXJFRSUCRRI1RSJyQkIlYgU1EjURs='
cipher = base64.b64decode(cipher)
#ciper='\x00\n\x07\x01\x1dW #\'"P_RTW_ W$TRP$Q#TR\'$$"V SQ#Q\x1b'
# print(cipher)

for i in range(0,128):
result=''
for j in cipher:
result+=chr(i^j)
if 'flag{' in result:
print(result)

flag{1FEAD694219F1B246B7E24ABBD0F57E7}

国庆杂项大礼包

大佬国庆节前夕出的杂项题,给新人(wo)练手。

第一关

文件中有一个压缩包和一张图片,压缩包解压需要密码。

一种jpg图片隐写方法,由于0xffd9为jpg文件结束的标志,这之后的内容不会被读取。而且010editor也分析出了这一段unknownPadding,看上去像base64编码,最终解码得到下一关的解压密码。

下一关解压密码

ThIS1sTh3PasS

第二关

文件依旧是一张图片和一个加密压缩包

右键看图片属性,发现备注里面有一段貌似密码的字符串,大写+数字,应该是base32位编码

下一关解压密码

happynationalda

第三关

一个txt文件和一个加密压缩文件

txt文件对密码有提示,所以想到爆破,打开archpr

得到爆破结果

下一关解压密码

005132

第四关

一个png文件和一个加密压缩文件

用kali打开图片发现IHDR: CRC error,然后图片中的皮卡丘有点不完整,所以想到修改高度,但是修改为多少呢,我们通过crc的值爆破一下,代码如下

1
2
3
4
5
6
7
8
import binascii
import struct
misc = open("zhenhaowan.png","rb").read()
for i in range(1024):
data = misc[12:20] + struct.pack('>i',i)+ misc[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0x4F5038A4:
print i

用010editor修改高度值为500,恢复图片,得到下一关的密码

下一关解压密码

Ohnextp1

第五关

一个png文件、一个txt文件和一个加密压缩包

txt文件中给出了提示,根据提示用010editor提取每个IDAT节中插入的内容,要注意,插入的内容在crc值之前,如果按位置将crc值之后的值提取出来,虽然图片还原了,但crc值不对。

最终还原的图片如下

下一关的解压密码

366DD9140761E851C14088AD7C250FD93A98E0CB4BCDFAD474DAAC73CEC7DE9DE56A

第六关

一个加密压缩包

没有其他提示信息,考虑伪加密,用010editor将deFlags的值从9修改为0,直接解压。

第七关

一个flag.txt文件

里面的内容非常像css代码设置背景图时,后面跟着的url,复制到浏览器地址栏中并转到,就看到了flag

最终的flag为

flag{Go0D_g0OD_Study_day_DaY_9P}

0%