xfocus logo xfocus title
Ê×Ò³ ½¹µãÔ­´´ °²È«ÎÄÕª °²È«¹¤¾ß °²È«Â©¶´ ½¹µãÏîÄ¿ ½¹µãÂÛ̳ ¹ØÓÚÎÒÃÇ
Ìí¼ÓÎÄÕÂ Xcon English Version

¼òÎöLinuxÓëFreeBSDµÄsyscallÓëshellcode


´´½¨Ê±¼ä£º2006-08-23
ÎÄÕÂÊôÐÔ£ºÔ­´´
ÎÄÕÂÌá½»£º7all (sgh81_at_163.com)

==www.cciss.cn.==
                           ==bbs.cciss.cn.==
                            
                    ¼òÎöLinuxÓëFreeBSDµÄsyscallÓëshellcode

|=---------------=[ ¼òÎöLinuxÓëFreeBSDµÄsyscallÓëshellcode ]=------=|
|=-----------------------------------------------------------------=|
|=---------------=[ 7all<bloodfall_at_msn.com> ]=------------------=|
|=-----------------------------------------------------------------=|
|=---------------=[ °æÈ¨ËùÓÐ:www.cciss.cn ]=-----------------------=|

--]¸ÅÊö
  ÓÖÊÇÒ»¸ö²»ÃßµÄÒ¹Íí,ÆäʵÕâÆªÎĵµÊDz»Ó¦¸Ã·¢±íµÄ,ÒòΪ±£ÃܵÄÔ­Ôò°É,µ«ÊÇÎÒ×Ðϸ
googleÁËÏÂ,ûÓÐÀàËÆµÄÎÄÕÂ,¶øÇÒ·¢±íµÄÕⲿ·ÖÎĵµÒ²²»ÖÁÓÚ±»ÈÏΪÊÇʲô¾øÃÜ×ÊÁÏ,
µ«ÊÇÎÒ»¹ÊÇÒþ²ØÁ˺ܶ෢ÏÖµÄÄں˼¶±ð¿ÉÄÜ´æÔÚµÄÎÊÌâ:)µ¥´¿´Ó»ã±à´úÂëµÄ½á¹¹À´²ûÊö
ÏÂlinuxÓëfreebsdµ½µ×ÄǸö¸üºÃÍæÒ»Ð©.»òÕß˵ÄǸöÔËÐÐËÙ¶È»á¸ü¿ìһЩ:)
  ÎÒÏë´ó¼Ò¿´ÍêÕâ¸öÎĵµÒÔºó,»òÐí»áÖªµÀµ½µ×ÊÇLinuxÎȹÌ?»¹ÊÇFreeBSDÎȹÌ?
  ÔÚ±¾ÎĵÄ×îºó²¿·Ö,¸½¼ÓÁËshellcodeµÄÎÊÌâ,µ«Ã»ÓÐרÃŵÄÂÛÊö.
  ±¸×¢:±¾ÎĹ۵ã½ö´ú±í¸öÈ˹۵ã,ÈçÓв»¶ÔµÄµØ·½,»¶Ó­´ó¼ÒÖ¸Õý:)ÒÔÌá¸ß±¾È˵Äˮƽ.
  
--]±àÒëµ÷ÊÔ
A:±àÒëÑ¡Ïî
Linux  :gcc -gdwarf-2 ***.c -o ***
FreeBSD: cc -gdwarf-2 ***.c -o ***
ΪÁ˵÷ÊÔ·½±ã,ÎÒʹÓÃÁËÉÏÃæµÄÑ¡Ïî.
--------------------------------------
¶ÔÓÚÒ»°ãÊéдshellcodeµÄ±àÒëÑ¡ÏîÒ»°ãΪ:
Linux  :gcc -static -o *** ***.c
FreeBSD: cc -static -o *** ***.c
B:µ÷ÊÔ¹¤¾ß
Linux/UnixÏÂÃæµÄµ÷ÊÔ¹¤¾ßΪGDB,µ«ÊÇGDB»ùÓÚÄں˵ĵ÷ÊÔÓÐЩÁ¦²»´ÓÐÄ,ÒòΪGDBµÄµ÷ÊÔÊÇ
»ùÓÚÓû§Ä£Ê½(User mode).
ÕâÀïÎÒʹÓÃÁËÆäËüµÄµ÷ÊÔ¹¤¾ß,ËùÒÔÏÂÃæ´ó¼Ò¿´µ½µÄµ÷ÊÔ´úÂë±È½ÏÌØÊâ,ÔÚÕâÀïÊÂÏÈÉùÃ÷.

