diff --git a/README.md b/README.md index a96b4e0..fd198f1 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ - [3.6 Mobile](doc/3.6_mobile.md) - [四、技巧篇](doc/4_tips.md) - - [4.1 AWD模式](doc/4.1_AWD.md) + - [4.1]() - [4.2 Linux 命令行技巧](doc/4.2_Linux_terminal_tips.md) - [4.3 GCC 编译参数解析](doc/4.3_gcc_arg.md) - [4.4 GCC 堆栈保护技术](doc/4.4_gcc_sec.md) diff --git a/SUMMARY.md b/SUMMARY.md index 53cf312..b2e36ad 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -57,7 +57,7 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One * [3.5 Misc](doc/3.5_misc.md) * [3.6 Mobile](doc/3.6_mobile.md) * [四、技巧篇](doc/4_tips.md) - * [4.1 AWD模式](doc/4.1_AWD.md) + * [4.1]() * [4.2 Linux 命令行技巧](doc/4.2_Linux_terminal_tips.md) * [4.3 GCC 编译参数解析](doc/4.3_gcc_arg.md) * [4.4 GCC 堆栈保护技术](doc/4.4_gcc_sec.md) diff --git a/doc/1.1_ctf.md b/doc/1.1_ctf.md index c30202d..7b643fd 100644 --- a/doc/1.1_ctf.md +++ b/doc/1.1_ctf.md @@ -5,6 +5,7 @@ - [题目类别](#题目类别) - [高质量的比赛](#高质量的比赛) - [竞赛小贴士](#竞赛小贴士) +- [线下赛 AWD 模式](#线下赛-awd-模式) - [搭建 CTF 比赛平台](#搭建-ctf-比赛平台) @@ -91,6 +92,52 @@ CTF竞赛模式具体分为以下三类: - id0-rsa.pub +## 线下赛 AWD 模式 +Attack With Defence,简而言之就是你既是一个 hacker,又是一个 manager。 + +比赛形式:一般就是一个 ssh 对应一个服务,可能是 web 也可能是 pwn,然后 flag 五分钟一轮,各队一般都有自己的初始分数,flag 被拿会被拿走 flag 的队伍均分,主办方会对每个队伍的服务进行 check,check 不过就扣分,扣除的分值由服务 check 正常的队伍均分。 + +#### 怎样拿到 flag +1. web 主要是向目标服务器发送 http 请求,返回 flag +2. bin 主要是通过 exploit 脚本读取 `/home/username` 下某个文件夹下的 flag 文件 + +#### Web 题目类型 +1. 出题人自己写的 CMS 或者魔改后的 CMS(注意最新漏洞、1day 漏洞等) +2. 常见(比如 `Wordpress` 博客啊、`Discuz!` 论坛啊)或者不常见 CMS 等 +3. 框架型漏洞(CI等) + +- [如何在 CTF 中当搅屎棍](http://www.mamicode.com/info-detail-1590551.html) +- [AWD 模式生存技巧](http://bobao.360.cn/ctf/detail/169.html) +- 能力: + - 漏洞反应能力 + - 快速编写脚本 + - web代码审计 +- 心态放好,因为 web 比较容易抓取流量,所以即使我们被打,我们也可以及时通过分析流量去查看别的队伍的 payload,从而进行反打。 +- 脚本准备:一句话,文件包含,不死马、禁止文件上传等 +- **警惕 web 弱口令,用最快的速度去补。** + +#### Bin 题目类型 +大部分是 PWN,题目类型包括栈、堆、格式化字符串等等。 + +- 能力: + - 迅速找到二进制文件的漏洞,迅速打 patch 的能力 + - 全场打 pwn 的 exp 脚本编写 + - 熟悉服务器运维 + - 尽快摸清楚比赛的 check 机制 + - 如果二进制分析遇到障碍难以进行,那就去帮帮 web 选手运维 +- 看看现场环境是否可以提权,这样可以方便我们搞操作(如魔改 libc 等等) + +#### 技巧 +- 如果自己拿到 FB, 先用 NPC 服务器或者自己服务器测试,格外小心自己的 payload 不要被别的队伍抓取到, 写打全场的 exp 时,一定要加入混淆流量。 +- 提前准备好 PHP 一句话木马等等脚本。 +- 小心其他队伍恶意攻击使我们队伍机器的服务不能正常运行,因此一定要备份服务器的配置。 +- 尽可能在不搞崩服务和绕过 check 的情况下,上 WAF,注意分析别人打过来的流量,如果没有混淆,可以大大加快我们的漏洞分析速度。 +- 工具准备: 中国菜刀、 Nmap、Xshell、 合适的扫描器等。 +- 心态不要崩。 +- 不要忽视 Github 等平台,可能会有写好的 exp 可以用。 +- 将 flag 的提交自动化。 + + ## 搭建 CTF 比赛平台 - [FBCTF](https://github.com/facebook/fbctf) - The Facebook CTF is a platform to host Jeopardy and “King of the Hill” style Capture the Flag competitions. - [CTFd](https://github.com/CTFd/CTFd) - CTFd is a Capture The Flag in a can. It's easy to customize with plugins and themes and has everything you need to run a jeopardy style CTF. diff --git a/doc/3.3.1_format_string.md b/doc/3.3.1_format_string.md index 592d267..dcec50a 100644 --- a/doc/3.3.1_format_string.md +++ b/doc/3.3.1_format_string.md @@ -1399,6 +1399,5 @@ hacked! ## 练习 -- [**pwn** - UIUCTF 2017 - goodluck - 200](../src/Pwn/3.3.1_goodluck_200) -- [**Pwn** - NJCTF 2017 - pingme - 200](../src/writeup/6.2_pwn_njctf2017_pingme) - - writeup 在章节 6.2 中 +- [pwn NJCTF2017 pingme](../src/writeup/6.1.2_pwn_njctf2017_pingme) + - writeup 在章节 6.1.2 中 diff --git a/doc/3.3.4_rop.md b/doc/3.3.4_rop.md index 8ad676e..31ddce4 100644 --- a/doc/3.3.4_rop.md +++ b/doc/3.3.4_rop.md @@ -414,7 +414,7 @@ Dump of assembler code for function usefulFunction: 0x0000000000400817 <+16>: ret End of assembler dump. ``` -64 位程序的第一个参数通过 edi 传递,所以我们再调用需要一个 gadgets 来将字符串的地址存进 edi。 +64 位程序的第一个参数通过 edi 传递,所以我们需要再调用一个 gadgets 来将字符串的地址存进 edi。 我们先找到需要的 gadgets: ``` diff --git a/doc/4.1_AWD.md b/doc/4.1_AWD.md deleted file mode 100644 index e8550cf..0000000 --- a/doc/4.1_AWD.md +++ /dev/null @@ -1,62 +0,0 @@ -# 4.1 AWD Model - -- [Advanced](#advanced) -- [How can I get flag?](#how-can-i-get-flag) -- [Web 题目类型](#web-题目类型) -- [Bin 题目类型](#bin-题目类型) -- [About Web](#about-web) -- [About Bin](#about-bin) -- [TIPS](#tips) - - -## Advanced - -> Attack With Defence,简而言之就是你既是一个 hacker,又是一个 manager。 -> 比赛形式:一般就是一个 ssh 对应一个web服务,然后flag五分钟一轮,各队一般都有自己的初始分数,flag 被拿会被拿走 flag 的队伍均分,主办方会对每个队伍的服务进行 check,check 不过就扣分,扣除的分值由服务 check 正常的队伍均分。 - -## How can I get flag? - -1. web 主要是向目标服务器发送 http 请求,返回 flag -2. bin 主要是通过 exploit 脚本读取 `/home/username` 下某个文件夹下的 flag 文件 - -## Web 题目类型 - -1. 出题人自己写的 CMS 或者魔改后的 CMS(注意最新漏洞、1day 漏洞等) -2. 常见(比如 `Wordpress` 博客啊、`Discuz!` 论坛啊)或者不常见 CMS 等 -3. 框架型漏洞(CI等) - -## Bin 题目类型 - -大部分是 PWN,题目类型包括栈、堆、格式化字符串等等。 - -## About Web - -- [如何在 CTF 中当搅屎棍](http://www.mamicode.com/info-detail-1590551.html) -- [AWD 模式生存技巧](http://bobao.360.cn/ctf/detail/169.html) -- 能力: - - 漏洞反应能力 - - 快速编写脚本 - - web代码审计 -- 心态放好,因为 web 比较容易抓取流量,所以即使我们被打,我们也可以及时通过分析流量去查看别的队伍的 payload,从而进行反打。 -- 脚本准备:一句话,文件包含,不死马、禁止文件上传等 -- **警惕 web 弱口令,用最快的速度去补。** - -## About Bin - -- 能力: - - 迅速找到二进制文件的漏洞,迅速打 patch 的能力 - - 全场打 pwn 的 exp 脚本编写 - - 熟悉服务器运维 - - 尽快摸清楚比赛的 check 机制 - - 如果二进制分析遇到障碍难以进行,那就去帮帮 web 选手运维 -- 看看现场环境是否可以提权,这样可以方便我们搞操作(如魔改 libc 等等) - -## TIPS - -- 如果自己拿到 FB, 先用 NPC 服务器或者自己服务器测试,格外小心自己的 payload 不要被别的队伍抓取到, 写打全场的 exp 时,一定要加入混淆流量。 -- 提前准备好 PHP 一句话木马等等脚本。 -- 小心其他队伍恶意攻击使我们队伍机器的服务不能正常运行,因此一定要备份服务器的配置。 -- 尽可能在不搞崩服务和绕过 check 的情况下,上 WAF,注意分析别人打过来的流量,如果没有混淆,可以大大加快我们的漏洞分析速度。 -- 工具准备: 中国菜刀、 Nmap、Xshell、 合适的扫描器等。 -- 心态不要崩. -- 不要忽视 Github 等平台,可能会有写好的 exp 可以用。 diff --git a/doc/4.2_Linux_terminal_tips.md b/doc/4.2_Linux_terminal_tips.md index e7d72b0..26c9d11 100644 --- a/doc/4.2_Linux_terminal_tips.md +++ b/doc/4.2_Linux_terminal_tips.md @@ -20,9 +20,33 @@ ## 重定向输入字符 -有时候我们需要在 shell 里输入键盘上没有对应的字符,如 `0x1F`,就需要使用重定向输入。下面是一个例子:[源码](../src/Others/4.2_0x1f.c) +有时候我们需要在 shell 里输入键盘上没有对应的字符,如 `0x1F`,就需要使用重定向输入。下面是一个例子: +```C +#include +#include +void main() { + char data[8]; + char str[8]; + printf("请输入十六进制为 0x1f 的字符: "); + sprintf(str, "%c", 31); + scanf("%s", data); + if (!strcmp((const char *)data, (const char *)str)) { + printf("correct\n"); + } else { + printf("wrong\n"); + } +} +``` +``` +$ gcc test.c +$ ./a.out +请输入十六进制为 0x1f 的字符: 0x1f +wrong +$ echo -e "\x1f" -![](../pic/4.2_0x1f.png) +$ echo -e "\x1f" | ./a.out +请输入十六进制为 0x1f 的字符: correct +``` ## 从可执行文件中提取 shellcode diff --git a/doc/4_tips.md b/doc/4_tips.md index bbcb3b4..93d4aa7 100644 --- a/doc/4_tips.md +++ b/doc/4_tips.md @@ -1,6 +1,6 @@ # 第四章 技巧篇 -- [4.1 AWD模式](4.1_AWD.md) +- [4.1]() - [4.2 Linux 命令行技巧](4.2_Linux_terminal_tips.md) - [4.3 GCC 编译参数解析](4.3_gcc_arg.md) - [4.4 GCC 堆栈保护技术](4.4_gcc_sec.md) diff --git a/pic/4.2_0x1f.png b/pic/4.2_0x1f.png deleted file mode 100644 index a7f4b7c..0000000 Binary files a/pic/4.2_0x1f.png and /dev/null differ diff --git a/src/Others/4.2_0x1f.c b/src/Others/4.2_0x1f.c deleted file mode 100644 index 27fa408..0000000 --- a/src/Others/4.2_0x1f.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -void main() { - char data[8]; - char str[8]; - printf("请输入十六进制为 0x1f 的字符: "); - sprintf(str, "%c", 31); - scanf("%s", data); - if (!strcmp((const char *)data, (const char *)str)) { - printf("correct\n"); - } else { - printf("wrong\n"); - } -} diff --git a/src/Pwn/3.3.1_goodlock_200 b/src/Pwn/3.3.1_goodlock_200 deleted file mode 100755 index 23b5d33..0000000 Binary files a/src/Pwn/3.3.1_goodlock_200 and /dev/null differ