add 4.9_patch_elf

This commit is contained in:
firmianay 2017-11-30 19:54:38 +08:00
parent a2bfc392fd
commit 559f3210cc
11 changed files with 56 additions and 36 deletions

View File

@ -56,6 +56,7 @@
- [4.6 zio](doc/4.6_zio.md) - [4.6 zio](doc/4.6_zio.md)
- [4.7 通用 gadget](doc/4.7_common_gadget.md) - [4.7 通用 gadget](doc/4.7_common_gadget.md)
- [4.8 使用 DynELF 泄露函数地址](doc/4.8_dynelf.md) - [4.8 使用 DynELF 泄露函数地址](doc/4.8_dynelf.md)
- [4.9 给 ELF 文件打 patch](doc/4.9_patch_elf.md)
- [五、高级篇](doc/5_advanced.md) - [五、高级篇](doc/5_advanced.md)
- [5.1 Fuzz 测试](doc/5.1_fuzz.md) - [5.1 Fuzz 测试](doc/5.1_fuzz.md)

View File

@ -1,5 +1,8 @@
# Summary # Summary
GitHub 地址https://github.com/firmianay/CTF-All-In-One
* [简介](README.md) * [简介](README.md)
* [一、基础知识篇](doc/1_basic.md) * [一、基础知识篇](doc/1_basic.md)
* [1.1 CTF 简介](doc/1.1_ctf.md) * [1.1 CTF 简介](doc/1.1_ctf.md)
@ -54,6 +57,7 @@
* [4.6 zio](doc/4.6_zio.md) * [4.6 zio](doc/4.6_zio.md)
* [4.7 通用 gadget](doc/4.7_common_gadget.md) * [4.7 通用 gadget](doc/4.7_common_gadget.md)
* [4.8 使用 DynELF 泄露函数地址](doc/4.8_dynelf.md) * [4.8 使用 DynELF 泄露函数地址](doc/4.8_dynelf.md)
* [4.9 给 ELF 文件打 patch](doc/4.9_patch_elf.md)
* [五、高级篇](doc/5_advanced.md) * [五、高级篇](doc/5_advanced.md)
* [5.1 Fuzz 测试](doc/5.1_fuzz.md) * [5.1 Fuzz 测试](doc/5.1_fuzz.md)
* [5.2 Pin 动态二进制插桩](doc/5.2_pin.md) * [5.2 Pin 动态二进制插桩](doc/5.2_pin.md)

View File

@ -43,6 +43,12 @@ top 实时查看系统的整体运行情况
kill 杀死一个进程 kill 杀死一个进程
ifconfig 查看或设置网络设备
ping 查看网络上的主机是否工作
netstat 显示网络连接、路由表和网络接口信息
nc(netcat) 建立 TCP 和 UDP 连接并监听 nc(netcat) 建立 TCP 和 UDP 连接并监听
su 切换当前用户身份到其他用户身份 su 切换当前用户身份到其他用户身份
@ -151,16 +157,21 @@ drwxr-xr-x 12 root root 4096 Jun 28 20:17 var
``` ```
由于不同的发行版会有略微的不同,我们这里使用的是基于 Arch 的发行版 Manjaro以上就是根目录下的内容我们介绍几个重要的目录 由于不同的发行版会有略微的不同,我们这里使用的是基于 Arch 的发行版 Manjaro以上就是根目录下的内容我们介绍几个重要的目录
- `/bin`、`/sbin`:链接到 `/usr/bin`,存放 Linux 一些核心的二进制文件,其包含的命令可在 shell 上运行。 - `/bin`、`/sbin`:链接到 `/usr/bin`,存放 Linux 一些核心的二进制文件,其包含的命令可在 shell 上运行。
- `/boot`:启动 Linux 的核心文件。 - `/boot`:操作系统启动时要用到的程序。
- `/dev`:设备文件。 - `/dev`:包含了所有 Linux 系统中使用的外部设备。需要注意的是这里并不是存放外部设备的驱动程序,而是一个访问这些设备的端口。
- `/etc`:存放各种配置文件。 - `/etc`:存放系统管理时要用到的各种配置文件和子目录。
- `/etc/rc.d`:存放 Linux 启动和关闭时要用到的脚本。
- `/home`:普通用户的主目录。 - `/home`:普通用户的主目录。
- `/lib`、`/lib64`:链接到 `/usr/lib`,存放系统及软件需要的动态链接库。 - `/lib`、`/lib64`:链接到 `/usr/lib`,存放系统及软件需要的动态链接共享库。
- `/mnt`:这个目录让用户可以临时挂载其他的文件系统。 - `/mnt`:这个目录让用户可以临时挂载其他的文件系统。
- `/proc`:虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。 - `/proc`:虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
- `/root`:系统管理员的主目录。 - `/root`:系统管理员的主目录。
- `tmp`:公用的临时文件存放目录。 - `/srv`:存放一些服务启动之后需要提取的数据。
- `usr`:应用程序和文件几乎都在这个目录下。 - `/sys`:该目录下安装了一个文件系统 sysfs。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建时对应的文件和目录也在内核对象子系统中被创建。
- `/tmp`:公用的临时文件存放目录。
- `/usr`:应用程序和文件几乎都在这个目录下。
- `/usr/src`:内核源代码的存放目录。
- `/var`:存放了很多服务的日志信息。
## 进程管理 ## 进程管理
@ -221,7 +232,7 @@ drwxr-xr-x 4 root root 4096 Jul 28 08:48 boot
第一栏从第二个字母开始就是权限字符串,权限表示三个为一组,依次是所有者权限、组权限、其他人权限。每组的顺序均为 `rwx`,如果有相应权限,则表示成相应字母,如果不具有相应权限,则用 `-` 表示。 第一栏从第二个字母开始就是权限字符串,权限表示三个为一组,依次是所有者权限、组权限、其他人权限。每组的顺序均为 `rwx`,如果有相应权限,则表示成相应字母,如果不具有相应权限,则用 `-` 表示。
- `r`:读取权限,数字代号为 “4” - `r`:读取权限,数字代号为 “4”
- `w`:写入权限,数字代号为 “2” - `w`:写入权限,数字代号为 “2”
- `x`:执行或切换权限,数字代号为 “1” - `x`:执行或切换权限,数字代号为 “1”
通过第一栏的第一个字母可知,第一行是一个链接文件 `l`),第二行是个目录(`d`),第三行是个普通文件(`-`)。 通过第一栏的第一个字母可知,第一行是一个链接文件 `l`),第二行是个目录(`d`),第三行是个普通文件(`-`)。
@ -235,6 +246,8 @@ drwxr-xr-x 4 root root 4096 Jul 28 08:48 boot
- `$ chmod g=x [file]`:指定组权限为可执行 - `$ chmod g=x [file]`:指定组权限为可执行
- `$ chmod o=rwx [file]`:制定其他人权限为可读、可写和可执行 - `$ chmod o=rwx [file]`:制定其他人权限为可读、可写和可执行
![](../pic/1.3_file.png)
## 字节序 ## 字节序
目前计算机中采用两种字节存储机制大端Big-endian和小端Little-endian 目前计算机中采用两种字节存储机制大端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`
## 文件描述符 ## 文件描述符

View File

@ -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` - `int [# of bits]_t`
- int8_t, int16_t, int32_t - int8\_t, int16\_t, int32_t
- `uint[# of bits]_t` - `uint[# of bits]_t`
- uint8_t, uint16_t, uint32_t - uint8\_t, uint16\_t, uint32_t
- 有符号整数 - 有符号整数
- ![](../pic/1.5.1_signed_integer.png) - ![](../pic/1.5.1_signed_integer.png)

