V0W's Blog

TJCTF2018 WP

字数统计: 1,285阅读时长: 6 min
2018/08/14 Share

TJCTF

这个CTF怎么说呢。。。脑洞比较大,但是很多题其实都不难。只是这个脑洞,我真的有点想不到。。。也还算学到点东西吧,总结一下。

WEB

blank

查看源代码,get flag

带着cookie访问一下就行链接就行。

Central Savings Account

忘记密码,要求我们找到密码,于是在firefox->F12->调用栈->main.js找到了下面的代码。

1
2
3
4
5
6
7
8
9
10
$(document).ready(function() {
$("#login-form").submit(function() {
if (md5($("#password").val()).toLowerCase() === "698967f805dea9ea073d188d73ab7390") {
$("html").html("<h1>Login Succeeded!</h1>");
}
else {
$("html").html("<h1>Login Failed!</h1>");
}
})
});

md5(password) === "698967f805dea9ea073d188d73ab7390"

password = “avalon”

Programmable Hyperlinked Pasta

https://programmable_hyperlinked_pasta.tjctf.org/?lang=/../flag.txt

Request Me

1.tips:google http request options
于是,我用OPTIONS 请求网站,得到这样的响应

1
2
3
GET, POST, PUT, DELETE, OPTIONS
Parameters: username, password
Some methods require HTTP Basic Auth

2.根据OPTIONS的响应,我们登陆需要username和password但是我们明显不知道,PUT是上传用的请求,于是可以上传一个username和password,

1
PUT https://request_me.tjctf.org/?username=v0w&password=123

响应

1
I stole your credentials!

3.这时POST请求,发现一个授权,于是输入刚刚PUT上去的username&password,得到这样的响应

1
Maybe you should take your credentials back?

让我们把证书拿走,应该是删除的意思。
4.DELETE https://request_me.tjctf.org/
postdata(username=v0w&password=123)

1
Finally! The flag is tjctf{wHy_4re_th3r3_s0_m4ny_Opt10nS}

Moar Horses

F**king game

一直访问就行了,我tm
脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests

url = 'https://moar_horse.tjctf.org/'
url0 = 'https://moar_horse.tjctf.org/legs'
res = requests.get(url0)
print res.text
txt = res.text
i = 0
while 'tjctf' not in txt:
res = requests.get(url0)
txt = res.text
i += 1
print i

print txt

运行结果如下:

1
2
3
4
5
6
7
8
9
...
90
91
...

| | | | || | </pre>

<a href="/legs">tjctf{h0rs3s_h4v3_lonG_l3gS}</a>
[Finished in 89.8s]

Msic

trippy

文本查找tjctf,即可。

Stegslove 打开切换通道即可看到flag

Discord

签到题

interference

我们有2个由白色和黑色像素组成的图像。 我们使用Stegsolve来操作:NOT(IMG1 ^ SUB(IMG1,IMG2))

  1. v3 = v1 - v2
  2. res = v1 ^ v3
  3. res = Not(res) # 反色

关于这个算法,我也不太明白为什么,但是,尝试着结果就出来了。

tjctf{m1x1ing_and_m4tchIng_1m4g3s_15_fun}

Nothing but Everything

My computer got infected with ransomware and now none of my documents are accessible anymore! If you help me out, I’ll reward you a flag!

我真的 没想到这个怎么做,下载下来的文件都是数字,可能是某种算法加密,但是算法那么多,我真的想不到是那种算法。

在看了大佬的视频以后才知道的

下面就将大佬的视频翻译成wp吧2333

下载文件后解压,发现全是数字,haha.txt
有提示

1
2
All your files have been encrypted with a uncrackable algorithm.
You are now screwed forever.

看到文件名1262404985085867488371,联想全是数字,会不会是hex以后编码成数字,于是猜测 会不会是hex?

于是试了一下

