打了好几天最后也只是80多名,我好菜啊.jpg

0x00  (╯°□°)╯︵ ┻━┻

题目:

(╯°□°)╯︵ ┻━┻

d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd

一开始被这个(╯°□°)╯︵ ┻━┻误导以为是jjencode,尝试了好久没啥结果,后面又有人说是翻转,试了很久还是没结果。然后跑了下移位密码获取flag

贴上脚本

 1 s='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd'
 2 '''
 3 s1=''
 4 for x in range(len(s)/2):
 5     s1+=chr((int(s[x*2:x*2+2],16))%128)
 6 print s1
 7 '''
 8
 9 for j in range(20):
10     s1=''
11     for x in range(len(s)/2):
12         s1+=chr((int(s[x*2:x*2+2],16)-j)%128)
13     print s1
14     

0x01 第四扩展FS

题目:D公司正在调查一起内部数据泄露事件,锁定嫌疑人小明,取证人员从小明手机中获取了一张图片引起了怀疑。这是一道送分题,提示已经在题目里,日常违规审计中频次有时候非常重要。 https://pan.baidu.com/s/1DJpMFU2lajHGTo0yfzTHVQ 密码:fpp4

这道题很多坑,拿到题目看题目名字就可以知道它考的是ext4文件,先用压缩软件打开查看了一下

因为没怎么接触过ext4文件系统所以不知道journal文件是拿来干嘛的,百度后说是文件系统日志,所以考虑mount到linux上,但是怎么都不成功。

另外还有一个加密的file.txt,用binwalk扫了下文件,发觉就是这两个文件

为了寻找file.txt密码,用winhex打开jpg后发现有些图片有敏感信息,然后直接查看图片属性,发现解压密码

解压打开file.txt

根据提示频率,统计一下字符出现频率,贴上脚本,得到flag

1 import collections
2
3 f=open('file.txt','r')
4 print collections.Counter(f.read())

0x02 流量分析

题目:提示一:若感觉在中间某个容易出错的步骤,若有需要检验是否正确时,可以比较MD5: 90c490781f9c320cd1ba671fcb112d1c
提示二:注意补齐私钥格式
-----BEGIN RSA PRIVATE KEY-----
XXXXXXX
-----END RSA PRIVATE KEY-----

这题给的数据包很大,而且有很多坑,数据包前面有两个用ftp传输加密压缩文件fl-g.zip,sqlmap-dev.zip,中间有九封邮件,只到看到最后才会发现本题关键ssl加密通信。

前面的两个压缩包可能是本题彩蛋,不过我是真的解不出来。。。所以跳过,直接导出邮件。

将导出的邮件导入qq邮箱中查看,可以发现这个

这里是本题关键,在数据包中这里是很大一串base64,解密后得到rsa私钥

,将私钥识别补齐格式进行ssl解密得到

0x03 安全通信

题目:请通过nc XXXX.XXXX.XXXX.XXXX XXXX答题,mission keyb9ba15b341c847c8beba85273f9b7f90agent id随意填就可以

 1 #!/usr/bin/env python
 2 import sys
 3 import json
 4 from Crypto.Cipher import AES
 5 from Crypto import Random
 6
 7
 8 def get_padding(rawstr):
 9     remainder = len(rawstr) % 16
10     if remainder != 0:
11         return '\x00' * (16 - remainder)
12     return ''
13
14
15 def aes_encrypt(key, plaintext):
16     plaintext += get_padding(plaintext)
17     aes = AES.new(key, AES.MODE_ECB)
18     cipher_text = aes.encrypt(plaintext).encode('hex')
19     return cipher_text
20
21
22 def generate_hello(key, name, flag):
23     message = "Connection for mission: {}, your mission's flag is: {}".format(name, flag)
24     return aes_encrypt(key, message)
25
26
27 def get_input():
28     return raw_input()
29
30
31 def print_output(message):
32     print(message)
33     sys.stdout.flush()
34
35
36 def handle():
37     print_output("Please enter mission key:")
38     mission_key = get_input().rstrip()
39
40     print_output("Please enter your Agent ID to secure communications:")
41     agentid = get_input().rstrip()
42     rnd = Random.new()
43     session_key = rnd.read(16)
44
45     flag = '<secret>'
46     print_output(generate_hello(session_key, agentid, flag))
47     while True:
48         print_output("Please send some messages to be encrypted, 'quit' to exit:")
49         msg = get_input().rstrip()
50         if msg == 'quit':
51             print_output("Bye!")
52             break
53         enc = aes_encrypt(session_key, msg)
54         print_output(enc)
55
56
57 if __name__ == "__main__":
58     handle()

分析代码得知,该题为aes  ecb加密,这几天密码学课刚好讲到这,ecb是一种非常不安全的加密,wiki上有很好的举例。脚本放后面了。