--]LinuxµÄsyscall¸ú×Ù
  Ð´¹ýshellcodeµÄÈ˶¼ÖªµÀsyscallÊÇдshellcodeµÄ±ØÐèÆ·:)µ±È»ÕâÖÖ¸ÅÄîÖ»ÔÚLinux/Unix
µÄOSϲŴæÔÚ.×î½üÕâ¶Îʱ¼äÒòΪһ¸ö"ССµÄÎÊÌâ"¶ÔLinuxÄÚºËÓëFreeBSDµÄÄں˼¶±ð½øÐÐÁË
¸ú×ٺ͵÷ÊÔ,È»ºó·¢ÏÖÒ»¸öÂùÓÐÒâ˼µÄÎÊÌâ,×Ô¼º¸Ð¾õÕâ¸öÎÊÌâ¿ÉÄÜ»áÓëLinuxÏÂshellcodeÓë
FreeBSDÏÂshellcodeµÄ²»Í¬ÓйØÏµ,µ±È»Ò²ºÍϵͳ¼Ü¹¹´æÔÚһЩϸ΢µÄ¹ØÏµ.ÏÂÃæµÄÄÚÈÝÊÇLinux
ÏÂÃæsyscallµÄһЩ»ã±à´úÂë.
  ÔÚLinuxÏÂÃæ,Applicationµ÷ÓÃsyscallµÄ´úÂëÈçÏÂ:
