CreateProcessA²ÎÊýÐÍShellcodeµÄ±àÂëÎÊÌâÑо¿
Ðû²¼Ê±¼ä 2021-12-22¼òµ¥À´½²£¬¸Ã¿ØÖÆϵͳµÄ©¶´ÓÉÁ½¸ö·¨Ê½×é³É£ººËÐÄ·¨Ê½CoreProcessºÍ¸¨Öú·¨Ê½HelpProcess£¬ºËÐÄ·¨Ê½CoreProcessͨ¹ýϵͳº¯ÊýCreateProcessAÀ´Æô¶¯HelpProcess£¨Í¬Ê±Í¨±¨ÁËÏà¹Ø²ÎÊý£©¡£ÆäÖУ¬CoreProcessµÄ¼ò»¯´úÂëÈçÏ£º
ÏÔÈ»£¬HelpProcessµÄWinMainº¯Êý´æÔÚÒ»¸ö¾µäµÄÕ»Òç³ö©¶´¡£µ±lpCmdLineµÄÊý¾Ý³¤¶ÈÁè¼Ý400×Ö½Úʱ£¬¶ÔbuffµÄstrcpy²Ù×÷¾Í»á·¢ÉúÒç³ö£»µ±³¤¶ÈÁè¼Ý404×Ö½Úʱ£¬¾Í»áÁýÕÖµ½eipCallerNext£¬´Ó¶ø½Ù³ÖHelpProcessµÄ·¨Ê½¿ØÖÆÁ÷¡£
»ØËÝ´úÂë¿ÉÖª£¬lpCmdLineµÄÊý¾ÝÀ´Ô´ÊÇCoreProcessµÄCreateProcessAµ÷Óã¬ÇÒÊÇÓû§¿É¿ØµÄ¡£Òò´Ë£¬¸Ã©¶´µÄÀûÓÿ´ÆðÀ´ÊǼòµ¥µÄ£¬Ö»ÐèÒª¼ÆËãºÃeipCallerNextµÄÆ«ÒÆÁ¿²¢ÀûÓÃshellcodeÌî³äbuff¼´¿É¡£¸Ã©¶´µÄÀûÓÃÁ´ºÍ¶ÑÕ»½á¹¹ÈçÏÂËùʾ£º
ÔÚÀûÓùý³ÌÖУ¬½ÓÄɲâÊÔÌî³ä×Ö·û½øÐÐÒç³öʱ£¬eipCallerNextµÄÁýÕÖ×ÜÊÇÕýÈ·µÄ£»µ«½ÓÄÉmetasploitµÄshellcodeÀ´Òç³öʱ£¬eipCallerNextµÄÁýÕ־ͱäµÃ²»ÕýÈ·¡£¶ÔÊý¾Ý½øÐбÈÁ¦ºó·¢ÏÖ£¬shellcodeÔÚCoreProcessºÍHelpProcessÊÇ·×ÆçÑùµÄ£¬¼´shellcodeͨ±¨µ½HelpProcessºó·¢ÉúÁ˸ı䡣´ËÍ⣬ͨ¹ýʵÑémetasploitµÄ²îÒìshellcode£¬·¢ÏÖÕâÖָıäûÓÐÃ÷ÏԵĹæÂÉ¿ÉÑ¡£
Õë¶ÔÕâ¸öÎÊÌ⣬ADLabµÄÄþ¾²Ñо¿Ô±½øÐÐÁËÉîÈëµÄ·ÖÎö£¬ÅªÇåÁËCreateProcessA²ÎÊýͨ±¨µÄshellcodeµÄ±àÂëÎÊÌ⣬²¢¿ª·¢ÁË×Ô¶¯»¯´¦ÖÃÒªÁ죬´Ó¶ø¼æÈÝÈÎÒâshellcode¡£
CreateProcessAµÄ²ÎÊý´¦ÖÃ
Windows²Ù×÷ϵͳµÄÄÚºËÊÇÖ§³ÖÈ«ÇòÖÖÖÖÓïÑԵģ¬ÆäÌṩͳһµÄUnicode±àÂëÐÍÄÚºË̬API£»Õë¶Ô¾ßÌåµÄ¹ú¼Ò»òµØÓò£¬Windowsͨ¹ýÇøÓò±àÂëÀ´ÊµÏÖµ±µØÓïÑÔÖ§³Ö£¬¼´Ansi×Ö·û´®Ð͵ÄÓû§Ì¬API¡£ÕâЩÓû§Ì¬APIÔÚÄÚ²¿ÏÈ°ÑAnsi×Ö·û´®×ª»»ÎªUnicode×Ö·û´®£¬È»ºóÔÙµ÷ÓÃÄÚºË̬API£»Õâ¸öת»»¹ý³ÌÊÇ͸Ã÷µÄ£¬Óû§±àдµÄ·¨Ê½¶Ô´ËÎÞ¸ÐÖª¡£
ÔÚWindow²Ù×÷ϵͳÉÏ£¬1¸öUnicode×Ö·ûÓÉ2¸ö×Ö½Ú×é³É£¬1¸öAnsi×Ö·ûÓÉ1¸ö×Ö½Ú»ò2¸ö×Ö½Ú×é³É¡£µ±Ê××Ö½ÚµÄÖµÊÇ0µ½127ʱ£¬ËüÊÇ1¸öASCII×Ö·û£¬¶ÔÓ¦Unicode×Ö·ûµÄ2×Ö½ÚµÄÄÚÈݾÍÊǸÃASCII×Ö·û¼Ó1¸öÌî³ä×Ö·û0£»ÀýÈ磬Ansi×Ö·û¡±A¡±£¬Æä¶ÔÓ¦µÄUnicode×Ö·ûÊÇ¡±A\x00¡±¡£µ±Ê××Ö½ÚµÄÖµ´óÓÚ127ʱ£¬Ôòµ±Ç°×Ö½ÚºÍϸö×Ö½Ú×éºÏÆðÀ´ÊÇÒ»¸öÇøÓòÓïÑÔµÄ×Ö·û£¬ÇøÓòÓïÑÔ×Ö·û´æÔÚ¶ÔÓ¦µÄUnicode×Ö·ûÓ³Éä±í£»ÀýÈ磬¡±\xce\xd2¡±µÄ¡°\xce¡±²»ÊÇ1¸öºÏ·¨µÄASCII×Ö·û£¬ËüÖ»Äܺ͡°\xd2¡±ÁªºÏ×÷Ϊ1ÆäÖÐÎÄ×Ö·û¡°ÎÒ¡±£¬¶ÔÓ¦µÄUnicode×Ö·ûÊÇ¡±\x11\x62¡±¡£
ÈçÏÂËùʾ£¬CreateProcessA¾ÍÊÇÒ»¸öAnsi±àÂëÐ͵ÄÓû§Ì¬API£¬×Ö·û´®¡±AAAA¡±»á±»×Ô¶¯×ª»»ÎªUnicode×Ö·û´®²¢Í¨±¨¸øHelpProcess£¬È»ºóÔÚµ÷ÓÃWinMain֮ǰÓÖ±»×Ô¶¯»¹ÔΪAnsi×Ö·û´®¡£Òò´Ë£¬¶ÔÓÚAnsi×Ö·û´®¡±AAAA¡±£¬CoreProcessºÍHelpProcessÔÚ·¨Ê½¿ª·¢É϶¼ÎÞÐè×öÈκÎÌرðµÄ´¦Öá£
ͨ³£Çé¿öÏ£¬CreateProcessA²ÎÊýlpCmdlineµÄÀ´Ô´ÊÇ¿É¿¿µÄ£¬ºÃ±È±àÒëʱԤ½ç˵µÄ×Ö·û´®ºÍAPIµÄ·µ»ØÖµ£¬´ËʱlpCmdline¶¼ÊÇÕýÈ·µÄAnsi×Ö·û´®¡£Òò´Ë£¬CreateProcess¼¸ºõ×ÜÄÜÔÚUnicodeºÍAnsiÖ®¼ä×ÔÓɵØÕýȷת»»¡£
ʵ¼ÊÉÏ£¬¶ÔÓÚÈκÎÒ»ÃÅÇøÓòÓïÑÔ£¬ÆäAnsi×Ö·ûºÍUnicode×Ö·ûµÄÓ³É䶼²»ÊÇÒ»Ò»Ó³Éä¹Øϵ£»¼´ÔÚ2×Ö½ÚµÄÈ«²¿È¡Öµ¿Õ¼äÖУ¬Ansi×Ö·û±íµÄÓÐЧÏîÊý×ÜÊÇСÓÚUnicode×Ö·û±íµÄÓÐЧÏîÊý¡£ÕâÒâζ×Å£¬Õë¶ÔÎÞ·¨È·ÈÏÊÇÇøÓòÓïÑÔµÄ2¸ö×Ö½Ú£¬Èç¹ûÇ¿ÖÆÊÓ×÷Ansi×Ö·ûÔòת»»³ÉUnicode×Ö·ûºó·×Æ綨ÄÜ»¹ÔΪ³õʼµÄAnsi×Ö·û¡£ÀýÈ磺¡±\xeb\x2a¡±ÊÇÒ»ÌõͨÀýµÄjmp offsetÖ¸ÁËü²»ÊÇ1¸öºÏ·¨µÄÖÐÎÄ×Ö·û£»Èç¹ûÊÓ×÷Ansi×Ö·ûÇ¿ÖÆת»»ÎªUnicode×Ö·ûÔòÊÇ¡±\x3f\x00¡±£¬ÔÙ´Îת»»ÎªAnsi×Ö·û¼´ÊÇ¡±?¡±£¬¶ªÊ§ÁËjmp offsetÖ¸ÁîµÄÓïÒå¡£
Òò´Ë£¬Í¨¹ýCreateProcessAµÄcmdline²ÎÊý½øÐÐshellcodeͨ±¨£¬±ØÐëÒª¿¼ÂÇÇøÓòÓïÑÔµÄAnsi×Ö·ûºÍUnicode×Ö·ûÏ໥ת»»µÄÎÊÌâ¡£
ÔÚ±¾ÎĵÄ©¶´ÀûÓð¸ÀýÖУ¬µ±µØÓòÓòµÄÓïÑÔÊÇÖÐÎļòÌ壬¶ÔÓ¦Ansi±àÂë±íÊÇGBK¡£Òò´Ë£¬±ØÐëÒª¶ÔmetasploitµÄshellcode½øÐÐGBK±àÂ룬ȷ±£ÆäÊÇÕýÈ·µÄAnsi×Ö·û´®¡£
GBK±íµÄ±àÂëÔÚ2×Ö½ÚÈ¡Öµ¿Õ¼äµÄ·¶Î§ÊÇ8140£FEFE£¬¼´µÚ1×Ö½ÚµÄÈ¡Öµ·¶Î§ÊÇ0x81µ½0xFE£¬µÚ2×Ö½ÚµÄÈ¡ÖµÊÇ0x40µ½0xFE£¬ÈçÏÂËùʾ£º
´ËÍ⣬µÚ2×Ö½ÚµÄʵ¼ÊÓÐЧȡֵ»¹Óиü¶àÔ¼Êø¡£ºÃ±È£¬µÚ2×Ö½Ú²»ÄÜΪ0X7F¡£Õë¶ÔijЩȡֵµÄ×Ö½Ú£¬µÚ2×Ö½ÚµÄÈ¡Öµ±È[0x40, 0xFE]µÄ¿Õ¼ä¸üС¡£ÈçÏÂͼËùʾ£¬ÓеÄÖ»ÄÜÈ¡¸Ã¿Õ¼äµÄºó°ë²¿ÃÅ£¬ÓеÄÔòÖ»ÄÜÈ¡Ç°°ë²¿ÃÅ¡£
¶ÔÓÚshellcodeÀ´½²£¬Æäÿ¸ö×Ö½ÚµÄÈ¡ÖµÔÚ0µ½255Ö®¼ä¶¼ÊÇÍêÈ«ºÏ·¨µÄ¡£Òò´Ë£¬±¾ÎĵÄ©¶´ÀûÓÃҪʵÏÖshellcodeµÄËæÒâÌæ»»£¬±ØÐëÒªÓÐÒ»ÖÖÒªÁìÀ´¶ÔshellcodeÖÐÎ¥±³GBK±àÂëµÄ×Ö½Ú½øÐд¦Ö㬴ӶøÖÆÖ¹Ansi×Ö·ûºÍUnicode×Ö·û¼äת»»µ¼ÖµÄshellcode×Ö·û±»¸Ä±äµÄÎÊÌâ¡£Ò»¸ö»ù±¾µÄÒªÁìÊÇƾ¾ÝÈçϵÄÁ÷³Ì¶Ôshellcode½øÐд¦Öã¬ÆäÒªº¦ÊǶÔGBK±í½øÐвé±í²¢ÐÞÕý»ã±àÖ¸Áî¡£
ÒÔÈçϵÄshellcodeΪÀý£¬ÔÚɨÃèµ½×Ö½Ú0xEBʱ£¬·¢ÏÖÊÇ·ÇASCII×Ö·ûÇÒ²é±íGBK½á¹ûÊDz»´æÔÚ£¬ÐèÒª½øÐÐת»»£»²éѯGBK±íºó·¢ÏÖ£¬ÔÚ0xEB֮ǰ²åÈë0x90¿ÉÒÔʹµÃ90 EBÊÇÒ»¸öºÏ·¨µÄGBK×Ö·û£¬Í¬Ê±90EB 38ÓÖ²»¸Ä±äÔÀ´µÄ»ã±àÓïÒ壬ת»»Àֳɡ£Í¬Àí£¬¼ÌÐøɨÃèµ½ÏÂÒ»¸ö×Ö½Ú0XEBʱ£¬ÔÙ×öͬÑùµÄת»»¾Í¿ÉÒÔ¡£µ«ÊÇ£¬µÚ2´ÎµÄת»»²åÈëÁËеÄ×Ö½Ú0x90£¬µ¼ÖÂÁËÔʼlab1¶ÔÓ¦µÄÆ«ÒÆÁ¿·¢ÉúÁ˸ı䣻ÔʼlabµÄÖ¸Áîʵ¼ÊλÓÚתºóµÄlab+1λÖã¬Ê¹µÃµÚÒ»¸ö0XEBµÄÓïÒå·Ç·¨ÁË¡£Òò´Ë£¬×ª»»¹ý³Ì»¹ÒªÇó¸ú×ÙÖ¸ÁîÇø¿éµÄ³¤¶È±ä»¯¡£
³ýÁËÖ¸ÁîÇø¿éµÄ³¤¶È¸Ä±äÍ⣬»¹ÓÐÆäËü¼æÈÝÐÔÎÊÌâ¡£ºÃ±È£¬shellcodeÖÐÌØÊâÈ¡Öµ£¨µäÐÍÓÐ0£©µÄ×Ö½Ú´¦ÖÃÎÊÌ⣬¶ÔshellcodeµÄÄÚǶ²ÎÊýÐÞ¸ÄÎÊÌâµÈ¡£Òò´Ë£¬¾¡¹Ü²é±íת»»ÊÇ×î»ù´¡µÄ´ëÊ©£¬µ«È«±í²éѯµÄ¿Õ¼ä´ó£¬ÏÞÖÆÁËshellcodeµÄÁé»îÐÔ¡£ÎªÁ˽â¾ö¸ÃÎÊÌ⣬ADLabµÄÄþ¾²Ñо¿Ô±Ìá³öÁËÒ»ÖÖ»ùÓÚ¼ÆËãµÄshellcode±àÂëÒªÁì¡£
Shellcode¼ÆËãת»»
Ê×ÏÈ£¬ÎÒÃÇ°Ñshellcode·ÖΪÁ½²¿ÃÅ£ºÍ·²¿µÄÀιÌdecoderºÍβ²¿µÄ¶à±äpayload¡£È»ºó£¬½ÓÄɲé±í·½Ê½½øÐÐÊÖ¹¤±àдÇкÏGBK±àÂëµÄ»ã±à´úÂë¡£ÆäÖУ¬decoderµÄ³¤¶ÈºÜÓÐÏÞ£¬¾ö¶¨ÁËÕâ¸ö±àдµÄ´ú¼Û²»´ó£»Í¬Ê±£¬¶à±äpayloadÊÇûÓÐÌرðÏÞÖƵģ¬Í¨¹ý±àд¶ÔÓ¦µÄencoderÀ´±àÂëpayloadʹÆ䲻Υ·´GBK±àÂ룬ÓÖ¿ÉÒÔ±»decoder»¹Ô¡£Í¨¹ýÕâÖÖ·½Ê½£¬¶ÔÔʼshellcodeµÄÑ¡ÔñºÍ¸Ä±ä¾ÍÍêÈ«²»ÓÃÌåÌùGBK±àÂëÎÊÌ⣬ʹµÃ¸Ã©¶´µÄÀûÓÃÔ½·¢¸»ºñ¡£
ΪÁ˼õÉÙdecoderµÄÌå»ý£¬ÎÒÃÇÉè¼ÆÁËÒ»ÖÖ¼ÆËãÒªÁìÀ´±àÂëºÍ½âÂ룬ÕâÑù¾Í²»ÐèÒª´æ´¢GBK×Ö·û±í»òÕßÅÓ´óµÄ¹æÔò¡£Ôʼshellcode±àÂëʱµÄ¼ÆËã¹æÔòÈçÏ£º
Óöµ½×Ö½ÚÊÇASCII¡¢0x80ºÍ0xff£¬Ö±½Ó±£Áô¡£
Óöµ½×Ö½ÚÊÇ\x00£¬×ª»»³É¼Ó·¨ÔËËã·û\x90ºÍ2¸ö¼ÆËãÊý·û\x80ºÍ\x80¡£
Óöµ½×Ö½ÚÊÇ\x90£¬×ª»»³É¼Ó·¨ÔËËã·û\x90ºÍ2¸ö¼ÆËãÊý·û\x48ºÍ\x48¡£
Óöµ½2¸ö×Ö½Ú¿ÉÒÔת»»Îªunicode×Ö·û£¬Ö±½Ó±£ÁôÕâ2¸ö×Ö½Ú¡£
Óöµ½Ç°Ã涼²»ÄÜ´¦ÖõÄ×Ö½Ú£¬Ö±½Óת»»³É¼Ó·¨ÔËËã·û\x90ºÍ2¸ö¼ÆËãÊý·û£¬µÚ1¸öÊÇ\x80£¬µÚ2¸öÊDzîÖµ¡£
½ÓÄÉÉÏÊöµÄ±àÂëÒªÁìºó£¬ÈκÎshellcode¶¼¿ÉÒÔ±»×ª»»ÎªºÏ·¨GBK×Ö·û´®£¬¶øÇÒdecoder¶ÔpayloadµÄ½âÂë¼ÆËãҲʮ·Ö¼òµ¥£¬Ö»ÐèÒªÈçϵÄ1Ìõ¹æÔò£º
Óöµ½×Ö·ûÊÇ\x90£¬Ö±½Ó¶Ôºó2¸ö×Ö·û½øÐмӷ¨¼ÆË㣬²¢Óýá¹ûÌæ»»×Ö·û\x90¡£
ÖÁ´Ë£¬CreateProcessA²ÎÊýͨ±¨µÄshellcodeµÄ±àÂëÎÊÌâ¾ÍÈ«²¿±»Ô¼ÊøÔÚÁËÖ»ÓÐÒ»Ìõ¹æÔòµÄdecoder´úÂëÖУ¬ºÜÏÔÈ»ÕâÊÇÒ»¸ö½çÏÞÊ®Ã÷°×È·µÄ¾Ö²¿ÎÊÌ⣬Òò´ËºÜÈÝÒ׾ͽâ¾öÁË¡£½ÓÄÉÕâÖÖÒªÁ죬±¾ÎĵÄ©¶´ÀûÓÿÉÒÔËæÒâµ÷ÓÃmetasploitÖеÄshellcode£¬ÎÞÐèÔÙµ£ÓÇËüÃǵÄÖ¸ÁîÄÚ²¿Ï¸½Ú¡£
ÔÚ¶àÓïÑÔ»·¾³Ï£¬shellcodeÈç¹û²»ÊÇÖ±½ÓµÄÄÚ´æͨ±¨£¬Ôò¿ÉÄܻᱻϵͳAPIº¯ÊýËùת»»£¬´Ó¶øµ¼ÖÂÆäÒòÔÚ»ñµÃÖ´ÐÐȨ֮ǰ·¢ÉúÄÚÈݸıä¶øÎÞЧ¡£Òò´Ë£¬ÔÚ©¶´ÀûÓùý³ÌÖУ¬ÐèҪעÒâshellcodeÊÇ·ñÊܵ½¶àÓïÑÔ°æ±¾µÄAPIÓ°Ïì¡£