1.本题通过输入agent_id,构造形如

Connection for mission: {agent_id}, your mission's flag is: DDCTF{32位}的字符串,

用随机生成的16位密钥进行加密,在一次连接中密钥不会变换

2.因为aes的特性通过改变输入agent_id长度,可以确定flag长度为32位,如下图

3.因为aes特性将字符串16位一组分组,当输入12345678时,字符串多出一位},分析脚本得知会用0补齐。

4.aes_ecb的特性,最后一组的}和单独输入}加密后一样,得知可以进行爆破,通过改变agent_id长度进行爆破。得到flag

 1 #coding=utf-8
 2 import socket
 3 import string
 4 mission_key = '''xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'''
 5 a='''1234567890123456789012345678901234567890'''#最初的agent_id
 6 flag='DDCTF{'
 7 msg="flag is: DDCTF{"
 8 for x in range(1,33):#长度32位
 9     agent=a[:40-x]+'\n'#每次变换agent
10     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
11     s.connect(('116.85.48.103',5002))
12     s.recv(1024)
13     s.send(mission_key+'\n')
14     s.recv(1024)
15     s.send(agent)
16     c=s.recv(1024).rstrip()
17     for i in string.printable:
18         s.recv(1024)
19         s.send(msg+i+'\n')
20         ss=s.recv(1024).rstrip()[:32]
21         if(ss==c[160:192]):
22             msg=msg[1:]+i
23             flag+=i
24             print flag
25             break
26     s.close()
27 print flag+'}'

0x04 complex stego

题目:

不算提示的提示3:这道题一共有两个解法,之前只提示了一种,另外一种比较简单

不算提示的提示2:https://www.bilibili.com/video/av19141078
https://www.bilibili.com/video/av21411551
P.S. 出题时间在出视频时间之前,从这个意义上说跟题目没有关系,因此这是不算提示的提示

提示:请善用搜索引擎来学习,重点是z

=====

警方正在利用某黑客使用过的设备,来追查其行踪,并发现了下面附件中的文件。

该黑客利用附件中的encrypt.py,将其密钥转换成encrypted.bmp保存。警方在测试时,发现利用encrypt.py字符串“DDCTF{}”能被转换成下图的美丽图样。

你能帮助警方从encrypted.bmp恢复出该黑客的密钥么?(为便于修正误差,本题flag后面重复出现了一次flag本体)

题解:根据两张图片和一些我自定义的字符串进行加密,得到字符串长7位时每种颜色出现6次,8位时出现7次,数出加密图片颜色次数位37次可以确定加密的字符串长38位。根据题意flag本体重复了一次所以加密字符串格式为DDCTF{15位} 15位,还有一位一直不知道是啥,现在知道是空格了

直接引用出题人的解答吧,毕竟我连傅里叶变换都没学过。只知道解题脚本是用那个微分方程写出来的。

https://github.com/garzon/DDCTF_2018/tree/master/complex_stego

贴一下出题人的解题脚本

 1 from PIL import Image
 2 import cmath, math, random, string
 3
 4 maxLen = 45
 5 img_size = 800
 6 abs_cor_size = 1.05
 7 maxValue = 2200.0
 8
 9 def linear_map(v, old_dbound, old_ubound, new_dbound, new_ubound):
10     return (v-old_dbound)*1.0/(old_ubound-old_dbound)*(new_ubound-new_dbound) + new_dbound
11
12 def read_from_img(img):
13     def mapping(r, i):
14         x = int(round(linear_map(r, -abs_cor_size, abs_cor_size, 0, img_size)))
15         y = int(round(linear_map(i, -abs_cor_size, abs_cor_size, img_size, 0)))
16         return (x, y)
17     def X(z):
18         pix_pos = mapping(z.real, z.imag)
19         t = img.getpixel(pix_pos)
20         return complex(linear_map(t[1], 0, 255, -maxValue, maxValue), linear_map(t[2], 0, 255, -maxValue, maxValue))
21     return X
22
23 def z_decrypt(X):
24     real_max_val = 0.0
25     decrypted = []
26     for n in xrange(maxLen):
27         res = 0.0
28         dw = 0.001
29         w = -math.pi
30         while w < math.pi:
31             v = X(pow(math.e, 1j * w))
32             if v.real > real_max_val: real_max_val = v.real
33             if v.imag > real_max_val: real_max_val = v.imag
34             res += v * pow(math.e, 1j * w * n) * dw
35             w += dw
36         decrypted.append(res/math.pi/2)
37     print 'realmax', real_max_val
38     err = [math.fabs(j.imag) for j in decrypted]
39     res = ''.join([string.printable[j-1] if j <= len(string.printable) and j >= 1 else '?' for i in decrypted for j in [int(round(i.real))]]).strip('?')
40     return res
41
42 img = Image.open('encrypted.bmp')
43 X = read_from_img(img)
44 decrypted = z_decrypt(X)
45 print len(decrypted), decrypted
46 print '--------- decrypted! ----------------'