420D4330 55               PUSH        EBP                                            |
420D4331 89E5             MOV         EBP,ESP                                    |->¶ÑÕ»¿ò¼Ü
420D4333 83EC18           SUB         ESP,00000018                        |
420D4336 897DFC           MOV         dword ptr [EBP]-04,EDI    |
420D4339 8B4D0C           MOV         ECX,dword ptr [EBP]+0c    |
420D433C 8B7D08           MOV         EDI,dword ptr [EBP]+08    |->syscall²ÎÊý
420D433F 8975F8           MOV         dword ptr [EBP]-08,ESI    |
420D4342 8B5510           MOV         EDX,dword ptr [EBP]+10    |
420D4345 895DF4           MOV         dword ptr [EBP]-0c,EBX
420D4348 E81014F4FF       CALL        near32 ptr 4201575d
420D434D 81C3835F0500     ADD         EBX,00055f83
420D4353 8D77FF           LEA         ESI,dword ptr [EDI]-01
420D4356 83FE02           CMP         ESI,00000002
420D4359 8D75F0           LEA         ESI,dword ptr [EBP]-10
420D435C 0F477514         CMOVA       ESI,dword ptr [EBP]+14    
420D4360 53               PUSH        EBX
420D4361 89FB             MOV         EBX,EDI        
420D4363 B81A000000       MOV         EAX,0000001c  //system call    number value    
420D4368 CD80             INT         80                        //µ÷ÓÃ0x80
420D436A 5B               POP         EBX
420D436B 3D00F0FFFF       CMP         EAX,fffff000
420D4370 89C6             MOV         ESI,EAX
420D4372 760E             JBE         short ptr 420d4382
420D4374 F7DE             NEG         ESI
420D4376 E8C912F4FF       CALL        near32 ptr 42015644
420D437B 8930             MOV         dword ptr [EAX],ESI
420D437D BEFFFFFFFF       MOV         ESI,ffffffff
420D4382 85F6             TEST        ESI,ESI
420D4384 782A             JS          short ptr 420d43b0
420D4386 85FF             TEST        EDI,EDI
420D4388 7426             JE          short ptr 420d43b0
420D438A 83FF03           CMP         EDI,00000003
420D438D 7721             JA          short ptr 420d43b0
420D438F E8B012F4FF       CALL        near32 ptr 42015644
420D4394 C70000000000     MOV         dword ptr [EAX],00000000
420D439A 8B45F0           MOV         EAX,dword ptr [EBP]-10
420D439D 8B5DF4           MOV         EBX,dword ptr [EBP]-0c
420D43A0 8B75F8           MOV         ESI,dword ptr [EBP]-08
420D43A3 8B7DFC           MOV         EDI,dword ptr [EBP]-04
420D43A6 89EC             MOV         ESP,EBP
420D43A8 5D               POP         EBP
420D43A9 C3               RETN  
---------------------------------------------------------------------
ΪÁ˼òµ¥·ÖÎö,ÎÒÃǾͿ´ÕâÀïµÄ´úÂë:
420D4330 55               PUSH        EBP                                            |
420D4331 89E5             MOV         EBP,ESP                                    |->¶ÑÕ»¿ò¼Ü
420D4333 83EC18           SUB         ESP,00000018                        |
420D4336 897DFC           MOV         dword ptr [EBP]-04,EDI    |
420D4339 8B4D0C           MOV         ECX,dword ptr [EBP]+0c    |
420D433C 8B7D08           MOV         EDI,dword ptr [EBP]+08    |->syscall²ÎÊý
420D433F 8975F8           MOV         dword ptr [EBP]-08,ESI    |
420D4342 8B5510           MOV         EDX,dword ptr [EBP]+10    |
420D4345 895DF4           MOV         dword ptr [EBP]-0c,EBX
420D4348 E81014F4FF       CALL        near32 ptr 4201575d
420D434D 81C3835F0500     ADD         EBX,00055f83
420D4353 8D77FF           LEA         ESI,dword ptr [EDI]-01
420D4356 83FE02           CMP         ESI,00000002
420D4359 8D75F0           LEA         ESI,dword ptr [EBP]-10
420D435C 0F477514         CMOVA       ESI,dword ptr [EBP]+14    
420D4360 53               PUSH        EBX
420D4361 89FB             MOV         EBX,EDI        
420D4363 B81A000000       MOV         EAX,0000001c  //system call    number value    
420D4368 CD80             INT         80                        //µ÷ÓÃ0x80
----------------------------------------------------------------------
  µ±È»´ÓÉÏÃæµÄ´úÂë,ÎÒÃÇÖ»ÄÜ¿´µ½LinuxÔÚ¸üÉîµÄÒ»²ãµ÷ÓÃsyscallµÄÒ»¸ö»ã±à´úÂë¹ý³Ì,»»¾ä»°
˵,¿ÉÄÜÉÏÃæµÄÕâЩ´úÂë¶¼ÊÇ·Ï»°:)OK,ÎÒÃǼÌÐø¿´ÏÂÃæµÄÄÚÈÝ.

--]FreeBSDµÄsyscall
  FreeBSDÏÂÃæµÄsyscallÎÒ½øÐÐÁËÁ½´Î¸ú½øµÄ²Ù×÷²Å½øÈëµ½ÄÚ²¿,ËùÒÔÏÂÃæÊ¹ÓÃÁËÁ½¸ö¹ý³ÌÀ´ÑÝʾ
´úÂë,²»¹ý´ÓÏÂÃæµÄ´úÂëÀ´¿´FreeBSDµÄ¶ÌÁ˺ܶàºÜ¶à:)
trace into one step:
28080D98: 31C0             XOR         EAX,EAX
28080D9A: 53               PUSH        EBX
28080D9B: E800000000       CALL        near32 ptr 28080da0
-------------------------------------------------------------------
trace into two step:
28080DA0: 5B               POP         EBX
28080DA1: 81C3AC980600     ADD         EBX,000698ac
28080DA7: 8B934C0A0000     MOV         EDX,dword ptr [EBX]+00000a4c
28080DAD: 8902             MOV         dword ptr [EDX],EAX
28080DAF: 5B               POP         EBX
28080DB0: 8D051A000000     LEA         EAX,dword ptr [0000001c]//system call number value
28080DB6: CD80             INT         80
28080DB8: 7201             JC          short ptr 28080dbb
28080DBA: C3               RETN  
--------------------------------------------------------------------
  ´ÓÉÏÃæµÄ´úÂëÀ´¿´,FreeBSDµÄsyscall´úÂë±ÈLinuxµÄ¶ÌÁ˺ܶàºÜ¶à,µ«Êǽö½öÊǶ̻¹ÊDz»¹»µÄ,Èç¹ûÔÚ¿´
