跟着小黑学漏洞利用开发之unicode
2019-12-17 11:03:36 Author: www.secpulse.com(查看原文) 阅读量:209 收藏

 什么是Unicode?

Unicode为每个字符提供一个唯一的数字,不管平台如何不管是什么程序不管什么语言Unicode出现之前,ANSI就开始流行。Unicode和ANSI是字符编码的不同方式(或格式)。ANSI字符编码标准是在美国制定的,最多可以对1个字节的字符进行编码,这可以代表255个字符,因为他们的语言是英语,所以最多只能使用128个字符(包括26个字母,10位数字(0-9)和其他标点符号。)因此对他们来说就足够了,但是对于其他国家/地区和语言而言,远远不够!那时,Unicode诞生于统一不同的字符编码系统和方式,它以2个字节对一个字符进行编码,在这种情况下,它可以表示65535个字符(对于所有世界来说就足够了!)例如,当使用unicode将ASCII字符“ \ x41”存储在内存中时,它将截断为“ \ x00 \ x41 \ x00 \ x41”,注意:任何Unicode转换的结果取决于所使用的代码页),请务必记住,ASCII字符只有\x01和\x7f之间可以查看以下链接以了解有关代码页和unicode的更多信息:

http://www.ibm.com/developerworks/library/ws-codepages/ws-codepages-pdf.pdf

接下来,我将介绍当缓冲区溢出遇到unicode利用,本次我们将借助Vulnserver缓冲区演示程序中 LTER”指令进行练习。

准备

Windows7—Sp1(目标机)

kali-linux(攻击机)

ImmunityDebugger 1.85(调试工具)—x64、OD等动态调试器都可以

VulnServer

需要对了解X86汇编

python有一定了解

POC攻击

与往常一样,我们开始模糊测试得出在使用3000个A,我们将覆盖EIP,在漏洞利用开发过程中,我们应该修改缓冲区长度确定触发程序是否会以不同方式奔溃,这个在漏洞利用开发过程中是很重要一点。因为我们当前创建POC脚本如图:

image.png 

在这里我们运行POC脚本将看到程序崩溃情况,如图所示:覆盖EIP地址

image.png 

我们生成唯一字符串运行漏洞利用程序,寻找偏移值

image.png 

使用!mona findmsp,该偏移量确定为2003字节。

image.png 

如图所示,偏移量是完全正确,并且4 B覆盖了EIP。还可以看出,ESP直接位于EIP之后,并指向C的缓冲区。

image.png 

image.png 

寻找坏字节

为了找到坏字节,我修改了以下代码并将其存储在4个B之后。就像在这里看到的\x7F,此字符\x80随后被转换\x01。事实证明,之后的每个字符\x7F都将通过减去\x7F进行转换,一直到\xFF。至此我们可以看到允许的字符仅为ASCII(NULL字节除外)。

image.png 

寻找包含ASCII码地址

运行!mona jmp -r esp -cp ascii找到一个包含JMP ESP指令的地址。注意-cp ascii选项。这用于确保结果地址仅包含ASCII字符。为此,我使用了0x62501203地址

image.png 

image.png 

如图所示,它起作用了,我被重定向到了C的缓冲区。

image.png 

接下来,我们可以使用alpha_mixed编码器生成了一个shellcode 。我必须使用此编码器来生成仅包含允许的字符列表的shellcode。还应注意,我使用了BufferRegister=ESP选项。如果没有此选项,shellcode opcodes将以\x89\xe2\xdb\xdb\xd9\x72开头。因为需要此操作码才能在内存中找到shellcode的位置。在此漏洞利用中,我已经知道我的shellcode的位置ESP因此,选择在生成shellcode时使用BufferRegister=ESP选项。如果想了解更多关于alpha_mixed编码器,请阅读此https://www.offensive-security.com/metasploit-unleashed/alphanumeric-shellcode/

image.png 

如之前编写并运行最终漏洞利用程序。如图所示

image.png 

本文作者:legend

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/120616.html


文章来源: https://www.secpulse.com/archives/120616.html
如有侵权请联系:admin#unsafe.sh