
推荐 youtube
这个简单介绍让我入门了 Ethernet packet
解题报告之Network Configuration
题目描述
Configure your network interface. The remote host at 10.0.0.2 is trying to communicate with the remote host at 10.0.0.3 on port 31337.
一开始看到这道题,我还有点迷惑,为什么还会有10.0.0.3的?因为,我尝试ping,发现ping不通.后来我看了下代码,发现了思路.
说到这里要吐槽一下,因为之前的题目都是简单的可以从题目描述中可以看出思路,一些还会有hint. 因为是直接简单粗暴的,所以直接操作敲命令就行.
但是,在这道题目,我一开始没有思考/challenge/run的代码细节,就是简单认为它知识一个简单的网络环境配置脚本罢了.
结果,我是捣鼓了很久才知晓我应该看看这个实现细节都是怎么样的,可能hint藏在这里
代码分析
#!/usr/bin/exec-suid --real -- /usr/local/bin/python -I
import os
import socket
import time
import psutil
from dojjail import Host, Network
flag = open("/flag").read()
parent_process = psutil.Process(os.getppid())
class ClientHost(Host):
def entrypoint(self):
while True:
time.sleep(1)
try:
client_socket = socket.socket()
client_socket.connect(("10.0.0.3", 31337))
client_socket.sendall(flag.encode())
client_socket.close()
except (OSError, ConnectionError, TimeoutError):
continue
user_host = Host("ip-10-0-0-1", privileged_uid=parent_process.uids().effective)
client_host = ClientHost("ip-10-0-0-2")
network = Network(hosts={user_host: "10.0.0.1", client_host: "10.0.0.2"}, subnet="10.0.0.0/24")
network.run()
user_host.interactive(environ=parent_process.environ())
- Flag在哪里?
Flag已经被读入内存中。
- 谁持有Flag?
ClientHost 这个类持有Flag,并且会不断尝试发送它。
- 发送给谁?
ClientHost(IP是 10.0.0.2)正在疯狂尝试连接 IP 10.0.0.3 的 31337 端口,把 Flag 发过去。
- 我是谁?
我是 user_host,初始 IP 是 10.0.0.1。
- bug点
网络中只有 10.0.0.1和 10.0.0.2。根本不存在 10.0.0.3 这个主机!
开始解题
既然 10.0.0.2 想要把 Flag 发给 10.0.0.3,但 10.0.0.3 不存在,而我们又在同一个局域网内(10.0.0.0/24),我们可以把自己伪装成 10.0.0.3。
只要我们的网卡上有了 10.0.0.3 这个 IP,对方就会连接我们,把 Flag 发给我们。
查看网卡信息
首先,我们需要知道我们的网卡名称是什么。 输入:
3: eth0@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 06:3b:f0:75:6b:93 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.0.0.1/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::43b:f0ff:fe75:6b93/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
可以看到 eth0 或者类似的名字,且它目前的 IP 是 10.0.0.1。
添加目标 IP 地址 (伪装身份)
给这个网卡追加一个 IP 地址 10.0.0.3。这样,当10.0.0.2寻找 10.0.0.3 时,就会发送给我。
解释:就是添加一个别名
监听端口 (接收 Flag)
现在我们已经是 10.0.0.3 了,我们需要打开 31337 端口来接收数据。我们将使用 nc (netcat) 来监听。
输入: