2018鹏城杯writeup

Welcome

  • 公众号签到flag{ausjnhjajfjakjw45}
wp-welcome.png

easy_crypto

  • 这道题iv直接给了 直接推就行
#!usr/bin/python 
#_*_ coding=UTF-8 _*_

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
from Crypto import Random
import sys,base64
#from FLAG import flag
class CryptoError(Exception):
    pass
class aesdemo:
    #aes = AES.new(key,mode)
    def __init__(self,key):
        self.key = key
        #self.BS=BS
    

    def pad(self,msg):
        #BS = AES.block_size 
        # aes数据分组长度为128 bit
        byte = 16 - len(msg) % 16
        return msg + chr(byte) * byte
    def unpad(msg):
        if not msg:
            return ''
        return msg[:-ord(msg[-1])]      

    def xor(self,a, b):
            #assert len(a) == len(b)
            return ''.join([chr(ord(ai)^ord(bi)) for ai, bi in zip(a,b)])

    def split_by(self,data,step):
            return [data[i : i+step] for i in xrange(0, len(data), step)]

    def encrypt(self, plaintext):
        # 生成随机初始向量IV
        iv = Random.new().read(16)

        aes = AES.new(self.key,AES.MODE_CBC,iv)
        prev_pt = iv
        prev_ct = iv
        ct=""

        msg=self.pad(plaintext)
        print(msg)
        for block in self.split_by(msg, 16):
            ct_block = self.xor(block, prev_pt)
            ct_block = aes.encrypt(ct_block)
            ct_block = self.xor(ct_block, prev_ct)
            ct += ct_block
        # print(b2a_hex(ct))
        return b2a_hex(iv + ct)

    def tsb_decrypt(self, msg):
        #1
        msg = a2b_hex(msg)
        print(msg)
        iv, msg = msg[:16], msg[16:]
        prev_pt = iv
        prev_ct = iv
        pt = ''
        aes = AES.new(self.key, AES.MODE_CBC, iv)
        for block in self.split_by(msg, 16):
            pt_block = self.xor(block, prev_ct)
            pt_block = aes.decrypt(pt_block)
            pt_block = self.xor(pt_block, prev_pt)
            pt += pt_block
            # prev_pt = pt_block
            # prev_ct = block
        # pt, mac = pt[:-16], pt[-16:]
        # if mac != iv:
        #   print(1)
        # print pt.encode('hex')
        return (pt)
    def decrypt(self, ciphertext,iv):
        ciphertext = a2b_hex(ciphertext)
        # iv = ciphertext[0:AES.block_size]
        ciphertext = ciphertext[AES.block_size:len(ciphertext)]
        cryptor = AES.new(self.key, AES.MODE_CBC, iv)
        plaintext = cryptor.decrypt(ciphertext)
        return plaintext.rstrip(chr(0))


# 测试模块
if __name__ == '__main__':
    BS = AES.block_size # aes数据分组长度为128 bit
    # 524160f3d098ad937e252494f827f8cf26cc549e432ff4b11ccbe2d8bfa76e5c6606aad5ba17488f11189d41bca45baa
    key="asdfghjkl1234567890qwertyuiopzxc"
    demo = aesdemo(key)
    # e = demo.encrypt("flag{}")
    # print("加密:", e)
    e= '524160f3d098ad937e252494f827f8cf26cc549e432ff4b11ccbe2d8bfa76e5c6606aad5ba17488f11189d41bca45baa'
    a=demo.tsb_decrypt(e)
    print(a)
    exit()  

得到flag pcbctf{345f3_asss3_loasd_aswew}

Traffic Light

  • 这个题目有 1168 张图片

    提取出后将图片划分为012

import os
from PIL import Image
def main(gif_file):
    png_dir = gif_file[:-4] + '/'
    os.mkdir(png_dir)
    img = Image.open(gif_file)
    try:
        while True:
            current = img.tell()
            print(current)
            img.save(png_dir+str(current)+'.png')
            img.seek(current+1)
    except:
        pass
import time

# gif_file = 'Traffic_Light.gif'
# main(gif_file)

def getf(word):
    dict = {'.-': 'A', '-...': 'B', '-.-.': 'C', '-..': 'D', '.': 'E', '..-.': 'F', '--.': 'G', '....': 'H', '..': 'I',
            '.---': 'J', '-.-': 'K', '.-..': 'L', '--': 'M', '-.': 'N', '---': 'O', '.--.': 'P', '--.-': 'Q',
            '.-.': 'R', '...': 'S', '-': 'T', '..-': 'U', '...-': 'V', '.--': 'W', '-..-': 'X', '-.--': 'Y',
            '--..': 'Z', '.----': '1', '..---': '2', '...--': '3', '....-': '4', '.....': '5', '-....': '6',
            '--...': '7', '---..': '8', '----.': '9', '-----': '0', '..--..': '?', '-..-.': '/', '-.--.-': '()',
            '-....-': '-', '.-.-.-': '.'}
    word=word.split(' ')
    for i in word:
        try:
            print(dict[i],end='')
        except:
            a =1
    print('')
