From 559f3210cc2e5701b4b98ebaf802e2b61e8922b3 Mon Sep 17 00:00:00 2001 From: firmianay Date: Thu, 30 Nov 2017 19:54:38 +0800 Subject: [PATCH] add 4.9_patch_elf --- README.md | 1 + SUMMARY.md | 4 ++++ doc/1.3_linux_basic.md | 37 +++++++++++++++++++++++++------------ doc/1.5.1_c_basic.md | 4 ++-- doc/1.5.7_memory.md | 22 +++++++++++----------- doc/4.9_patch_elf.md | 1 + doc/4_tips.md | 1 + doc/5.6_llvm.md | 2 +- doc/6_writeup.md | 18 +++++++++--------- doc/7.6_slides.md | 2 +- pic/1.3_file.png | Bin 0 -> 32661 bytes 11 files changed, 56 insertions(+), 36 deletions(-) create mode 100644 doc/4.9_patch_elf.md create mode 100644 pic/1.3_file.png 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 0000000000000000000000000000000000000000..4a284844ca4cbccf770f75ff2cd5e661646954b8 GIT binary patch literal 32661 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 MQkJZgF#Y`h0BzNte*gdg literal 0 HcmV?d00001