Õâ¸öÎĵµÇ°ÄãÊìÏ¤ÆÆ½â¼¼Êõ or Òç³ö¼¼Êõ or Intel»ã±àÓïÑÔ.ÎÒÏë¿ÉÄÜ´ó¼ÒÓÐÕâÑùµÄ¸Ð¾õ,FreeBSDµÄµ÷ÓÃ
syscallµÄ¹ý³Ì±ÈLinuxµÄÒª°²È«Á˺ܶàºÜ¶à,ΪʲôÕâÃ´ËµÄØ?ÇëÔÙ·µ»Ø×Ðϸ¿´ÉÏÃæµÄLinux/FreeBSDµÄ»ã
±à´úÂë:)ÏÂÃæÎÒÃÇÒ²»á´ó¸ÅµÄÂÛÖ¤ÏÂ,µ«½ö½öÊÇ²Â²â¶øÒÑ:)

--]FreeBSD±ÈLinux°²È«?
  Ñ§¹ýÆÆ½â¼¼ÊõµÄÅóÓÑ,¶¼ÖªµÀͨ¹ýÒ»Ð©Ìø×ªÖ¸ÁîÀ´ÊµÏÖ¶ÔÓÚÈí¼þµÄÆÆ½â,µ±È»Ê¹ÓÃÌø×ªÖ¸Áî¿ÉÄܽö½ö¶ÔһЩ
¼òµ¥µÄÈí¼þÊÇÓÐÓô¦.ͻȻ·¢ÏÖÎÒÉÏÃæËµµÄÕâ¾ä»°ÊÇ·Ï»°,ºÍ±¾ÎÄûÓÐÈκεĹØÏµ,ÓôÃÆ...¿´À´ÄÔ´üÀïÃæ×°µÄ
¶«Î÷¶àÒ²²»ÊÇʲôºÃÊÂÇé:(
  ÑÔ¹éÕý´«,ÎÒÃÇÀ´´óÌåµÄ·ÖÎöÏÂΪʲô˵BSD±ÈLinuxÒª°²È«Ð©!Çë¿´ÏÂÃæµÄ´úÂë:
  LinuxµÄsyscallµ÷ÓÃ:
420D4336 897DFC           MOV         dword ptr [EBP]-04,EDI    |
420D4339 8B4D0C           MOV         ECX,dword ptr [EBP]+0c    |
420D433C 8B7D08           MOV         EDI,dword ptr [EBP]+08    |->syscall²ÎÊý
420D433F 8975F8           MOV         dword ptr [EBP]-08,ESI    |
420D4342 8B5510           MOV         EDX,dword ptr [EBP]+10    |
-----------------------------------------------------------------------------
420D435C 0F477514         CMOVA       ESI,dword ptr [EBP]+14    |
420D4360 53               PUSH        EBX                                            |->syscall²ÎÊý
420D4361 89FB             MOV         EBX,EDI                                    |
420D4363 B81A000000       MOV         EAX,0000001c  //system call    number value    
420D4368 CD80             INT         80                        //µ÷ÓÃ0x80
-----------------------------------------------------------------------------
  ´ÓÉÏÃæµÄ´úÂëÎÒÃÇ¿ÉÒÔ¿´µ½ÕâÑùÒ»ÖÖÇé¿ö,ÕâÀïÎÒÃǼÙÉèµ÷ÓÃϵͳº¯ÊýwriteÀ´Ð´Êä³ö:)
  write(filehandle, buf, buf_length)
  Æä»ã±à´úÂëµÄº¯Êýµ÷ÓÃ,»ù±¾ÈçÏÂ:
  push buf_length
  push buf
  push filehandle
  call write
  È»ºó½øÈëµ½writeº¯Êýºó,ÎÒÃǾÍÖªµÀLinuxµÄsyscallµÄÒ»¸öÍêÕû¹ý³ÌÈçÏÂ:
  ¸ß¼¶ÓïÑÔµ÷ÓÃϵͳº¯Êý|
    ->jump syscall(¼´ÏµÍ³¶Ôϵͳº¯ÊýµÄ±êʶ)|
      ->°ÑsyscallµÄ²ÎÊý¸³¸ø¼Ä´æÆ÷|
        ->mov eax,0x**(¼°ÉÏÃæwriteº¯ÊýÕë¶ÔsyscallµÄÊýÖµ)|
          ->int 0x80|
            ->·µ»Ø|
  »ù±¾¹ý³ÌÈçÉÏËùʾ,ÄÇôÈç¹ûÎÒÃÇspoof(ÆÛÆ­)ÕâЩ´«µÝ²ÎÊýµÄ¼Ä´æÆ÷ÄØ?¼ÙÉèspoofÊdzɹ¦µÄ,
