diff --git a/README.md b/README.md index dc3e309..982c92a 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ - [4.6 zio](doc/4.6_zio.md) - [4.7 通用 gadget](doc/4.7_common_gadget.md) - [4.8 使用 DynELF 泄露函数地址](doc/4.8_dynelf.md) + - [4.9 给 ELF 文件打 patch](doc/4.9_patch_elf.md) - [五、高级篇](doc/5_advanced.md) - [5.1 Fuzz 测试](doc/5.1_fuzz.md) diff --git a/SUMMARY.md b/SUMMARY.md index ce4eca6..5362c70 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,5 +1,8 @@ # Summary +GitHub 地址:https://github.com/firmianay/CTF-All-In-One + + * [简介](README.md) * [一、基础知识篇](doc/1_basic.md) * [1.1 CTF 简介](doc/1.1_ctf.md) @@ -54,6 +57,7 @@ * [4.6 zio](doc/4.6_zio.md) * [4.7 通用 gadget](doc/4.7_common_gadget.md) * [4.8 使用 DynELF 泄露函数地址](doc/4.8_dynelf.md) + * [4.9 给 ELF 文件打 patch](doc/4.9_patch_elf.md) * [五、高级篇](doc/5_advanced.md) * [5.1 Fuzz 测试](doc/5.1_fuzz.md) * [5.2 Pin 动态二进制插桩](doc/5.2_pin.md) diff --git a/doc/1.3_linux_basic.md b/doc/1.3_linux_basic.md index aeade5c..1de6fd3 100644 --- a/doc/1.3_linux_basic.md +++ b/doc/1.3_linux_basic.md @@ -43,6 +43,12 @@ top 实时查看系统的整体运行情况 kill 杀死一个进程 +ifconfig 查看或设置网络设备 + +ping 查看网络上的主机是否工作 + +netstat 显示网络连接、路由表和网络接口信息 + nc(netcat) 建立 TCP 和 UDP 连接并监听 su 切换当前用户身份到其他用户身份 @@ -151,16 +157,21 @@ drwxr-xr-x 12 root root 4096 Jun 28 20:17 var ``` 由于不同的发行版会有略微的不同,我们这里使用的是基于 Arch 的发行版 Manjaro,以上就是根目录下的内容,我们介绍几个重要的目录: - `/bin`、`/sbin`:链接到 `/usr/bin`,存放 Linux 一些核心的二进制文件,其包含的命令可在 shell 上运行。 -- `/boot`:启动 Linux 的核心文件。 -- `/dev`:设备文件。 -- `/etc`:存放各种配置文件。 +- `/boot`:操作系统启动时要用到的程序。 +- `/dev`:包含了所有 Linux 系统中使用的外部设备。需要注意的是这里并不是存放外部设备的驱动程序,而是一个访问这些设备的端口。 +- `/etc`:存放系统管理时要用到的各种配置文件和子目录。 +- `/etc/rc.d`:存放 Linux 启动和关闭时要用到的脚本。 - `/home`:普通用户的主目录。 -- `/lib`、`/lib64`:链接到 `/usr/lib`,存放系统及软件需要的动态链接库。 +- `/lib`、`/lib64`:链接到 `/usr/lib`,存放系统及软件需要的动态链接共享库。 - `/mnt`:这个目录让用户可以临时挂载其他的文件系统。 - `/proc`:虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。 - `/root`:系统管理员的主目录。 -- `tmp`:公用的临时文件存放目录。 -- `usr`:应用程序和文件几乎都在这个目录下。 +- `/srv`:存放一些服务启动之后需要提取的数据。 +- `/sys`:该目录下安装了一个文件系统 sysfs。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建时,对应的文件和目录也在内核对象子系统中被创建。 +- `/tmp`:公用的临时文件存放目录。 +- `/usr`:应用程序和文件几乎都在这个目录下。 +- `/usr/src`:内核源代码的存放目录。 +- `/var`:存放了很多服务的日志信息。 ## 进程管理 @@ -221,7 +232,7 @@ drwxr-xr-x 4 root root 4096 Jul 28 08:48 boot 第一栏从第二个字母开始就是权限字符串,权限表示三个为一组,依次是所有者权限、组权限、其他人权限。每组的顺序均为 `rwx`,如果有相应权限,则表示成相应字母,如果不具有相应权限,则用 `-` 表示。 - `r`:读取权限,数字代号为 “4” - `w`:写入权限,数字代号为 “2” - - `x`:执行或切换权限,数字代号为 “1”; + - `x`:执行或切换权限,数字代号为 “1” 通过第一栏的第一个字母可知,第一行是一个链接文件 (`l`),第二行是个目录(`d`),第三行是个普通文件(`-`)。 @@ -235,6 +246,8 @@ drwxr-xr-x 4 root root 4096 Jul 28 08:48 boot - `$ chmod g=x [file]`:指定组权限为可执行 - `$ chmod o=rwx [file]`:制定其他人权限为可读、可写和可执行 +![](../pic/1.3_file.png) + ## 字节序 目前计算机中采用两种字节存储机制:大端(Big-endian)和小端(Little-endian)。 @@ -278,14 +291,14 @@ db-peda$ x/s 0xffffd584 ## 输入输出 - 使用命令的输出作为可执行文件的输入参数 - - ```$ ./vulnerable 'your_command_here'``` - - ```$ ./vulnerable $(your_command_here)``` + - `$ ./vulnerable 'your_command_here'` + - `$ ./vulnerable $(your_command_here)` - 使用命令作为输入 - - ```$ your_command_here | ./vulnerable``` + - `$ your_command_here | ./vulnerable` - 将命令行输出写入文件 - - ```$ your_command_here > filename``` + - `$ your_command_here > filename` - 使用文件作为输入 - - ```$ ./vulnerable < filename``` + - `$ ./vulnerable < filename` ## 文件描述符 diff --git a/doc/1.5.1_c_basic.md b/doc/1.5.1_c_basic.md index 0fd55fb..b0616d6 100644 --- a/doc/1.5.1_c_basic.md +++ b/doc/1.5.1_c_basic.md @@ -274,9 +274,9 @@ long long | -9 223 372 036 854 775 808 | 9 223 372 036 854 775 807 | 64 bits 固定大小的数据类型: - `int [# of bits]_t` - - int8_t, int16_t, int32_t + - int8\_t, int16\_t, int32_t - `uint[# of bits]_t` - - uint8_t, uint16_t, uint32_t + - uint8\_t, uint16\_t, uint32_t - 有符号整数 - ![](../pic/1.5.1_signed_integer.png) diff --git a/doc/1.5.7_memory.md b/doc/1.5.7_memory.md index b740f62..1ad665c 100644 --- a/doc/1.5.7_memory.md +++ b/doc/1.5.7_memory.md @@ -353,20 +353,20 @@ int munmap(void *addr, size_t len); #include #include void main() { - void *curr_brk; + void *curr_brk; - printf("当前进程 PID:%d\n", getpid()); - printf("初始化后\n"); - getchar(); + printf("当前进程 PID:%d\n", getpid()); + printf("初始化后\n"); + getchar(); - char *addr; - addr = mmap(NULL, (size_t)4096, PROT_READ|PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); - printf("mmap 完成\n"); - getchar(); + char *addr; + addr = mmap(NULL, (size_t)4096, PROT_READ|PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); + printf("mmap 完成\n"); + getchar(); - munmap(addr, (size_t)4096); - printf("munmap 完成\n"); - getchar(); + munmap(addr, (size_t)4096); + printf("munmap 完成\n"); + getchar(); } ``` 第一步初始化: diff --git a/doc/4.9_patch_elf.md b/doc/4.9_patch_elf.md new file mode 100644 index 0000000..b56bfbd --- /dev/null +++ b/doc/4.9_patch_elf.md @@ -0,0 +1 @@ +# 给 ELF 文件打 patch diff --git a/doc/4_tips.md b/doc/4_tips.md index 039bc99..abc31ee 100644 --- a/doc/4_tips.md +++ b/doc/4_tips.md @@ -8,3 +8,4 @@ - [4.6 zio](4.6_zio.md) - [4.7 通用 gadget](4.7_common_gadget.md) - [4.8 使用 DynELF 泄露函数地址](4.8_dynelf.md) +- [4.9 给 ELF 文件打 patch](4.9_patch_elf.md) diff --git a/doc/5.6_llvm.md b/doc/5.6_llvm.md index b4e8ebd..c90d6ed 100644 --- a/doc/5.6_llvm.md +++ b/doc/5.6_llvm.md @@ -1 +1 @@ -# 5.6_LLVM +# 5.6 LLVM diff --git a/doc/6_writeup.md b/doc/6_writeup.md index 78c2800..1c9e32e 100644 --- a/doc/6_writeup.md +++ b/doc/6_writeup.md @@ -1,13 +1,13 @@ # 第六章 题解篇 - pwn - - [6.1.1 pwn HCTF2016 brop](./6.1.1_pwn_hctf2016_brop.md) - - [6.1.2 pwn NJCTF2017 pingme](./6.1.2_pwn_njctf2017_pingme.md) - - [6.1.3 pwn XDCTF2015 pwn200](./6.1.3_pwn_xdctf2015_pwn200.md) - - [6.1.4 pwn BackdoorCTF2017 Fun-Signals](./6.1.4_pwn_backdoorctf2017_fun_signals.md) - - [6.1.5 pwn GreHackCTF2017 beerfighter](./6.1.5_pwn_grehackctf2017_beerfighter.md) - - [6.1.6 pwn DefconCTF2015 fuckup](./6.1.6_pwn_defconctf2015_fuckup.md) - - [6.1.7 pwn 0CTF2015 freenote](./6.1.7_pwn_0ctf2015_freenote.md) + - [6.1.1 pwn HCTF2016 brop](6.1.1_pwn_hctf2016_brop.md) + - [6.1.2 pwn NJCTF2017 pingme](6.1.2_pwn_njctf2017_pingme.md) + - [6.1.3 pwn XDCTF2015 pwn200](6.1.3_pwn_xdctf2015_pwn200.md) + - [6.1.4 pwn BackdoorCTF2017 Fun-Signals](6.1.4_pwn_backdoorctf2017_fun_signals.md) + - [6.1.5 pwn GreHackCTF2017 beerfighter](6.1.5_pwn_grehackctf2017_beerfighter.md) + - [6.1.6 pwn DefconCTF2015 fuckup](6.1.6_pwn_defconctf2015_fuckup.md) + - [6.1.7 pwn 0CTF2015 freenote](6.1.7_pwn_0ctf2015_freenote.md) - re - - [6.2.1 re XHPCTF2017 dont_panic](./6.2.1_re_xhpctf2017_dont_panic.md) - - [6.2.2 re ECTF2016 tayy](./6.2.2_re_ectf2016_tayy.md) + - [6.2.1 re XHPCTF2017 dont_panic](6.2.1_re_xhpctf2017_dont_panic.md) + - [6.2.2 re ECTF2016 tayy](6.2.2_re_ectf2016_tayy.md) diff --git a/doc/7.6_slides.md b/doc/7.6_slides.md index 13ac3d6..0c20726 100644 --- a/doc/7.6_slides.md +++ b/doc/7.6_slides.md @@ -2,4 +2,4 @@ 这些是我在 XDSEC 做分享的 PPT,主要内容取自 CTF-All-In-One,可作为辅助学习。 -- [01 Fight with Linux](../ppt/01_fight-with-linux.pdf) +- [01 Fight with Linux](../slides/01_fight-with-linux.pdf) diff --git a/pic/1.3_file.png b/pic/1.3_file.png new file mode 100644 index 0000000..4a28484 Binary files /dev/null and b/pic/1.3_file.png differ