1
2
3
4
5
6
>>> hex(1262404985085867488371)
'0x446f63756d656e7473L'
>>> hex(1262404985085867488371)[2:-1]
'446f63756d656e7473'
>>> hex(1262404985085867488371)[2:-1].decode('hex')
'Documents'

woc,还真是。

于是编写脚本,还原文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python
from glob import glob
import os

directory = '1262404985085867488371'

def clarify(number):
return hex(int(number))[2:].replace('L','').decode('hex')

# os.chdir(directory)
os.chdir(directory+'/1466921579')
for i in os.listdir('.'):
try:
print clarify(i)
c = open(i).read()
open(clarify(i),'w').write(clarify(c))
except:
print 'fail with', i

结果:

1
2
3
4
5
6
here.xlsx
silly.doc
Word Document Checklist.doc
Georgia_opposition_NATO-Eng-F.doc
here (2).xlsx
[Finished in 1.7s]

mark

但是有一点比较奇怪,就是我恢复文件以后都打不开,但是应该是没问题才对啊,
换了Linux也不行,无奈==、

huuuuuge

这个题贼tm坑,一开始以为是web,发现也没东西。

拿nmap跑

mark

ssh应该不是了,用git

git clone git://104.154.187.226/huuuuuge 

但是出错,太大了,out of memory
mark

所以我们需要寻找git clone 一部分的方法

git clone --depth 1 git://104.154.187.226/huuuuuge flag

mark

tjctf{this_fl4g_is_huuuuuge}

Crypto

Vinegar

1
2
3
key = Kkkkk kkkkKkkkkkkkkKkkkkkkkkKkk
flag = uucbx{simbjyaqyvzbzfdatshktkbde}
sha256 = 8304c5fa4186bbce7ac030d068fdd485040e65bf824ee70b0bdbac03862bec93

解法一:
sha256破解网站上直接破解,成功率取决于你的网站咋样,推荐能破解sha256的网站,可能要自备梯子。

话说其实这应该是别人解出来以后上传结果到库里面吧。还是老老实实看看解法二吧。

解法二:
钥匙的长度是9。 由于前五个字符被解码为tjctf,因此只能确定密钥的前五个字母。 其余4个字符用于查找具有匹配哈希值的字符串。

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
import string
import hashlib
import itertools

def get_flag(s):
flag = s[:5]
flag += '{'
flag += s[5:]
flag += '}'
return flag

target = '8304c5fa4186bbce7ac030d068fdd485040e65bf824ee70b0bdbac03862bec93'

al_l = string.lowercase

c = 'uucbxsimbjyaqyvzbzfdatshktkbde'
p_head = 'tjctf'
k_size = 9

k = ''
for i in range(len(p_head)):
index = al_l.index(c[i]) - al_l.index(p_head[i])
if index < 0:
index += len(al_l)
k += al_l[index]

for s in itertools.product(al_l, repeat=4):
key = k + ''.join(s)
p = ''
for i in range(len(c)):
index = al_l.index(c[i]) - al_l.index(key[i%k_size])
if index < 0:
index += 26
p += al_l[index]
flag = get_flag(p)
if hashlib.sha256(flag).hexdigest() == target:
print 'key =', key
print 'flag =', flag
break

结果如下:

1
2
3
key = blaisevig
tjctf{onevinaigrettesaladplease}
[Finished in 4.3s]

CATALOG
  1. 1. TJCTF
  2. 2. WEB
    1. 2.1. blank
    2. 2.2. Cookie Monster
    3. 2.3. Central Savings Account
    4. 2.4. Programmable Hyperlinked Pasta
    5. 2.5. Request Me
    6. 2.6. Moar Horses
  3. 3. Msic
    1. 3.1. trippy
    2. 3.2. Weird Logo
    3. 3.3. Discord
    4. 3.4. interference
    5. 3.5. Nothing but Everything
    6. 3.6. huuuuuge
  4. 4. Crypto
    1. 4.1. Vinegar