ÄÇôºÜÈÝÒ׾ͻá°ÑһЩ»µ±äÁ¿Öµ´«µÝµ½syscallµÄϵͳµ÷ÓÃ,½ô½Ó×ÅϵͳÄں˿ÉÄÜÔÚ½ÓÊÕµ½Ò»Ð©
»µÐÅÏ¢µÄʱºò,´¦Àí²»µ±,µ¼ÖÂϵͳ³öÏÖÒì³£»òÕßϵͳ·¢ÉúÒç³ö.µ±È»ÕâЩ½ö½öÊDz²â,±¾ÎĵĺÜ
¶àÄÚÈݶ¼ÊÇÔڲ²â,ÖÁÓÚ´ð°¸Âï,¿ÉÄÜÓÀÔ¶¶¼Ã»ÓÐ...:)
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  FreeBSDµÄsyscallµ÷ÓÃ:
28080D98: 31C0             XOR         EAX,EAX
28080D9A: 53               PUSH        EBX
28080D9B: E800000000       CALL        near32 ptr 28080da0
28080DA0: 5B               POP         EBX
28080DA1: 81C3AC980600     ADD         EBX,000698ac
28080DA7: 8B934C0A0000     MOV         EDX,dword ptr [EBX]+00000a4c
28080DAD: 8902             MOV         dword ptr [EDX],EAX
28080DAF: 5B               POP         EBX
28080DB0: 8D051A000000     LEA         EAX,dword ptr [0000001c]//system call number value
28080DB6: CD80             INT         80
28080DB8: 7201             JC          short ptr 28080dbb
28080DBA: C3               RETN  
´ÓÉÏÃæµÄ´úÂëÎÒÃÇÒ²¿ÉÒÔ¿´µ½ÕâÑùÒ»ÖÖÇé¿ö,ÕâÀïÎÒÃǼÙÉèµ÷ÓÃϵͳº¯ÊýwriteÀ´Ð´Êä³ö:)
  write(filehandle, buf, buf_length)
  Æä»ã±à´úÂëµÄº¯Êýµ÷ÓÃ,»ù±¾ÈçÏÂ:
  push buf_length
  push buf
  push filehandle
  call write
  È»ºó½øÈëµ½writeº¯Êýºó,ÎÒÃǾÍÖªµÀLinuxµÄsyscallµÄÒ»¸öÍêÕû¹ý³ÌÈçÏÂ:
  ¸ß¼¶ÓïÑÔµ÷ÓÃϵͳº¯Êý|
    ->jump syscall(¼´ÏµÍ³¶Ôϵͳº¯ÊýµÄ±êʶ)|
        ->mov eax,0x**(¼°ÉÏÃæwriteº¯ÊýÕë¶ÔsyscallµÄÊýÖµ)|
          ->int 0x80|
            ->·µ»Ø|
  ¸ù¾ÝÎҵĸú×Ù·ÖÎö,·¢ÏÖFreeBSDʹÓÃÁ˳ÌÐòÀïÃæµÄ²ÎÊý±äÁ¿,ÕâÑùµÄÇé¿ö¾ÍÊÇFreeBSDʡȥÁËÒ»¸ö¼Ä´æÆ÷µ÷ÓÃ
