OverTheWire - Drifter

drifter

drifter.labs.overthewire.org 2230

level 0 → level 1

1
2
3
4
5
SSH Information
Host: drifter.labs.overthewire.org
Port: 2230
User: drifter0
Binaries: /drifter/

Drifter: a wargame along the lines of Vortex — remote service exploitation and binary analysis.

Level 0 是 remote encrypted syscall proxy,服务监听 1111。官方说明给出的关键点是:客户端发送的整数会被 RC4 加密,服务端解密后当作 syscall 参数执行。目标是通过一串 syscall 读取远端文件。

公开路线是先用同一套协议读取 instructions,再读取目标 password 文件。syscall 序列大致为:

  1. mmap2 分配一块可读写内存。
  2. read 从 socket 把文件名写入 mmap buffer。
  3. open 打开该文件。
  4. read 把文件内容读入 buffer。
  5. write 把 buffer 内容写回 socket。

客户端结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import socket, struct
from Crypto.Cipher import ARC4

def p32(x):
return struct.pack('<I', x & 0xffffffff)

def send_ints(sock, cipher, *values):
data = b''.join(p32(x) for x in values)
sock.sendall(cipher.encrypt(data))

s = socket.create_connection(('drifter.labs.overthewire.org', 1111))
key = derive_key_from_connection_info(...) # 以官方源码/说明为准
cipher = ARC4.new(key)

# 1) mmap2
# 2) read filename into mmap buffer
# 3) open(filename)
# 4) read(fd, buffer, size)
# 5) write(socket_fd, buffer, size)

写稿时要补两类 live evidence:

  • 协议层:读取 instructions 成功,证明 RC4 key 和 syscall 编排正确。
  • 目标层:读取 password 文件成功,但正文不要贴密码明文,用 spoiler 或 <drifter1-password> 占位。

level 1+

后续旧资料摘要:

  • level 1:simple reverse engineering / analysis。
  • level 2:stack overflow,但 execve() 触发 breakpoint,需要替代 shell strategy。
  • level 3:remote heap corruption,古老 malloc,可参考 “Once upon a free()”。
  • level 4:binary analysis。
  • level 5:logic/math games,逆向 game 3。
  • level 6:remote daemon format string。

当前发布状态:level 0 route mapped, live verification blocked。这篇目前只能作为 Drifter 重开记录;真正完整 writeup 要先确认 drifter0 初始入口、RC4 key 派生和 syscall 序列。