-------------------------------- 6th HUST hacking festival race condition report hkpco hkpco@korea.com -------------------------------- HUST2007 hacking festivalÀÇ ·¹À̽º ÄÁµð¼Ç º¸°í¼­ ÀÔ´Ï´Ù. ÀÛ¾÷ ±â·ÏµéÀ» °ÅÀÇ ·Î±ëÇØ µÎÁö ¾Ê¾Æ »ó¼¼ÇÑ º¸¿©ÁÖ±â´Â Èûµé °Í °°½À´Ï´Ù. ¿ì¼± ·ÎÄ÷ΠÁ¢¼ÓÇÏ¿© setuid°¡ °É¸° ÇÁ·Î±×·¥À» ã½À´Ï´Ù. ¿ì¸®°¡ °ø°ÝÇØ¾ß ÇÒ ´ë»ó ÇÁ·Î±×·¥Àº /bin/flyHigh ÀÌ µÇ°Ú½À´Ï´Ù. ÀÌ ÇÁ·Î±×·¥ÀÇ strings°á°ú¸¦ º¸¸é ÆÄÀÏÀ» ¿­°í(openÇÔ¼ö), ±â·ÏÇÑ µÚ(write), »èÁ¦(unlink)ÇÏ´Â Á¤µµÀÇ ·çƾÀ» ¼öÇàÇÕ´Ï´Ù. »ý¼ºÇÏ´Â ÆÄÀÏÀÇ À̸§Àº /quest/level5/tmp/HUST À̸ç ÀÌ ÆÄÀÏÀÌ »ý¼ºµÇ´Â ªÀº ¼ø°£¿¡ ³»¿ëÀ» ÀÐÀ¸·Á°í ½ÃµµÇÏÁö¸¸ ÆÄÀÏ¿¡ Àб⠱ÇÇÑÀÌ ¾øÀ¸¹Ç·Î ±×·¯Áö ¸øÇÕ´Ï´Ù. ¿ì¸®´Â ¿©±â¼­ /quest/level5/tmp/HUST °¡ »ý¼º, ±â·Ï, »èÁ¦ µÇ´Â ªÀº ¼ø°£ÀÇ ½Ã°£Â÷¸¦ ÀÌ¿ëÇÏ¿© race condition°ø°ÝÀ» »ý°¢ ÇÒ ¼ö ÀÖ½À´Ï´Ù. /bin/flyHigh¸¦ ½ÇÇàÇÏ¿´À» ¶§, /quest/level5/tmp/HUST ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇϸé ÆÄÀÏÀÇ »èÁ¦¸¦ ÇÏÁö ¾Ê´Â°ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. À̸¦ ÀÌ¿ëÇϸé "´Ù¸¥ »ç¿ëÀÚ ±ÇÇÑÀ¸·Î »ý¼ºµÇ´Â Àбâ±ÇÇÑÀÌ ¾ø´Â ÆÄÀÏ"ÀÌ ¾Æ´Ñ "³»°¡ »ý¼ºÇÑ Àб⠰¡´ÉÇÑ ÆÄÀÏ"¿¡ ±â·ÏÀÌ µÇ°Ô µË´Ï´Ù. ±× ±â·ÏµÇ´Â ³»¿ëÀº ¹Ù·Î ÀÌ ¹®Á¦ÀÇ ´äÀÏ°ÍÀ̸ç ÀÌ°ÍÀ» Àоî¾ß ÇÕ´Ï´Ù. ÇÏÁö¸¸ ¹Ù·Î unlink(»èÁ¦)°¡ µÇ¹Ç·Î ÆÄÀÏÀÌ ±â·ÏµÇ°í »èÁ¦µÇ´Â »çÀÌÀÇ ½Ã°£Â÷¸¦ ÀÌ¿ëÇÕ´Ï´Ù. °£´ÜÈ÷ ³ªÅ¸³»¾î º¸¸é ¾Æ·¡¿Í °°½À´Ï´Ù. |write(±â·Ï)|..¾ÆÁÖ ÂªÀº ½Ã°£..|unlink(»èÁ¦)| ÇÑÂÊ Å͹̳ο¡¼­´Â /bin/flyHigh¸¦ ½ÇÇàÀ», ´Ù¸¥ ÇÑÂÊ Å͹̳ο¡¼­´Â /quest/level5/tmp/HUSTÀÇ »ý¼º°ú ÀбâÀÛ¾÷À» ¹«ÇÑÈ÷ ¼öÇàÇÏ¸é µÉ°ÍÀÔ´Ï´Ù. ±×·±µ¥ ¼­¹ö³»ÀÇ gcc³ª catµîÀÇ ¸í·É¾î°¡ Çã¿ëµÇÁö ¾ÊÀ¸¹Ç·Î ½© ½ºÅ©¸³Æ®¿Í head¸í·É¾î·Î ´ëüÇÕ´Ï´Ù. ÀÛ¼ºµÈ ½© ½ºÅ©¸³Æ®µéÀº ¾Æ·¡¿Í °°½À´Ï´Ù. - loop_target.sh - #!/bin/sh for((;;)) do /bin/flyHigh done - end - loop_target.shÀÇ °æ¿ì /bin/flyHigh¸¦ ¹«ÇÑÈ÷ ½ÇÇà½ÃÅ°´Â °£´ÜÇÑ ½ºÅ©¸³Æ®ÀÔ´Ï´Ù. ¾Æ·¡¿¡¼­ race_rush.shÀÇ ÀÛ¾÷À» ¾Ë¾Æº¸°Ú½À´Ï´Ù. - race_rush.sh - #!/bin/sh for((;;)) do echo "hkpco" >> /quest/level5/tmp/HUST;head /quest/level5/tmp/HUST;head /quest/level5/tmp/HUST;usleep 10000 done - end - "hkpco"¶ó´Â ³»¿ëÀÌ ´ã±ä /quest/level5/tmp/HUST ÆÄÀÏÀ» »ý¼ºÇÏ°í head¸í·É¾î·Î /quest/level5/tmp/HUST ÆÄÀÏÀ» ÀоîÁÝ´Ï´Ù. /bin/flyHighÀÇ ½Ã°£Â÷¸¦ °í·ÁÇÏ¿© head¸í·ÉÀ» µÎ ¹ø ¼öÇà½ÃÄÑ ÁÝ´Ï´Ù. ÀÌ ÀÛ¾÷ÀÌ ¹«ÇÑÈ÷ ¹Ýº¹µÇ±â ¶§¹®¿¡ ÀÚÄ© ´äÀÌ ÅÍ¹Ì³Î»ó¿¡ Ãâ·ÂµÈ´Ù°í ÇÏ¿©µµ º¸±â°¡ Èûµé¾î Áú ¼ö ÀÖ½À´Ï´Ù. ±×·¡¼­ usleep¸í·ÉÀ» ÀÌ¿ëÇؼ­ ¹Ýº¹µÇ´Â ÀÛ¾÷¿¡ µô·¹À̸¦ ÁÝ´Ï´Ù. ÇØ´ç ¼­¹ö¿¡¼­´Â chmod¸í·ÉÀÇ Æ۹̼ÇÀÌ ¸·ÇôÀÖÀ¸¹Ç·Î "/bin/sh ½ºÅ©¸³Æ®.sh"¿Í °°ÀÌ ½© ½ºÅ©¸³Æ®¸¦ ½ÇÇà½Ãŵ´Ï´Ù. ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÕ´Ï´Ù. [terminal 1] $ sh loop_target.sh [terminal 2] $ sh race_rush.sh [terminal 2]¿¡¼­ Àá½Ã ±â´Ù¸®¸é "PracTicE mAkeS PerFeCtsibar" ¶ó´Â ´äÀÌ Ãâ·ÂµË´Ï´Ù.