转载于:https://www.cnblogs.com/kagari/p/8889412.html

DDCTF-2018-writeup(5misc)相关推荐

  1. 2019 DDCTF 部分writeup

    网上的wp已经很多了,但wp普遍很简略.我尽量写的详细一点. 一.WEB 滴~ 拿到题目后首先右键查看源代码,发现图片是以base64传送的 而且看url发现里面应该是包含了文件名,并且用了某个编码. ...

  2. 第二届红帽杯线上初赛 RedHat 2018 WriteUp

    又是一个划水的比赛,作看高中生吊打全场orz,太强了. WEB simple upload 进入一个登陆页面,抓包之后发现cookie有admin=0 改成1之后进入了一个上传页面,获取指纹之后,明显 ...

  3. Breaking the Ledger Security Model

    In this post, I'm going to discuss a vulnerability I discovered in Ledgerhardware wallets. The vulne ...

  4. [翻译]盲SSRF利用链术语表

    翻译]盲SSRF利用链术语表 盲SSRF利用链术语表 介绍 什么是服务器请求伪造(SSRF)? SSRF(Server-Side Request Forgery:服务请求伪造)是一种由攻击者构造,从而 ...

  5. 2018湖湘杯海选复赛Writeup

    2018湖湘杯Writeup 0x01 签到题 0x02 MISC Flow 0x03 WEB Code Check 0x04 WEB Readflag 0x05 WEB XmeO 0x06 Reve ...

  6. Defcon 2018 Qualify: Easy Pisy writeup

    文章目录 Defcon 2018 Qualify: Easy Pisy 1. Source Code 2. Writeup 3. Info 4. Analysis of Author 4.1 janm ...

  7. 强网杯2018 - nextrsa - Writeup

    强网杯2018 - nextrsa - Writeup 原文地址:M4x@10.0.0.55 所有代码均已上传至我的github 俄罗斯套娃一样的rsa题目,基本把我见过的rsa套路出了一遍,值得记录 ...

  8. 2019年CTF4月比赛记录(三):SUSCTF 2nd、DDCTF、国赛线上初赛部分Web题目writeup与复现

    四月中旬以来事情还是蛮多的,先捋一捋: 首先有幸参加了东南大学承办的SUSCTF 2nd,虽然比赛的规模不是很大,但是这也是第一次以小组的方式正式参加比赛,也是对前期学习成果的检验.在同组成员的努(带 ...

  9. 2018“百越杯”第四届福建省高校网络空间安全大赛部分题目writeup

    2018"百越杯"第四届福建省高校网络空间安全大赛writeup 0x00题目存档: 链接: https://pan.baidu.com/s/1v59VfheEC5XY8vyKvg ...

  10. 2018福建省“百越杯”CTF初赛writeup

    2018福建省"百越杯"CTF初赛writeup PWN Boring Game 题目描述 nc 117.50.59.220 12345 解题经过下载下来后有两个文件pwn和lib ...

最新文章

  1. 机器学习常用损失函数小结
  2. 服务器到底长什么样子啊(#゚Д゚)?
  3. 数据结构实验之链表五:单链表的拆分-sdut
  4. CentOS 安装python3.6
  5. MySQL数据库性能优化--SQL优化
  6. Compound Interest Calculator4.0
  7. 10、Power Query-合并查询与追加查询结合应用
  8. 【0ms优化】剑指 Offer 18. 删除链表的节点
  9. 如何调整自定义标签样式
  10. 【CF#192 A】Funky Numbers (二分,查找,二元组)
  11. 修改Eclipse的WorkSpace保持数[转载]
  12. Dynamic Multipoint ***(DM***)
  13. 认证杯网络挑战赛C题破局共享汽车
  14. android剪贴板清空,如何访问和清除Android手机上的剪贴板
  15. 使用USB充电的5号电池
  16. 33、什么是 AIO?
  17. 从 Factor Zoo 到 Factor War,实证资产定价走向何方?
  18. 中移动浦发联合发布四款产品 ,NFC手机年底上市
  19. 实现类似微信聊天功能的mysql表设计
  20. Duilib异形窗口

热门文章

  1. Yii2 中cookie的用法(2)
  2. Linux正則表達式-定位元字符
  3. 移动数据平台mParticle获1750万美元B轮融资,帮助企业快速获取客户数据
  4. 一步一步教你加密解密技术——软件保护技术
  5. 机房收费系统--登录窗体
  6. pip安装python包出错:ctype = ctype.encode(default_encoding) # omit in 3.x!
  7. Spring @Async注解
  8. 指明方向与趋势!2019开发者技能报告出炉!!!
  9. STL系列:map和unordered_map
  10. padding-bottom属性的作用