PWNS 200 ¹®Á¦ÀÇ ¹ÙÀ̳ʸ®´Â Mach-O ŸÀÔ, MacOS °ü·ÃÀ̶ó´Â °ÍÀ» ÆÄ¾ÇÇÒ ¼ö ÀÖ½À´Ï´Ù. MacOS¿¡ ´ëÇÑ °æÇèÀº ¾ø¾úÁö¸¸ Á¤º¸¸¦ Á¶»çÇÑ ¹Ù·Î´Â x86 MacOSÀ̱⠶§¹®¿¡ ±âÁ¸ x86¿ë ½©Äڵ带 »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë°Ô µÇ¾ú½À´Ï´Ù. ¾î¼Àºí¸®¸¦ ºÐ¼®ÇÏ¸é Æ¯º°ÇÑ trapÀÌ ¾ø´Â ÀϹÝÀûÀÎ buffer overflow¶ó´Â °ÍÀ» È®ÀÎÇÒ ¼ö Àִµ¥, ¹®Á¦´Â MacOSÀ̱⠶§¹®¿¡ Return Address¸¦ ¾îµð·Î ÁöÁ¤ÇÒ °ÍÀ̳Ŀ¡ ÀÖ½À´Ï´Ù. ÇØ´ç OS¸¦ ¼³Ä¡ÇÏÁö ¾ÊÀº »óÅ¿´°í À̹ÌÁö¸¦ ±¸Çϱ⵵ ½Ã°£»ó ¿©À¯°¡ ¾ø¾ú±â ¶§¹®¿¡ ¿ì¼± ¾î¼Àºí¸®¸¦ ¿ÏÀüÈ÷ ºÐ¼®Çϱâ·Î °áÁ¤ÇÏ¿´½À´Ï´Ù. ¾î¼Àºí¸®¸¦ ºÐ¼®ÇÏ´Ùº¸´Ï Ãë¾à¼ºÀÌ ¹ß»ýÇÏ´Â ºÎºÐ¿¡¼­ ÀԷ¹޴ Buffer°¡ Position Independent Code¶ó´Â °ÍÀ» ¾Ë°Ô µÇ¾ú°í ÇØ´ç BufferÀÇ ÁÖ¼Ò¸¦ ¾Ë¾Æº¸´Ï 0x2020 ¿µ¿ªÀ̾ú½À´Ï´Ù. ´Ù½Ã ¸»Çϸé ÀÌ ¹®Á¦´Â MacOSÀ̱ä ÇÏÁö¸¸ Stack ÁÖ¼Ò¸¦ ¾Ë¾Æº¼ Çʿ䵵 ¾øÀÌ 0x2020À» ÁöÁ¤Çϸé ÀÌ ¹®Á¦´Â ½±°Ô ÇØ°áµÉ ¼ö ÀÖ´Â ¹®Á¦ ¿´´ø °ÍÀÔ´Ï´Ù. ---pseoudo code--- main() { shellcode='¸®¹ö½º½©ÄÚµå'; connect('¹®Á¦¼­¹ö', '¹®Á¦Æ÷Æ®'); data = shellcode + ('x'*(268-strlen(shellcode)-strlen('Steve jobs loves you too ')) + 0x2020); send(data) } Potent Pwnables200 key: one more thing...