º¯Êý²ÎÊýµÄ¹ý³Ì,ÕâÑù¾Í½ûÖ¹ÁË¿ÉÄÜ´æÔÚspoof¼Ä´æÆ÷µÄÎÊÌâ,´ÓÕâµãÉÏÀ´¿´,FreeBSDµÄÈ·±ÈLinuxÒª°²È«ºÜ¶à.
------------------------------------------------------------------------------------------------
  ËäÈ»LinuxµÄÕâ¸ösyscall»áµ÷ÓüĴæÆ÷±£´æ²ÎÊýÖµ,¿ÉÄÜÓÐÆäºÃ´¦(×îÆðÂëÎҸоõ¿´´úÂëºÍ·ÖÎöһЩÄں˵Äʱ,
Êæ·þÁ˺ܶà:)),µ«ÊÇÈç¹ûÓÐЩ¸ßÈËÄܹ»spoof¼Ä´æÆ÷,ÄÇô¿ÉÄÜ»áÒýÆðһЩÂé·³,µ±È»ÕâÑùµÄÂé·³»¹ÐèÒªºÍÌØ¶¨µÄ
³ÌÐò¹Ò¹³,²»ÊÇ˵spoof¾Íspoof³É¹¦µÄ:)
  FreeBSDµÄ¾ÍÓÅÁ¼Á˺ܶà,ÎÒ²»µÃ²»Åå·þFreeBSDµÄÓŵã,¿ªÊ¼µÄʱºòÎÒÒ²¾­³£±»FreeBSDÕâÑùµÄµ÷Ó÷½Ê½¸ãµÄÍ·´ó
µÄÀ÷º¦,µ«ÊǾÍÕâô¿´°¡¿´µÄ,·´¶øÏ°¹ßÁË.ÔÚ֮ǰµÄʱºò,Ò»Ö±ÊÇÒ»¶Îʱ¼äLinux,Ò»¶Îʱ¼äBSD;Ö»ÓÐÔÚ×î½ü½»²æ¸ú
×ÙµÄʱºò,²Å·¢ÏÖÉÏÃæÕâ¸ö×Ô¼º¸Ð¾õ±È½ÏÓÐÒâ˼µÄÎÊÌâ:)

--]FreeBSDµÄ³ÌÐò±ÈLinuxµÄÔËÐÐËÙ¶È¿ì?
  Õâ¸öÎÊÌâºÜÄÑ˵,Èç¹û´ÓÉÏÃæµÄ´úÂëÀ´¿´µÄ»°,ÉÙÁËÕâô¶àµÄ»ã±à´úÂë,˵FreeBSD±ÈLinuxÂý¹À¼ÆË­¶¼²»»áÏàÐŵÄ.
µ±È»ÎÒûÓÐÕë¶ÔFreeBSDµÄϵͳ¼Ü¹¹ÓëLinuxµÄϵͳ¼Ü¹¹½øÐиüÉîÈëµÄ¶Ô±È·ÖÎö,ËùÒÔÒ²²»¸ÒÍ÷×ÔÏÂÈç´Ë²»ÇåÎúµÄ½á
ÂÛ:)Èç¹ûÄÇλÓÐÐËȤ,Äܲ»ÄÜÔÚÏàͬµÄÓ²¼þƽ̨ÏÂ,¶ÔÕâÁ©OS×öϲâÊÔ?
  ÔÙ¼ÌÐøÂÞàÂÒ»¸öÎÊÌâ,ËäÈ»FreeBSD±ÈLinuxÉÙÁËЩ»ã±à´úÂë,µ«ÊÇsyscallµÄ²ÎÊýFreeBSD¿Ï¶¨Ò²ÊÇ»ñÈ¡µÄ,Ö»²»¹ý
