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

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

题目:

(╯°□°)╯︵ ┻━┻

d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd

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

贴上脚本

 s='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd'
'''
s1=''
for x in range(len(s)/2):
s1+=chr((int(s[x*2:x*2+2],16))%128)
print s1
''' for j in range(20):
s1=''
for x in range(len(s)/2):
s1+=chr((int(s[x*2:x*2+2],16)-j)%128)
print s1

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

 import collections

 f=open('file.txt','r')
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随意填就可以

 #!/usr/bin/env python
import sys
import json
from Crypto.Cipher import AES
from Crypto import Random def get_padding(rawstr):
remainder = len(rawstr) % 16
if remainder != 0:
return '\x00' * (16 - remainder)
return '' def aes_encrypt(key, plaintext):
plaintext += get_padding(plaintext)
aes = AES.new(key, AES.MODE_ECB)
cipher_text = aes.encrypt(plaintext).encode('hex')
return cipher_text def generate_hello(key, name, flag):
message = "Connection for mission: {}, your mission's flag is: {}".format(name, flag)
return aes_encrypt(key, message) def get_input():
return raw_input() def print_output(message):
print(message)
sys.stdout.flush() def handle():
print_output("Please enter mission key:")
mission_key = get_input().rstrip() print_output("Please enter your Agent ID to secure communications:")
agentid = get_input().rstrip()
rnd = Random.new()
session_key = rnd.read(16) flag = '<secret>'
print_output(generate_hello(session_key, agentid, flag))
while True:
print_output("Please send some messages to be encrypted, 'quit' to exit:")
msg = get_input().rstrip()
if msg == 'quit':
print_output("Bye!")
break
enc = aes_encrypt(session_key, msg)
print_output(enc) if __name__ == "__main__":
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

 #coding=utf-8
import socket
import string
mission_key = '''xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'''
a=''''''#最初的agent_id
flag='DDCTF{'
msg="flag is: DDCTF{"
for x in range(1,33):#长度32位
agent=a[:40-x]+'\n'#每次变换agent
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('116.85.48.103',5002))
s.recv(1024)
s.send(mission_key+'\n')
s.recv(1024)
s.send(agent)
c=s.recv(1024).rstrip()
for i in string.printable:
s.recv(1024)
s.send(msg+i+'\n')
ss=s.recv(1024).rstrip()[:32]
if(ss==c[160:192]):
msg=msg[1:]+i
flag+=i
print flag
break
s.close()
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

贴一下出题人的解题脚本

 from PIL import Image
import cmath, math, random, string maxLen = 45
img_size = 800
abs_cor_size = 1.05
maxValue = 2200.0 def linear_map(v, old_dbound, old_ubound, new_dbound, new_ubound):
return (v-old_dbound)*1.0/(old_ubound-old_dbound)*(new_ubound-new_dbound) + new_dbound def read_from_img(img):
def mapping(r, i):
x = int(round(linear_map(r, -abs_cor_size, abs_cor_size, 0, img_size)))
y = int(round(linear_map(i, -abs_cor_size, abs_cor_size, img_size, 0)))
return (x, y)
def X(z):
pix_pos = mapping(z.real, z.imag)
t = img.getpixel(pix_pos)
return complex(linear_map(t[1], 0, 255, -maxValue, maxValue), linear_map(t[2], 0, 255, -maxValue, maxValue))
return X def z_decrypt(X):
real_max_val = 0.0
decrypted = []
for n in xrange(maxLen):
res = 0.0
dw = 0.001
w = -math.pi
while w < math.pi:
v = X(pow(math.e, 1j * w))
if v.real > real_max_val: real_max_val = v.real
if v.imag > real_max_val: real_max_val = v.imag
res += v * pow(math.e, 1j * w * n) * dw
w += dw
decrypted.append(res/math.pi/2)
print 'realmax', real_max_val
err = [math.fabs(j.imag) for j in decrypted]
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('?')
return res img = Image.open('encrypted.bmp')
X = read_from_img(img)
decrypted = z_decrypt(X)
print len(decrypted), decrypted
print '--------- decrypted! ----------------'