if __name__ == '__main__':
    gif_file = 'Traffic_Light.gif'
    main(gif_file)

    imgs = './Traffic_Light/{png}.png'
    word = ''
    k=0
    for i in range(0,1168,2):
        # print(imgs.format(png=str(i)))
        img = Image.open(imgs.format(png=str(i)))
        # img = img.convert('RGBA')
        data = (img.getpixel((100, 50)))# 100     50  1 00  150
        if data != 14 and data != 69:
            k=k+1
            word+='0'
            print('.',end='')
            continue
        # print('data', data)
        data = (img.getpixel((100, 100)))# 100     50  1 00  150
        # print(data)
        if data != 14 and data != 69:
            k = k + 1
            word += '1'
            print('-',end='')
            continue
        # print('data', data)
        data = (img.getpixel((100, 150)))# 100     50  1 00  150
        if data != 14 and data != 69:
            k = k + 1
            word += '2'
            print('/',end='')
            continue
        # word += '/'
        # print('/', end='')
        # print('data',data)
        # img.show()
        # time.sleep(1)
        # img.close()
        # cropImg = img.crop((0,0,100,50))
        # cropImg.show()
        # exit()
    print()
    print(k)

    # exit()
    print()
    print(word)
    word1=word.replace('1','.')
    word1=word1.replace('0','-')
    word1=word1.replace('2','/')
    print(word1)
    getf(word1)

    word1=word.replace('1','-')
    word1=word1.replace('0','.')
    word1=word1.replace('2','/')
    print(word1)
    getf(word1)

    word1=word.replace('1','-')
    word1=word1.replace('0','/')
    word1=word1.replace('2','.')
    print(word1)
    getf(word1)

    word1=word.replace('1','.')
    word1=word1.replace('0','/')
    word1=word1.replace('2','-')
    print(word1)
    getf(word1)

    word1=word.replace('1','/')
    word1=word1.replace('0','.')
    word1=word1.replace('2','-')
    print(word1)
    getf(word1)

    word1=word.replace('1','/')
    word1=word1.replace('0','-')
    word1=word1.replace('2','.')
    print(word1)
    getf(word1)

.--..--./.--.--../.--....-/.--..---/.----.--/.-.-..../.--.--../..--..--/..--.-../.---..--/..--..--/.-.-----/.---..../..--.-../.----..-/.-.-----/..--.-../.---.-../.---.-../..--..--/.--.---./.---.-../..--...-/..--..../.--.---./.-.-----/.---.-../..--..../.-.-----/.---.-../.---..-./..--.-../.--..--./.--..--./..--...-/.--...--/.-.-----/.---..--/..--.-../.--..--./..--..--/.---.-../.----..-/.-.-----/.---.---/.--.-.../..--..--/.--.---./.-.-----/.----..-/..--..../.---.-.-/.-.-----/..--.-../.---..-./..--..--/.-.-----/..--..../.---.-.-/.---.-../.---..--/..--...-/.--..-../..--..--/.-----.-

%u66%u6c%u61%u67%u7b%u50%u6c%u33%u34%u73%u33%u5f%u70%u34%u79%u5f%u34%u74%u74%u33%u6e%u74%u31%u30%u6e%u5f%u74%u30%u5f%u74%u72%u34%u66%u66%u31%u63%u5f%u73%u34%u66%u33%u74%u79%u5f%u77%u68%u33%u6e%u5f%u79%u30%u75%u5f%u34%u72%u33%u5f%u30%u75%u74%u73%u31%u64%u33%u7d

进行unicode 解码

image-20181201225128863.png

flag{Pl34s3_p4y_4tt3nt10n_t0_tr4ff1c_s4f3ty_wh3n_y0u_4r3_0uts1d3}

### WEB three-body1

  • 这道题非预期解:

  • 直接dirsearch扫目录 扫到了.bash_history .bash_logout 等等在home目录下的文件

  • .bash_history 里面有flag的操作记录,于是直接下载flag.txt 直接读取到(顺手将flag.txt加入字典中)

  • flag{Three_b0dy_1s_AMAZ1NG}
    

Quotes

Maya Angelou的名言
My+mission+in+life+is+not+mer ely+to+survive+but to+thrive+and+to+do+so+w ith+s  ome+pass i on+some+compass ion+so me+humor+and+some+style

多次测试后发现 将+号去除,以空格分割字符串,每组字符串长度对应a-z

X = []
Y = {}
for i in range(27):
    X.append(i + 1)
    # Y.append(chr(97 + i))
    Y[i]=chr(96 +i)
print(X)
print(Y)

word='My+mission+in+life+is+not+mer ely+to+survive+but to+thrive+and+to+do+so+w ith+s  ome+pass i on+some+compass ion+so me+humor+and+some+style'
nu = 0
word =word.replace('+','')
word =word.split(' ')
print(word)
for i in word:
    # print(len(i))
    print(Y[len(i)],end='')
#word`games

Flag 为flag{word games}

还有部分等到线下打完再补上2333

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • 2018/3/16 17:34:51 WEB题 1.签到题 题目:key在哪里? writeup:查看源代码即可获...
    Sec小玖阅读 22,381评论 1 11
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,735评论 0 10
  • 抽空整理了一下CGCTF平台的Web题的writeup。 0x01 签到题(题目地址:http://chinal...
    ch3ckr阅读 12,986评论 0 6
  • 婺城区退教协 乒乓赛 小小银球桌上飞, 他推你扣比分追。 虽说健将皆白发, 风彩犹存不减威。
    草木知秋日阅读 122评论 0 2