zoukankan      html  css  js  c++  java
  • RCTF 2018线上赛 writeup

    苦逼的RCTF,只进行了两天,刚好第二天是5.20,出去xxx了,没法打比赛,难受。比赛结束了,还不准继续提交flag进行正确校验了,更难受。

    下面是本次ctf解题思路流程

    后面我解出的题会陆续更新上来

    MISC

    sign

    下载附件,发现打不开,以兼容性、管理员权限等还是打不开

    丢进winhex初步审视一下16进制没啥发现

    用binwalk扫描一下,发现一张png

    提取,但是提取不出来,转手动提取,得到图片

    本子,铅笔,红酒杯。

    通过红酒杯联想到linux wine,用wine打开,得到flag

    git

    打开下载的附件,里面有个helloword.txt。打开里面没啥发现。。

    进.git里面去看看,在COMMIT_EDITMSG处看到

    发现flag被删掉了,题目也说file lost了

    在ORIG_HEAD

    尝试pull,失败,再尝试一下revert呢,得到flag XD

    Number Game

    直接nc过去看题

    sha256加密,四位数还好可以碰撞,脚本跑起来:

    sha256enc = "087e72033b1eacecd78845563696b9a449015aeb29a12b0f49c969cafababbb2"
    key = "DPgOJtFiF9euj7HX"
    
    for i in strlist:
        code = i[0]+i[1]+i[2]+i[3]
        encinfo = hashlib.sha256(code+key).hexdigest()
        if encinfo == sha256enc:
            print code
            break

    可以得到code,输入

    来到正题

     

    随意尝试了输入,猜测Nope的规律,大概就是Nope x,y   x表示有x个数字猜对并且位置对了,y表示有y个数字猜对了,但是位置错的

    猜测机会只有6次!且每次输入值如果大于10秒左右就提示timeout了,所以人为分析是不可能了(除非你是脑王,能在10秒内见招拆招看到回馈想出下一步要猜的数的话当我在放屁)

    其实这个游戏很早就有了(文曲星猜数字了解一下)

    网上没有关于python的解题程式这是比较坑的,由于本人之前没有玩过猜数字游戏,迫于无奈只有先去查阅资料了解算法原理,最后自己苦逼码出了python解法

    经过8回合(其实实际应该大战了一百回合Orz)的大战,搞到了flag。。。。。

    下面是python猜数字解法(本算法是原创算法,不是最优算法,一次挑战可能不成功,多执行几次就可以了,大神勿喷。。。。

    #!/usr/bin/env python
    # coding=utf-8
    # author:401219180
    import time
    import socket
    import string
    import re
    import itertools
    import hashlib
    
    
    def returnmsg(data):
        """发送与接收,代替nc"""
        s.send(data)
        time.sleep(1.5)
        msg = s.recv(2048)
        return msg
    
    
    def createTree(inputstr, dictree):
        """对比集合列表得出a,b生成字典"""
        inputlist = inputstr.split(" ")
        newdictree = {}
        for x in dictree:
            a, b = 0, 0
            for i in range(4):
                if inputlist[i] == x[i]:
                    a += 1
                    continue
                if inputlist[i] in x:
                    b += 1
                    continue
            newdictree[x] = a, b
        return newdictree
    
    
    def createList(dic, result):
        """集合字典里面生成有效集合列表"""
        numlist = []
        for k, v in dic.iteritems():
            if v == result:
                numlist.append(k)
        return numlist
    
    
    def listvalueTostr(listindex):
        """生成要猜的值"""
        inputstr = listindex[0] + " " + listindex[1] + " " + listindex[2] + " " + listindex[3]
        return inputstr
    
    
    # 建立nc连接
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("149.28.139.172", 10002))
    time.sleep(1)
    firstinfo = s.recv(1024)
    r = r'+(.*?))'
    key = re.findall(r, firstinfo)[0]
    sha256enc = firstinfo[-78:-14]
    print key
    print sha256enc
    
    # sha256碰撞,得出xxxx的值
    code = ''
    strlist = itertools.product(string.letters + string.digits, repeat=4)
    
    for i in strlist:
        code = i[0] + i[1] + i[2] + i[3]
        encinfo = hashlib.sha256(code + key).hexdigest()
        if encinfo == sha256enc:
            print code
            break
    
    print returnmsg(code)
    
    r1 = r'Nope. (.*?)
    ' # 正则用于匹配Nope的值
    
    
    def startgame():
        # 初始化列表
        while 1:  # 打通关了才知道连续大战8回合,所以干脆写个无限循环
            numlist = []
            for i in itertools.permutations(string.digits, 4):
                numlist.append(i)
            input1 = "2 3 4 5"  # 根据本人多次测试,首轮猜2 3 4 5比猜1 2 3 4赢得几率大些Orz....
            while 1:
                dictree1 = createTree(input1, numlist)
                print "guess: " + input1
                recvdata = returnmsg(input1)
                print recvdata
                if "You got it!" in recvdata:
                    break
    
                ab = re.findall(r1, recvdata)[0]
                numlist = createList(dictree1, eval(ab))
                try:
                    input1 = listvalueTostr(numlist[0])
                except IndexError, msg:
                    print msg
    
            if "Flag" in recvdata:  # 如果返回的信息里面有Flag,终止while循环
                break
    
    
    startgame()

    520 gift

    下载附件解压得到一堆口红图片Orz

    看hint,首先要找齐所有口红色号。。。。。。。这道题主要是考验毅力和女朋友力。。。

    在大佬的帮助下,在微博找到了美妆博主

    经过一个一个的比对。。。。。。。。

    1、Russian red
    2、Chili
    3、Tenor Voice
    4、Fixed on drama
    5、red coquette
    6、barbecue
    7、dangerous
    8、lady danger
    9、my inner femme
    10、lady bug
    11、opera
    12、mac red
    13、brave red
    14、Ruby Woo
    15、sparks of romance
    16、lingering kiss
    17、just a bite

    首字母即是flag..

    未待完续

    To be continued...

    后面会陆续更新

  • 相关阅读:
    解决百度网盘倍速需要会员问题
    npm run dev其实就是vue-cli-service serve
    git常见操作和git原理
    ajax promise三种状态
    ajax get请求
    vue2.0x methods中一个函数调用另外一个函数
    Web前端开发规范之文件存储位置规范
    大数据应用期末总评
    分布式文件系统HDFS 练习
    安装Hadoop
  • 原文地址:https://www.cnblogs.com/semishigure/p/9066453.html
Copyright © 2011-2022 走看看