»ñÈ¡µÄ·½Ê½±ÈLinux¸üÖ±½ÓÁËһЩ:)

--]FreeBSDÓëLinuxµÄshellcode
  ÏÈ·Ï»°Ò»ÏÂ,˵µ½syscallÈç¹û²»ËµÐ©shellcodeµÄ¹ÊÊÂ,ºÃÏñµÄÈ·ÊÇÉÙÁËÄÇôһµãµãÊÂÇé...So,ÎÒÃÇÀ´¿´¿´FreeBSD
ÓëLinuxµÄshellcode.ÎÒÊéдÁËһЩ¼òµ¥µÄshellcode,¿´µ½ÍøÉÏºÜ¶à¹ØÓÚshellcodeµÄÖÐÎĽ̶̳¼ÊÇÄÃGDB²»¶Ïµ÷ÊÔ³ö
À´µÄ,¸Ð¾õºÃÂé·³:(¸öÈËÈÏΪ¼ÈÈ»ÊìϤGDBµ÷ÊÔ¼¼Êõ,¿Ï¶¨ÊìϤ»ã±à,Ò²¿Ï¶¨ÊìϤsyscall,²»ÊìϤÕÒÏÂÍ·Îļþ¿´¿´²»¾ÍµÃ
ÁË...ÓÚÊÇÎÒÒ»Ö±Óûã±àÀ´Ð´ÕâЩ¿É°®µÄshellcode,¸Õѧ»á¼¸Ìì,²»¶ÔµÄµØ·½´ó¼ÒÃ÷ʾ:)
  µ½µ×ÊÇÏÈ˵FreeBSDµÄshellcode,»¹ÊÇÏÈ˵LinuxµÄÄØ?ÎÒÄÃÓ²±ÒÅ×ÁËÏÂ,ÖÁÓÚΪʲôÅ×Ó²±Ò...À§ÁË...ÕÒµã´Ì¼¤×Ô¼º
Éñ¾­µÄ·½·¨:)).ºÃÁË,Ó²±ÒÅ×ÍêÁË,ÏÈ˵FreeBSDÏÂÃæµÄ.
±àÒë:nasm -f elf ***.asm
     ld -s -o *** ***.o
A: FreeBSDÏÂÃæµÄshellcode(hello.asm):
section .text
global _start
_start:
xor eax,eax
cdq
push 0x0a216472
push 0x6f57206f
push 0x6c6c6548
mov  ebx,esp
push byte 0xc
push ebx
push byte 0x1
push eax
mov  al,0x4
int  0x80
xor  eax,eax
push eax
mov  al,0x1
int  0x80
------------------------------------------------------------------------------------------------
  ÉÏÃæµÄµÄ»ã±à´úÂë¿ÉÒÔÖ±½Ó±àÒëÀ´»ñÈ¡shellcode,°´ÕÕÇ°ÃæËµµÄ±àÒë°ì·¨±àÒë,È»ºó:
objdump -D hello > hello.txt
°Ñ»ñµÃµÄ»úÆ÷Âëcopy³öÀ´¾ÍÊÇÒ»¸öfreebsdÏÂÃæµÄshellcodeÁË.
B: LinuxÏÂÃæµÄshellcode(hello.asm):
global _start
_start:
  xor  eax,eax
  jmp  short string
code:
  pop  esi
  push byte 15
  push esi
  push byte 1
  push eax
  int  0x80
  xor  eax,eax
  push eax
  push eax
  mov  al,1
  int  0x80
string:
  call code
  db   "Hello word!", 0x0a
------------------------------------------------------------------------------------------------
  ÉÏÃæµÄµÄ»ã±à´úÂë¿ÉÒÔÖ±½Ó±àÒëÀ´»ñÈ¡shellcode,°´ÕÕÇ°ÃæËµµÄ±àÒë°ì·¨±àÒë,È»ºó:
