首页
论坛
课程
招聘
[原创]*CTF Simple File System
2022-4-21 20:45 2867

[原创]*CTF Simple File System

2022-4-21 20:45
2867

Simple File System

思路

题目给了四个文件,flag,simplefs,image.flag,instruction.txt

 

打开介绍文件看一下,里面的内容如下

1
2
3
4
5
6
7
8
9
10
11
12
# instructions
 
I implemented a very simple file system and buried my flag in it.
 
The image file are initiated as follows:
./simplefs image.flag 500
 simplefs> format
 simplefs> mount
 simplefs> plantflag
 simplefs> exit
 
And you cold run "help" to explore other commands.

从这里面和题目的描述就可以看出这是简单的文件系统,通过挂载然后执行命令。

 

先执行一遍看看,结果发现plantflag后将flag加密输入到flag文件中,IDA找找加密的地方

 

在21b2处发现了单字节的加密

 

下面就是依次异或上v4的从小到大BYTE0,BYTE1,BYTE2,HIBYTE,就是相当于每次取v4的两位

 

现在就需要知道v4的值,这里没有办法直接知道,那就动态调试,在for这里下一个断点

 

这里动态调试遇到一个坑,忘记设置参数,导致每次打开就自动关掉

输入命令
format
mount
plantflag

 

运行到这里我们就可以看到ax这是等于0xDEEDBEEF

 

因为*CTF{这个开头肯定是不会变得,所以我们利用这个去找对应的加密段

1
2
3
4
5
6
7
8
9
10
11
12
13
a='*CTF{'
for i in a:
    x=ord(i)
    x = (x >> 1) | (x << 7)&0xff
    x ^= 0xef
    x = (x >> 2) | (x << 6)&0xff
    x ^= 0xbe
    x = (x >> 3) | (32 * x)&0xff
    x ^= 0xed
    x = (x >> 4) | (16 * x)&0xff
    x ^= 0xde
    x = (x >> 5) | (8 * x)&0xff
    print(hex(x))

解出来是0x0,0xd2,0xfc,0xd8,0xa2 我们就可以去image.flag里面去找

EXP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
flag=''
a=[0x00, 0xD2, 0xFC, 0xD8, 0xA2, 0xDA, 0xBA, 0x9E, 0x9C, 0x26, 0xF8, 0xF6, 0xB4, 0xCE,
0x3C, 0xCC,0x96, 0x88, 0x98, 0x34, 0x82, 0xDE, 0x80, 0x36, 0x8A, 0xD8, 0xC0, 0xF0, 0x38, 0xAE,
0x40]
for j in range(32):
    for i in range(32,128):
        x = i
        x = (x >> 1) | (x << 7)&0xff
        x ^= 0xef
        x = (x >> 2) | (x << 6)&0xff
        x ^= 0xbe
        x = (x >> 3) | (32 * x)&0xff
        x ^= 0xed
        x = (x >> 4) | (16 * x)&0xff
        x ^= 0xde
        x = (x >> 5) | (8 * x)&0xff
        if(x==a[j]):
            flag+=chr(i)
print(flag)
#*CTF{Gwed9VQpM4Lanf0kEj1oFJR6}

[2022夏季班]《安卓高级研修班(网课)》月薪三万班招生中~

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回