别再死记硬背!CTF常用Linux命令的“叛逆”解读
命令 | 传统解释(听着就头大) | CTF老鸟的“人话”版本 |
---|---|---|
ls | 显示目标列表 | “看看这里有啥”,就像你逛街一样,只不过是命令行版的。 |
cd [path] | 切换工作目录 | “走你!去XX目录”,相当于游戏里的传送技能。 |
pwd | 显示当前工作目录的绝对路径 | “我现在在哪儿?”,迷路的时候用的,免得你瞎转。 |
man [command] | 查看命令帮助 | “这玩意儿咋用?”,官方说明书,虽然枯燥但关键时刻救命。 |
apropos [whatever] | 查找关键字相关命令 | “我想找个XX命令,但不知道叫啥”,当你只记得功能,不记得名字的时候。 |
echo [string] | 打印文本 | “说句话!”,把你想显示的内容打印出来,调试脚本常用。 -e 参数?那是让你玩转义字符的,比如换行啥的。 |
cat [file] | 连接并打印文件内容 | “把这文件给我看看!”,简单粗暴地显示文件内容,小文件专用。 |
less [file] | 浏览文件内容 | “慢慢看,别着急”,适合大文件,可以上下翻页,搜索。 |
mv [file1] [file2] | 移动或重命名文件 | “改名换姓,乾坤大挪移!”,文件搬家或改名。 |
cp [file1] [file2] | 复制文件 | “克隆一个!”,复制文件,相当于Ctrl+C, Ctrl+V。 |
rm [file] | 删除文件 | “抹杀!”,删除文件,小心误删,没有后悔药。 |
ps | 查看进程状态 | “谁在偷偷运行?”,查看当前运行的进程,揪出幕后黑手。 |
top | 实时查看系统运行情况 | “系统体检报告!”,动态监控系统资源使用情况,CPU、内存一览无余。 |
kill | 杀死进程 | “斩立决!”,结束指定进程,PID就是它的身份证号。 |
ifconfig | 查看/设置网络设备 | “我是不是连上网了?”,查看网络接口信息,IP地址、网卡状态。 |
ping | 测试主机连通性 | “喂?有人吗?”,测试网络连通性,看看目标主机是否活着。 |
netstat | 显示网络连接信息 | “谁在跟我通信?”,查看网络连接、路由表,分析网络流量。 |
nc (netcat) | 建立TCP/UDP连接或监听端口 | “瑞士军刀!”,网络工具,可以连接、监听、传输数据,CTF神器。 |
su | 切换用户身份 | “变身!”,切换到其他用户,需要密码。 |
touch [file] | 创建空文件 | “无中生有!”,创建一个空文件,占坑用。 |
mkdir [dir] | 创建目录 | “圈地运动!”,创建一个目录,存放文件。 |
chmod | 变更文件权限 | “给它穿什么衣服?”,修改文件权限,决定谁能读、写、执行。 |
chown | 变更文件所有者 | “这文件是谁的?”,修改文件所有者,权力转移。 |
nano / vim / emacs | 文本编辑器 | “写字板!”,在命令行编辑文本文件,各有千秋,选你所爱。 |
exit | 退出shell | “拜拜!”,退出当前shell会话。 |
管道符 | | 连接命令 | “流水线!”,将一个命令的输出作为另一个命令的输入,数据处理利器。 |
变量:Linux的“小纸条”和“暗号”
语法 | 解释 | CTF实战理解 |
---|---|---|
var=value | 给变量赋值 | “写个小纸条”,把value贴在var上,方便后面用。 |
$var, ${var} | 取变量的值 | “拿出小纸条”,看看var上写着啥。 ${var} 更严谨,防止歧义。 |
cmd , $(cmd) | 命令替换 | “执行暗号!”,先执行cmd命令,然后把结果当成字符串用。 |
'string' | 非替换字符串 | “原封不动!”,字符串里的内容就是它本身,别想搞事情。 |
"string" | 可替换字符串 | “灵活应变!”,字符串里的变量会被替换成实际的值。 |
$ var="test"; # 定义一个变量var,赋值为"test"
$ echo $var # 输出变量var的值,结果是"test"
Bash快捷键:手残党的福音,效率党的利器
快捷键 | 功能 | CTF场景应用 |
---|---|---|
Up/Down | 上/下 一条指令 | “时间机器!”,快速浏览历史命令,避免重复输入。 |
Ctrl + c | 终止当前进程 | “紧急停止!”,当程序卡死或跑飞时,强制结束。 |
Ctrl + z | 挂起当前进程 | “暂停一下!”,把进程放到后台,可以先干点别的。用fg 命令唤醒。 |
Ctrl + d | 删除光标处字符 | “擦擦擦!”,删除光标所在位置的字符。 |
Ctrl + l | 清屏 | “眼不见心不烦!”,清理屏幕,保持界面整洁。 |
Ctrl + a | 移动到行首 | “一键回到开头!”,快速移动光标到行首。 |
Ctrl + e | 移动到行尾 | “一键到达结尾!”,快速移动光标到行尾。 |
Ctrl + b | 按单词后移(向左) | “小步快跑!”,按单词移动光标,比方向键更高效。 |
Ctrl + f | 按单词前移(向右) | “小步快跑!”,按单词移动光标,比方向键更高效。 |
Linux根目录:探秘操作系统的“骨架”
先别急着uname -a
,看看你的发行版是啥,根目录可能略有不同。
- /bin, /sbin: “核心工具箱”,放着最基础的命令,比如
ls
,cp
。 链接到/usr/bin
? 别慌,知道它们是干啥的就行。 - /boot: “启动舱”,引导操作系统启动的文件,动了这里系统就崩了。
- /dev: “设备中心”,所有硬件设备的入口,但不是驱动程序! 只是个“传送门”。
- /etc: “配置文件大本营”,系统和软件的各种配置,改坏了可能导致系统出问题。
- /etc/rc.d: “启动脚本集”,系统启动/关闭时执行的脚本,别乱改。
- /home: “用户地盘”,普通用户的个人目录,存放用户文件。
- /lib, /lib64: “共享仓库”,系统和软件依赖的动态链接库,链接到
/usr/lib
? 见怪不怪。 - /mnt: “临时挂载点”,临时挂载其他文件系统,比如U盘。
- /proc: “内存实时监控”,虚拟目录,反映系统内存状态,直接访问可以获取系统信息。
- /root: “管理员老巢”,root用户的个人目录,权限最高。
- /srv: “服务数据站”,存放服务启动后需要提取的数据。
- /sys: “内核设备树”,反映内核设备信息的文件系统。
- /tmp: “公共厕所”,存放临时文件,重启后可能被清空。
- /usr: “应用软件集”,大部分应用程序和文件都在这里。
- /usr/src: “内核源代码库”,内核源代码存放地,编译内核需要用到。
- /var: “日志记录仪”,存放各种服务的日志信息,排错利器。
进程管理:掌控程序的“生死大权”
- top: “实时战况直播”,动态查看系统整体运行情况,CPU、内存、进程信息一目了然。
- ps: “进程快照”,报告当前系统的进程状态,搭配
kill
指令,随时可以“处决”不必要的程序。ps -aux | grep [file]
? 查找特定进程的利器! - kill: “进程终结者”,删除执行中的程序或工作。
kill [PID]
? 一刀毙命!
UID和GID:Linux世界的“身份认证”
Linux是多用户系统,每个用户都有UID和GID,就像身份证号一样。
- UID: 用户唯一标识。
- GID: 用户组标识,一个用户可以属于多个组。
id root
? 查看root用户的UID和GID,root权限至高无上,UID为0。 普通用户? UID一般从1000开始。
/etc/group
? 存储GID信息。 /etc/passwd
? 存储用户信息(除了密码)。 /etc/shadow
? 存储加密后的用户密码,只有root权限才能访问!
sudo
? 普通用户也能以root身份执行命令,但要小心使用。 su
? 切换用户,需要输入目标用户密码。
whoami
? “我是谁?”,显示当前有效用户名。 $
? 普通用户提示符。 #
? root用户提示符。
权限设置:给文件穿上“防护服”
Linux的文件权限控制基于读(r)、写(w)、执行(x)三种权限。
ls -l [file]
? 查看文件或目录的详细信息,第一栏就是权限字符串。
r
: 读取权限,数字代号为4。w
: 写入权限,数字代号为2。x
: 执行权限,数字代号为1。
权限字符串分为三组:所有者权限、组权限、其他人权限,顺序为rwx。
chmod
? 修改文件权限,可以针对所有者(u)、所属组(g)、其他人(o)、所有人(a)进行设置。
chmod a+r [file]
: 赋予所有用户读取权限。chmod u-w [file]
: 取消所有者写入权限。chmod g=x [file]
: 指定组权限为可执行。chmod o=rwx [file]
: 指定其他人权限为可读、可写和可执行。
-R
? 递归处理,修改目录及其子目录下的所有文件权限。
字节序:理解数据的“排列方式”
计算机存储数据有两种方式:大端(Big-endian)和小端(Little-endian)。
- 大端: MSB (最高有效字节) 放在低地址。
- 小端: LSB (最低有效字节) 放在低地址。
Intel处理器用小端,PowerPC用大端,TCP/IP协议和Java虚拟机用大端。
举个例子:0x12345678 存在内存里会是啥样? 看你的机器是啥字节序了!
gdb-peda$ x/w 0xffffd584
? 用GDB查看内存,一目了然!
输入输出:数据的“高速公路”
命令的输出可以作为另一个命令的输入参数,就像流水线一样。
文件描述符:Linux的“文件索引”
Linux里一切皆文件,文件描述符是内核用来管理打开文件的索引,是一个非负整数。
- 0: 标准输入 (stdin)
- 1: 标准输出 (stdout)
- 2: 标准错误输出 (stderr)
fork()
? 创建子进程会继承父进程打开的文件表,可能导致安全问题! vfork()
? 子进程拥有自己的进程表项,更安全。
核心转储(Core Dump):程序崩溃后的“遗书”
程序异常终止时,操作系统会把当时的内存、寄存器状态等信息记录下来,保存在一个文件里,这就是Core Dump。
什么情况下会产生Core Dump? 各种信号! 比如SIGSEGV (段错误),SIGABRT (中止信号)等等。
ulimit -c
? 查看是否开启Core Dump。 默认是关闭的! ulimit -c unlimited
? 开启Core Dump。
/etc/security/limits.conf
? 修改这个文件可以永久开启Core Dump。
/proc/sys/kernel/core_uses_pid
? 可以让Core Dump文件名带上PID。 /proc/sys/kernel/core_pattern
? 控制Core Dump文件的保存位置和文件名格式。
gdb [filename] [core file]
? 用GDB调试Core Dump文件,找到程序崩溃的原因。
调用约定:函数调用的“秘密协议”
函数调用约定规定了函数调用时如何传递参数。
-
内核接口:
- x86-32: 寄存器传递参数 (eax, ebx, ecx, edx, esi, ebp)。
- x86-64: 寄存器传递参数 (rdi, rsi, rdx, r10, r8, r9)。
-
用户接口:
- x86-32: 栈传递参数。
- x86-64: 寄存器传递参数 (rdi, rsi, rdx, rcx, r8, r9),超过6个参数用栈传递。
环境变量:程序的“运行环境”
环境变量是name=value形式的字符串,定义了程序的运行环境。
-
生命周期:
- 永久环境变量: 修改配置文件,永久生效。
- 临时环境变量: 使用
export
命令,当前终端生效,关闭终端失效。
-
作用域:
- 系统环境变量: 对所有用户生效。
- 用户环境变量: 对特定用户生效。
/etc/profile
? 修改这个文件可以设置系统环境变量。 ~/.bash_profile
? 修改这个文件可以设置用户环境变量。 export
? 定义临时环境变量。
echo $PATH
? 打印PATH环境变量。 env
? 打印所有环境变量。 set
? 打印所有本地定义的shell变量。 unset
? 清除环境变量。
LD_PRELOAD:动态链接库的“秘密武器”
LD_PRELOAD
可以定义程序运行前优先加载的动态链接库,PWN题里经常用到,可以指定特定的libc。
LD_PRELOAD=/path/to/libc.so ./binary
? 强制程序使用指定的libc。
注意:动态链接库需要使用ld.so进行重定位,版本不匹配可能会出错!
environ:泄露栈地址的“后门”
libc中定义的全局变量environ
指向环境变量表,环境变量表存在于栈上,所以通过environ
指针的值就可以泄露出栈地址!
gdb-peda$ vmmap libc
? 查看libc的内存映射。
procfs:窥探内核的“窗口”
procfs是Linux内核提供的虚拟文件系统,用于访问系统内核数据,不占用存储空间,只占用内存。
文件 | 作用 | CTF应用场景 |
---|---|---|
/proc/cmdline | 启动时传递给内核的参数 | 分析启动参数,寻找漏洞利用点。 |
/proc/cpuinfo | CPU信息 | 了解CPU架构,选择合适的Payload。 |
/proc/meminfo | 内存信息 | 查看内存使用情况,判断是否存在内存泄漏。 |
/proc/[pid]/cmdline | 启动进程的完整命令 | 了解进程启动方式,分析程序行为。 |
/proc/[pid]/exe | 指向可执行文件的符号链接 | 找到进程对应的可执行文件。 |
/proc/[pid]/maps | 进程的内存区域映射信息 | 查看内存布局,寻找可利用的内存地址。 |
/proc/[pid]/environ | 进程的环境变量 | 获取环境变量,判断是否存在漏洞。 |
/proc/[pid]/fd | 进程打开的文件情况 | 查看进程打开的文件,分析文件操作。 |
/proc/[pid]/status | 进程的状态信息 | 了解进程状态,判断是否存在异常。 |
总而言之,procfs是CTF选手分析程序行为、寻找漏洞的重要工具! 别死记硬背,多实践,才能真正掌握Linux的精髓!
```
黑客/网络安全学习包
资料目录
-
成长路线图&学习规划
-
配套视频教程
-
SRC&黑客文籍
-
护网行动资料
-
黑客必读书单
-
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**
**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
更多内容为防止和谐,可以扫描获取~
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************