10.0.0.55_12-16训练赛部分writeup

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.0.0.55_12-16训练赛部分writeup相关的知识,希望对你有一定的参考价值。

0x1 - MISC

  MISC100

  一张帅行的照片

      技术分享图片

  目测是图片隐写,但是binwalk并没有出来,应该是对文件头进行了修改

  010editor查看一下,发现在jpg文件尾之后还有大量的数据

  技术分享图片

  而且在灰色部分发现了IHDR,是png文件的一个标志,所以应该是文件连缀之后删去了png的文件头、尾

  所以可以进行修复,在灰色部分前后分别加上png的文件头尾,并删去前面帅行的数据

  保存之后发现图片是纯白的,而且在linux下无法打开

  ->有可能是文件长宽被修改之后crc校验不匹配导致的

  详情见M4X司机http://www.cnblogs.com/WangAoBo/p/7108278.html

  提供两种方法

  ①利用crc进行宽和高的爆破,得到正确的尺寸,修改得到完整图片

  技术分享图片

  flag就是帅行的女朋友标准

  ②直接删去部分数据

  这个操作不是很稳,但是比写脚本爆破要快一点

  技术分享图片

  可以看到在图片中存在大量的单调规则的数据,不会是有价值的信息

  所以可以直接把这部分删掉,把下面被隐藏的部分暴露出来

  技术分享图片

  效果也还不错

 

 

  MISC200

  一个多重压缩包,tar.gz方式压缩的

  经过简单查看,每两层一个数字作为名字,先解压gz,之后是tar包

  exp:

#!/usr/bin/env python

import gzip
import os
import tarfile

def un_gz(name):
    g_file = gzip.GzipFile(name)
    new_name = name+"tar"
    open(new_name,"w+").write(g_file.read())
    g_file.close()
    # un_gz(new_name)
    tar = tarfile.open(new_name)
    name = tar.getnames()[0]
    tar.extract(name)
    tar.close()
    un_gz(name)

un_gz("800")

  get flag:技术分享图片

 

 

0x2 - Reverse

  Reverse100

    技术分享图片

  这就是关键函数了

  技术分享图片

  把a1的每一位和0x804A040的每一位进行比对

  比较简单的逻辑,把运算的优先级看好,按照逻辑写出反向计算脚本

  exp:

s=[0x8F,0xAA,0x85,0xA0,0x48,0xAC,0x40,0x95,0xB6,0x16,0xBE,0x40,0xB4,0x16,0x97,0xB1,0xBE,0xBC,0x16,0xB1,0xBC,0x16,0x9D,0x95,0xBC,0x41,0x16,0x36,0x42,0x95,0x95,0x16,0x40,0xB1,0xBE,0xB2,0x16,0x36,0x42,0x3D,0x3D,0x49]
a=./re100
ls=‘‘
for i in range(42):
    t=(((s[i] & 0xAA) >> 1) | (2*(s[i]&0x55)))-9
    ls += chr(t&0xffff)
print(ls)

  需要注意的是,减号的优先级还挺高的,漏掉原来的一个括号,就得不到正确的结果了

  技术分享图片

 

  Reverse200

  技术分享图片

  一个64位程序,check被破坏了,不能用ida使用F5,下面给出三个方法

  ①使用gdb调试

  技术分享图片

  在gdb中,找到strcmp函数,查看参数就能直接看到flag(M4x的图,别问我,我还没get技能,会玩了可能来补一下)

  ②修复程序,使其可以使用F5查看伪代码

  技术分享图片

  左箭头指向处ALT+ k,把右箭头指向处改为0即可

  技术分享图片

  下面应该就比较好弄了

  ③利用程序漏洞爆破

  也就我这么皮,上面删图片数据,下面用漏洞爆破了

  在题目更新之前,存在一个逻辑错误

  技术分享图片

  在试运行时发现输入“flag”,也能得到输入正确的反馈

  所以很容易想到如果输入预期字符串的前n的字符,那么会得到正确回馈

  所以可以根据这个特性进行逐位爆破:

    在已知flag后加入一个可打印字符,如果回馈正确,就把这个字符加入flag中

    到最后能得到完整的flag

    exp:

#!/usr/bin/env python

from pwn import *
import string

# context.log_level=‘debug‘
payload = flag{
feedback = ‘‘
sou = string.printable
# print sou
while(1):
    for i in sou:
        pay=payload+i
        io=process("./re200")
        elf = ELF("./re200")
        io.sendline(pay)
        feedback = io.recvline()
        if(feedback[19]==l):
            payload = pay
            print pay
            break
        io.close()
    if(pay[-1]==}):
        break

  技术分享图片

  也就几十秒就出来了,看来官方解答还是用gdb嘛

 

 

0x3 - PWN

  pwn100

  等服务器网线插上在写吧

  pwn200

  

  pwn400

  

 

  

  

 

 

 

 

  

 

 

 

  

 

  

  

  

 

  

  

 

  

以上是关于10.0.0.55_12-16训练赛部分writeup的主要内容,如果未能解决你的问题,请参考以下文章

2017后期 第 1 场训练赛

DASCTF 7月赛部分write up

2021“安恒·泰山杯”山东省网络安全大赛测试赛部分题目write up

UPC-2021个人训练赛第20场-部分题解

16年区域赛训练计划

CCSU团队训练赛