DDCTF-2018-writeup(5misc)的更多相关文章

  1. CTF 湖湘杯 2018 WriteUp (部分)

    湖湘杯 2018 WriteUp (部分),欢迎转载,转载请注明出处! 1.  CodeCheck(WEB) 测试admin ‘ or ‘1’=’1’# ,php报错.点击登录框下面的滚动通知,URL ...

  2. DDCTF 2018线上赛writeup

    第一题: d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e ...

  3. ISCC 2018 Writeup

    题解部分:Misc(除misc500).Web(除Only Admin.Only admin can see flag.有种你来绕.试试看).Reverse.Pwn.Mobile Misc( Auth ...

  4. 2019 DDCTF 部分writeup

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

  5. XXE(XML External Entity attack)XML外部实体注入攻击

    导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...

  6. ISG 2018 Web Writeup

    作者:agetflag 原文来自:ISG 2018 Web Writeup ISG 2018 Web Writeup CTF萌新,所以写的比较基础,请大佬们勿喷,比赛本身的Web题也不难 calc 首 ...

  7. 强网杯2018 - nextrsa - Writeup

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

  8. 攻防世界 WEB 高手进阶区 HCTF 2018 warmup Writeup

    攻防世界 WEB 高手进阶区 HCTF 2018 warmup Writeup 题目介绍 题目考点 PHP代码审计 Writeup 打开 http://220.249.52.134:37877 常规操 ...

  9. 2018国赛 - Writeup(待补充)

    10.0.0.55 Writeup Web 0x01 easyweb 解题思路 题目很脑洞 用户名admin 密码123456进去可得到flag(密码现在换了) 解题脚本 无 Reverse 0x02 ...

  10. 2018工业信息安全技能大赛华东赛区初赛 第2题 writeup

    2018工业信息安全技能大赛华东赛区初赛 第2题 解题思路 本题主要考察点是对常见工控协议的理解(modbus/tcp和s7comm),题目目标是寻找出报文中某条异常报文流量.很让人疑惑的是,题目中并 ...

随机推荐

  1. 微信Emoji表情代码大全

    参考网址 因PC端微信表情包不全,部分表情在PC中有显示问题,手机端微信不存在此问题,或者可以使用文字[微笑]这种方式添加微信表情 含义 标准 DoCoMo KDDI 软银 谷歌 微信 ✂复制这列

  2. ES6 map与filter

    ES6 map与filter 1.map let arr1 = [1,2,3]; let arr2 = arr1.map((value,key,arr) => { console.log(val ...

  3. NSInvocation简单总结

    (1)用法 NSInvocation是调用函数的另一种方式,它将调用者,函数名,参数封装到一个对象,然后通过一个invoke函数来执行被调用的函数,其思想就是命令者模式,将请求封装成对象. 例如,有这 ...

  4. 4.Servlet(动态web资源)

    Servlet (动态web资源) 开发一个动态web资源(即开发一个Java程序向浏览器输出数据) 需完成以下两个步骤 1.编写一个Java类,实现servelet接口 2.把开发好的Java类部署 ...

  5. 谷歌浏览器安装xpath使用

    一.Xpath-helper插件说明 谷歌浏览的插件,目的是可以定位到具体的元素中,实时验证xpath是不是正确 谷歌插件下载位置:https://chrome.google.com/webstore ...

  6. 《数据结构与算法之美》 <02>复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度?

    上一节,我们讲了复杂度的大 O 表示法和几个分析技巧,还举了一些常见复杂度分析的例子,比如 O(1).O(logn).O(n).O(nlogn) 复杂度分析.掌握了这些内容,对于复杂度分析这个知识点, ...

  7. 多线程模块的condition对象

    Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方 ...

  8. C 字符串几点

    1.字符串结尾必须为“\0” 2.多种处理函数在<string.h> 3.常用字符串处理函数: 1.strlen 求字符串长度(\0不算在内) 2.strcpy(a,b) 将b复制到a中 ...

  9. 在idea中相同的字符串使用equals()进行比较时,返回值是flase问题

    最近在idea中遇到了一个编码的问题,我的程序是从前台传过来一个字符串,判断用户的角色(学生,教师,管理员), 在进行equals()判断时,返回的确是false,然后就在网上查了查,发现是编码的问题 ...

  10. python函数大全

    1.range函数 可创建一个整数列表,用于for循环中 格式为:range(start,stop[,step]) start:计数从start开始,默认从0开始 stop:计数从stop结束,但不包 ...