View File

@ -353,20 +353,20 @@ int munmap(void *addr, size_t len);
#include <sys/mman.h> #include <sys/mman.h>
#include <unistd.h> #include <unistd.h>
void main() { void main() {
void *curr_brk; void *curr_brk;
printf("当前进程 PID%d\n", getpid()); printf("当前进程 PID%d\n", getpid());
printf("初始化后\n"); printf("初始化后\n");
getchar(); getchar();
char *addr; char *addr;
addr = mmap(NULL, (size_t)4096, PROT_READ|PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); addr = mmap(NULL, (size_t)4096, PROT_READ|PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
printf("mmap 完成\n"); printf("mmap 完成\n");
getchar(); getchar();
munmap(addr, (size_t)4096); munmap(addr, (size_t)4096);
printf("munmap 完成\n"); printf("munmap 完成\n");
getchar(); getchar();
} }
``` ```
第一步初始化: 第一步初始化:

1
doc/4.9_patch_elf.md Normal file
View File

@ -0,0 +1 @@
# 给 ELF 文件打 patch

View File

@ -8,3 +8,4 @@
- [4.6 zio](4.6_zio.md) - [4.6 zio](4.6_zio.md)
- [4.7 通用 gadget](4.7_common_gadget.md) - [4.7 通用 gadget](4.7_common_gadget.md)
- [4.8 使用 DynELF 泄露函数地址](4.8_dynelf.md) - [4.8 使用 DynELF 泄露函数地址](4.8_dynelf.md)
- [4.9 给 ELF 文件打 patch](4.9_patch_elf.md)

View File

@ -1 +1 @@
# 5.6_LLVM # 5.6 LLVM

View File

@ -1,13 +1,13 @@
# 第六章 题解篇 # 第六章 题解篇
- pwn - pwn
- [6.1.1 pwn HCTF2016 brop](./6.1.1_pwn_hctf2016_brop.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.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.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.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.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.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.7 pwn 0CTF2015 freenote](6.1.7_pwn_0ctf2015_freenote.md)
- re - re
- [6.2.1 re XHPCTF2017 dont_panic](./6.2.1_re_xhpctf2017_dont_panic.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) - [6.2.2 re ECTF2016 tayy](6.2.2_re_ectf2016_tayy.md)

View File

@ -2,4 +2,4 @@
这些是我在 XDSEC 做分享的 PPT主要内容取自 CTF-All-In-One可作为辅助学习。 这些是我在 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)

BIN
pic/1.3_file.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB