mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2024-12-24 19:21:15 +07:00
add 4.9_patch_elf
This commit is contained in:
parent
a2bfc392fd
commit
559f3210cc
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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`
|
||||||
|
|
||||||
|
|
||||||
## 文件描述符
|
## 文件描述符
|
||||||
|
@ -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)
|
||||||
|
@ -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
1
doc/4.9_patch_elf.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 给 ELF 文件打 patch
|
@ -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)
|
||||||
|
@ -1 +1 @@
|
|||||||
# 5.6_LLVM
|
# 5.6 LLVM
|
||||||
|
@ -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)
|
||||||
|
@ -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
BIN
pic/1.3_file.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
Loading…
Reference in New Issue
Block a user