objdump -D hello > hello.txt
°Ñ»ñµÃµÄ»úÆ÷Âëcopy³öÀ´¾ÍÊÇÒ»¸ölinuxÏÂÃæµÄshellcodeÁË.
C: ΪʲôFreeBSDÓëLinuxÏÂÃæµÄshellcode²»Í¬?
  Õâ¸öÎÊÌâ,ÎÒÏëÁô¸ø´ó¼ÒÏÈ˼¿¼ÏÂ,È»ºóÔÙ¿´ÎÒµÄÏÂÎÄ.Èç¹ûÄã¿´ÁËÎÒµÄÏÂÎÄ»¹ÊDz»Á˽âµÄ»°...ÄÇô¿ÉÄܵÄÇé¿ö
ÊÇÄã¸ù±¾»¹²»»á»ã±àºÍUnixÀàÐ͵ıà³Ì...»¹ÓÐÒ»¸öÇé¿öÊÇ,ÄãÌ«±¿ÁË:(
  C-1: LinuxµÄsyscallµÄϵͳµ÷ÓÃÊÇÈçϵĹý³Ì:
  ¸ß¼¶ÓïÑÔµ÷ÓÃϵͳº¯Êý|
    ->jump syscall(¼´ÏµÍ³¶Ôϵͳº¯ÊýµÄ±êʶ)|
      ->°ÑsyscallµÄ²ÎÊý¸³¸ø¼Ä´æÆ÷|
        ->mov eax,0x**(¼°ÉÏÃæwriteº¯ÊýÕë¶ÔsyscallµÄÊýÖµ)|
          ->int 0x80|
            ->·µ»Ø|
  ÄÇô,ÎÒÃǵÄshellcodeÔÚpush²ÎÊýµÄʱºò,¾Í±È½ÏËæ±ãһЩÁË,ÒòΪÔÚºóÃæµÄϵͳ¼¶±ðµÄsyscallÓÖ¶Ô²ÎÊý½øÐÐÁ˶þ
´ÎµÄ¸³Öµ,¸³Öµ¸ø¸÷¸ö¼Ä´æÆ÷,È»ºó²Åµ÷ÓÃsyscall.
  C-2: FreeBSDµÄsyscallϵͳµ÷ÓÃÊÇÈçϵĹý³Ì:
  ¸ß¼¶ÓïÑÔµ÷ÓÃϵͳº¯Êý|
    ->jump syscall(¼´ÏµÍ³¶Ôϵͳº¯ÊýµÄ±êʶ)|
        ->mov eax,0x**(¼°ÉÏÃæwriteº¯ÊýÕë¶ÔsyscallµÄÊýÖµ)|
          ->int 0x80|
  ¿´µ½Ã»ÓÐ,»òÕßËµÇ°ÃæµÄÄÚÈݼÇÒäÆðÀ´Á˰É?freebsdµÄsyscallµ÷ÓÃÊÇÔÚ½øÈëϵͳsyscallǰ¾Ípush½øÀ´µÄ,ËùÒÔÎÒÃǵÄ
shellcode±ØÐëµÃ°Ñ²ÎÊýµÄÖµÏÈpush½øÀ´,¶ø²»ÊÇÏólinuxÄÇÑùµÄËæÒâ.

--]×ܽá
  Æäʵ,×îºóÕⲿ·Ö¹ØÓÚshellcodeµÄ²»Í¬Ö®´¦,ÕæÕýҪдµÄ»°,¹À¼Æ»¹µÃÕûÕûµÄһƪÄÚÈÝ.µ«ÊÇ...ÈËÊÇÌú·¹ÊǸÖ,Ò»¶Ù²»³Ô
¶öµÄ»Å.ÓÚÊÇ×¼±¸×öÏÂÌÓ±ø,ÏÈÈ¥Ìí±¥¶Ç×Ó,È»ºóÃÀÃÀµÄ˯һ¾õ.˳±ã×ö¸öÃÀÃÎ,ÔÚÃÎÖÐ,żµÄ"ÀÏ´ó"ÓÖ¿ªÊ¼ÆÛ¸ºÅ¼ÁË...