CTF竞赛权威指南Pwn篇-Linux安全机制
Linux基础
Linux常用命令
ls
cd
pwd
uname
whoami
man
find
echo
cat
less
head/tail
grep
cut
diff # 比较文本差异
mv
cp
rm
ps
top
kill
ifconfig
ping
netstat
nc
su
touch
mkdir
chmod
chown
vim
history
exit
使用变量:
var=value # 给变量var赋值为value
$var,${var} # 取变量的值
`cmd`,$(cmd) # 命令替换标准输出
'string' # 非替换字符串
"string" # 可替换字符串
示例:
$ var="test"
$ echo $var
test
$ echo 'This is a $var'
This is a $var
$ echo "This is a $var"
This is a test
$ echo `date`
Sat Apr 27 23:53:27 PDT 2024
$ $(whoami)
$ $(bash)
$ echo $0
bash
$ $($0) # 进入bash终端
需要了解:
- 数据流、管道和重定向
- Linux目录结构
- 用户和组以及文件权限
- 环境变量
export
、env
、/etc/profile
、/etc/environment
、~/.bashrc
- 可执行文件依赖库: Linux中使用
ldd /bin/true
查看/bin/true的依赖库文件
procfs文件系统
procfs文件系统是Linux内核提供的虚拟文件系统,为访问内核数据提供的接口。之所以说是虚拟文件系统,是因为它只占用内存而不占用存储。
用户可以通过procfs查看有关系统硬件及当前正在运行的进程的信息,甚至可以通过修改其中的某些内容来改变内核的运行状态。
比较总要的文件
cmdline # 启动进程的命令行
exe # 最初的可执行文件
root # 进程的根目录
maps # 通常我们无法直接读取mem内存空间的内容,可以通过maps来查看一些内存映射信息
stack # 内核调用栈,需要再编译是启动CONFIG_STACKTRACE选项才会显示
auxv # 传递给进程的解释器信息,需要使用`xxd -e -g8`查看
environ # 进程的环境变量
fd # 进程打开的文件
fdinfo # 进程打开的文件信息
status # 进程的基本信息
cwd # 当前工作目录
syscall # 正在执行的系统调用
task # 进程包含的所有线程
字节序
计算机中采用了两种字节存储机制:大端(Big-endian)和小端(Little-endian)。
大端就是存储的时候放在低地址,小端就是存储时放在高地址,举个例子,将十六进制整数0x12345678
存入以1000H
开始的内存,大端和小端的存储形式部分如下:
地址 | 大端存储 | 小端存储 |
---|---|---|
1000H | 12H | 78H |
1001H | 34H | 56H |
1002H | 56H | 34H |
1003H | 78H | 12H |