ÎÄÕ·ÖÀà |
¼òÎö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µÄ²»Í¬Ö®´¦,ÕæÕýҪдµÄ»°,¹À¼Æ»¹µÃÕûÕûµÄһƪÄÚÈÝ.µ«ÊÇ...ÈËÊÇÌú·¹ÊǸÖ,Ò»¶Ù²»³Ô ¶öµÄ»Å.ÓÚÊÇ×¼±¸×öÏÂÌÓ±ø,ÏÈÈ¥Ìí±¥¶Ç×Ó,È»ºóÃÀÃÀµÄ˯һ¾õ.˳±ã×ö¸öÃÀÃÎ,ÔÚÃÎÖÐ,żµÄ"ÀÏ´ó"ÓÖ¿ªÊ¼ÆÛ¸ºÅ¼ÁË... |