ã¯ããã«
ãã®èšäºã§ã¯ãFTPãããã³ã«ã«é¢é£ãããã¹ãŠã®RFCãæ¹å®ãããšããç®æšãèšå®ããŠããŸãããããã®äžã«ã¯ããã«å€ãã®æ å ±ããããŸããFTPãããã³ã«ãšãã¯ã©ã€ã¢ã³ããããããæäœããããã®åºæ¬çãªãã¯ããã¯ã«ã€ããŠãäžè¬çãªçšèªã§çŽ¹ä»ããã ãã§ãã
FTPã®æŠèŠ
ãããã£ãŠãFTPïŒãã¡ã€ã«è»¢éãããã³ã«ïŒã¯TCP / IPãããã¯ãŒã¯ã®ãã¡ã€ã«è»¢éãããã³ã«ã§ãã ãã®ãããã³ã«ã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ãã¡ã€ã«è»¢éã¢ã«ãŽãªãºã ã®ããã°ã©ãã³ã°ã容æã«ããæšæºåããããã«ç¹å¥ã«äœæãããŸããã ãã¹ãŠã®é«ã¬ãã«ãããã³ã«ãšåæ§ã«ãããŒã¿ãçŽæ¥éä¿¡ããããšã¯ãããŸããïŒããã¯äœã¬ãã«ãããã³ã«-TCPãããã³ä»¥äžã®ãããã³ã«ã«ãã£ãŠè¡ãããŸãïŒãããéä¿¡ãã¯ã©ã€ã¢ã³ããµãŒããŒã®æ¹æ³ã®ã¿ã説æããŸãã
ãããã³ã«ã®èª¬æã«çŽæ¥é²ã¿ãŸãã ãã®ç¹åŸŽçãªæ©èœã¯ããµãŒããŒãšã¯ã©ã€ã¢ã³ãéã®2ã€ã®æ¥ç¶ã®äœ¿çšã§ãã 1ã€ã®æ¥ç¶ïŒã³ãã³ããŸãã¯ã³ã³ãããŒã«ïŒã䜿çšããŠããµãŒããŒã«ã³ãã³ããéä¿¡ãããããã®ã³ãã³ãã«å¯Ÿããå¿çãåä¿¡ããŸãã 2çªç®ã®æ¥ç¶ïŒããŒã¿æ¥ç¶ïŒã¯ãããŒã¿ã®éåä¿¡ã«çŽæ¥äœ¿çšãããŸãã å¶åŸ¡æ¥ç¶ã¯åžžã«ã¯ã©ã€ã¢ã³ããããµãŒããŒããŒã21ã«çºçããã»ãã·ã§ã³å šäœãéããŠéãããŸãŸã«ãªããŸãã ããŒã¿æ¥ç¶ã¯ãããŒã¿ãåä¿¡ãŸãã¯åä¿¡ããããã«å¿ èŠã«å¿ããŠéãããéãããããŸãã
å¶åŸ¡æ¥ç¶ã確ç«ãããåŸãã¯ã©ã€ã¢ã³ãã¯ãããä»ããŠãµãŒããŒã«ããŸããŸãªã³ãã³ããéä¿¡ã§ããŸãã åã³ãã³ãã¯3ã€ãŸãã¯4ã€ã®å€§æåã®ASCIIæåã§æ§æããããã®åŸã«1ã€ä»¥äžã®ã¹ããŒã¹ãç¶ããŸããäžéšã®ã³ãã³ãã«ã¯ãªãã·ã§ã³ã®åŒæ°ããããŸãã ã³ãã³ãã¯CRãLFã®ãã¢ã§çµäºããŸã-ããã¯ééããªããã¹ãŠã®0dhã0ahã«ç¥ãããŠããŸã-DOS / Windowsã®å Žåã§ãã äžè¬çã«ãã³ãã³ãã¹ããŒã ã¯æ¬¡ã®ãšããã§ãã
ã³ãã³ã[åŒæ°ïŒsïŒ] CRãLFã
åèšã§ããµãŒããŒã«éä¿¡ã§ããã³ãã³ãïŒRFC959-33ïŒã¯30ãè¶ ããŠããŸãããããã¯ãµãŒããŒãããããã¹ãŠããµããŒããããšããæå³ã§ã¯ãããŸããã æãé »ç¹ã«äœ¿çšãããã³ãã³ãã®äŸã瀺ããŸãã
ãŠãŒã¶ãŒå
ãŠãŒã¶ãŒåãæå®ããŸã
ãã¹ã¯ãŒããæž¡ã
ãŠãŒã¶ãŒã®ãã¹ã¯ãŒããæå®ããŸã
LISTãã¡ã€ã«ãªã¹ã
ãã¡ã€ã«ãªã¹ããªã¯ãšã¹ã
ããŒãn1ãn2ãn3ãn4ãn5ãn6
ããŒã¿æ¥ç¶çšã®IPãšããŒããæå®ãã
RETRãã¡ã€ã«å
ãµãŒããŒãããã¡ã€ã«ãååŸãã
STORãã¡ã€ã«å
ãµãŒããŒã«ãã¡ã€ã«ã眮ã
TYPEã¿ã€ã
éä¿¡ãããããŒã¿ã®ã¿ã€ã
ãããŠ
ãµãŒããŒããåæãã
ã¢ããŒ
åã®ã³ãã³ãããã£ã³ã»ã«ããŸãã ããŒã¿è»¢éã®çµäºã
èŠæ±ãåä¿¡ãããšããµãŒããŒã¯åãå¶åŸ¡æ¥ç¶ãä»ããŠå¿çãéä¿¡ããŸãã ãµãŒããŒå¿çã¯ãASCII圢åŒã®3æåïŒæ°åïŒã§æ§æããããã®åŸã«ãªãã·ã§ã³ã®ããã¹ããç¶ããéåžžã¯æ°åã®å¿çã³ãŒãã説æãããã®åŸã«å€æŽãããŠããªãCRãLFãç¶ããŸãã ããšãã°ãçãã¯æ¬¡ã®ãšããã§ãã226 File send OKã -ãã®äŸã§ã¯ããµãŒããŒã¯ããã¡ã€ã«ããã®åŽããéä¿¡ãããããšã瀺ããŠããŸãïŒããã¯ãã¯ã©ã€ã¢ã³ããããã§ã«åä¿¡ãããŠãããšããæå³ã§ã¯ãããŸããïŒã ãµãŒããŒã®å¿çã®1æ¡ç®ãæãéèŠã§ãããã³ãã³ããã©ã®ããã«å®è¡ãããïŒãŸãã¯å€±æããïŒããæ確ã«ç€ºããŠããŸãã å€ã¯æ¬¡ã®ãšããã§ãã
- 1xxã³ãã³ãã¯å®è¡äžã§ãã次ã®ã³ãã³ããçºè¡ããåã«å¥ã®ã¡ãã»ãŒãžãåŸ ã€å¿ èŠããããŸãã
- 2xxããŒã ãå®äºããŸããã ãµãŒããŒã¯æ¬¡ã®ãµãŒããŒãåŸ ã£ãŠããŸãã
- 3xxã³ãã³ãã¯å®äºããŸããããç¶è¡ããã«ã¯ãã1ã€ã®ã³ãã³ããå¿ èŠã§ã
- 4xxã³ãã³ãã¯å®äºããŸããã§ãããåŸ æ©ããŠã³ãã³ããç¹°ãè¿ãå¿ èŠããããŸã
- 5xxã³ãã³ãã¯å®è¡ãããŠããããç¹°ãè¿ãå®è¡ããŠãå®è¡ãããŸããã
å¿çã®2æ¡ç®ã§ã¯ãã©ã®ç¶æ³ãå¿çã«ã€ãªãã£ãããå€æã§ããŸãã
- x0xæ§æãšã©ãŒã
- x1xæ å ±ã
- x2xå¿çã¯ããããŒãžã£ãŒãŸãã¯ããŒã¿æ¥ç¶ã®ç¶æ ãæããŸãã
- x3xå¿çã¯ããŠãŒã¶ãŒèªèšŒãŸãã¯äºç®ã¹ããŒã¿ã¹ãæããŸãã
- x4xééããããŸããã
- x5xå¿çã¯ããã¡ã€ã«ã·ã¹ãã ã®ç¶æ ãæããŸãã
æåŸã«ãå¿çã®3æ¡ç®ã«è¿œå æ å ±ãå«ãŸããŸãã
ãµãŒããŒã¯1ã€ã®å¿çã§ã»ãšãã©ã®ã³ãã³ãã«å¿çããŸããããµãŒããŒãããã€ãã®å¿çãçæããããã«åºã䜿çšãããŠããã³ãã³ãããããšããäºå®ã«ç¹ã«æ³šæãæãå¿ èŠããããŸãã ãã®å Žåãæåã®å¿çã®æåã®æ°åã¯ã1ããã€ãŸã äžèšã®è¡šãèŠããšããµãŒããŒã¯ã次ã®ã³ãã³ããéä¿¡ããåã«ããµãŒããŒããã®å¥ã®ã¡ãã»ãŒãžãåŸ ã€å¿ èŠãããããšãäŒããŸãã ãã®ãããªã³ãã³ãã®äŸã¯RETRã³ãã³ãã§ãããµãŒããŒããããåä¿¡ããããŒã¿ã®éä¿¡ãéå§ãããšãã150 HIDE.ASMã®BINARYã¢ãŒãããŒã¿æ¥ç¶ãéãïŒ958ãã€ãïŒããªã©ã®ã¡ãã»ãŒãžãè¿ããŸããã¡ãã»ãŒãžã®æå³ã¯ãããŒã¿è»¢éãéå§ãããŸããã ãã 次ã«ãããŒã¿ãæ¢ã«éä¿¡ãããŠããå ŽåïŒãã ããã¯ã©ã€ã¢ã³ãããããåä¿¡ãããšããäºå®ã§ã¯ãªãã泚æãæãããïŒã圌ã¯å¶åŸ¡æ¥ç¶ãä»ããŠå¥ã®å¿çã226 File send OKããéä¿¡ããŸãã ããã¡ã€ã«ãéä¿¡ãããŸãããã ãã ãããã®å Žåã2çªç®ã®ã¡ãã»ãŒãžãåä¿¡ããåŸã«ã®ã¿ããµãŒããŒã¯æ¬¡ã®ã³ãã³ããå®è¡ããæºåãã§ããŸãã æåŸã®ã¡ãã»ãŒãžã®ä»£ããã«ãã4ãã§å§ãŸããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããå ŽåããããŸã-ãã¡ã€ã«è»¢éã«åé¡ãããå Žåã
äžè¬çã«èšãã°ãããã¯å¶åŸ¡æ¥ç¶ã«é¢ãããã®ã§ãã
次ã«ãããŒã¿æ¥ç¶ã«ã€ããŠèª¬æããŸãã åè¿°ã®ããã«ãããŒã¿æ¥ç¶ã¯å¿ èŠã«å¿ããŠç·šæãããããŒã¿ã®éä¿¡ãŸãã¯åä¿¡åŸã«æ¯åéããŸãã ããã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ããŒã¿è»¢éã¢ãŒããã¹ããªãŒãã³ã°ã§ããããã®ã¢ãŒãã§ã¯ããŒã¿è»¢éã®çµãããæ¥ç¶ãéããããã§ãã äžèšããã1ã€ã®éèŠãªçµè«ãåºãå¿ èŠããããŸããæ¥ç¶ãéããããšã§ããµãŒããŒããã®ããŒã¿è»¢éã®çµäºãå€æã§ããŸãã
éåžžãããŒã¿æ¥ç¶ã¯æ¬¡ã®ããã«éãããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ããã¹ãäžã®ç©ºãããŒããéžæãããã®ããŒãã§ããã·ããªãŒãã³ãå®è¡ããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ãå¶åŸ¡æ¥ç¶ãä»ããŠãµãŒããŒã«ãIPã¢ãã¬ã¹ãšãããã·ããªãŒããã³ã°ãè¡ã£ãããŒãçªå·ãäŒããŸãã
- ããŒããšIPã¢ãã¬ã¹ãåä¿¡ãããšããµãŒããŒã¯ãããã¢ã¯ãã£ãã«éããŸãã
- ããŒã¿ãéä¿¡ãŸãã¯åä¿¡ãããŸãã
- 誰ãããŒã¿ãéä¿¡ãã誰ãããŒã¿ãåä¿¡ãããã«å¿ããŠãããŒãã¯éããããŸãã
å°ããªäœè«ïŒ2çªç®ã®æ®µèœã泚ææ·±ãèªãã å ŽåãããµãŒããŒã«ãããŒã®ã¢ãã¬ã¹ãšããŒããäžãããšã©ããªããŸããïŒããšããçåãçãããããããŸããã çãã¯ãããŸãã§ããµãŒããŒã¯IPã¢ãã¬ã¹ããã§ãã¯ã§ããŸãããããã¯åžžã«çºçããããã§ã¯ãªãããããããŒã¢ãã¬ã¹ã䜿çšããèå³æ·±ãããã©ãã«ããããã€ããããŸãã
ã¯ã©ã€ã¢ã³ããããŒã¿æ¥ç¶çšã«éžæããããŒãã«ã€ããŠã éåžžãåçã«å²ãåœãŠãããOSããŒãã䜿çšãããŸãã ã·ã¹ãã ã«èŠæ±ãè¡ãããæåã®ç¡æã®èŠæ±ãäžããããŸãã ã¯ã©ã€ã¢ã³ãããµãŒããŒãžã®æ¥ç¶çšã®ããŒããæå®ããªãå Žåãå¶åŸ¡æ¥ç¶ãè¡ãããããŒãã§çºçããŸãïŒããã¯æšå¥šãããŸããïŒã ãµãŒããŒã¯åžžã«ããŒã20ããããŒã¿ãæ¥ç¶ããŸãã
ããããã¹ãŠãããŒã¿æ¥ç¶ã«ã€ããŠã話ããããã£ãäž»ãªããšã§ãã
äž¡æ¹ã®æ¥ç¶ããªããã©ã®ããã«æ©èœããããããã£ãã®ã§ããã1ç¹æ³šæããŠãããŸãïŒæåã®èªã¿ã¯ã¹ãããã§ããŸãïŒã LISTã³ãã³ãã¯ãçŸåšã®ãã£ã¬ã¯ããªå ã®ãã¡ã€ã«ã®ãªã¹ããè¿ããããŒã¿æ¥ç¶ããšã«è¿ããŸãã ãªã¹ãã¯ãCRãLFã®æåã§çµããASCIIæååã®ã»ããã§ãã åè¡ã«ã¯ãèŠæ±ãããã«ã¿ãã°ã®èŠçŽ ã®1ã€ã«é¢ããæ å ±ãå«ãŸããŠããŸãã ãã®è¡ã®äžè¬çãªãã¿ãŒã³ã¯æ¬¡ã®ãšããã§ãã
Txxxxxxxxx [] uk []ãŠãŒã¶ãŒ[]ã°ã«ãŒã[]ãµã€ãº[] mm [] dd [] yytt []ååCRãLF
ã©ãã§
T-èŠçŽ ã®ã¿ã€ãïŒãdã-ãã£ã¬ã¯ããªãã-ã-ãã¡ã€ã«ããlã-ãªã³ã¯ãªã©ïŒ;
xxxxxxxxx-ãã¡ã€ã«ä¿è·å±æ§ã
user-ãŠãŒã¶ãŒããã¡ã€ã«ææè ã
group-ææè ã°ã«ãŒãã
size-èŠçŽ ã®ãµã€ãºã
mm-ãjulããªã©ãããã¹ã圢åŒã§èŠçŽ ãäœæããæã
dd-ã¢ã€ãã ãäœæãããæã®æ¥ã
yytt-ã¢ã€ãã ãäœæããã幎ãŸãã¯æå»ã§ãã
name-èŠçŽ ã®ååïŒãã¡ã€ã«ããã£ã¬ã¯ããªããªã³ã¯ïŒ;
[] -1ã€ä»¥äžã®ã¹ããŒã¹ã
ã¯ãããããã®èŠçŽ ã®éã«ç°ãªãæ°ã®ã¹ããŒã¹ãååšããå¯èœæ§ããããŸããç°ãªããµãŒããŒå®è£ ã§ã¯ãéèŠãªåã1ã€æ®ããŠããããšã«æè¬ããå¿ èŠããããŸãããããã£ãŠããã¡ã€ã«ããŒãã«ãåæãããšãããããèæ ®ããå¿ èŠããããŸãã ãŸããããŒãã«ã®æåã®è¡ãã«ã¿ãã°ã®æåã®èŠçŽ ã«é¢ããæ å ±ãä¿æããéèŠãªè¡ã§ãããšã¯éããªãããšãèæ ®ããããšã䟡å€ããããŸãã FTPãµãŒããŒã®äžéšã®å®è£ ïŒããšãã°ãFreeBSDã®ftpdïŒã§ã¯ããªã¹ãã®æåã®è¡ã¯ãtotal NNããšããè¡ã§ãã
ããã¯ã©ã®ããã«æ©èœããŸããïŒ
å°ãè±ç·ããŠããå éšããããã¡ã€ã«ãåä¿¡ããFTPã»ãã·ã§ã³ãã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã ããã§ãã¯ã©ã€ã¢ã³ããèµ·åããŸãã ãã®æç¹ã§ãµãŒããŒã¯ãã§ã«ååçã«éãããŠããã21çªç®ã®ããŒãã§ãªãã¹ã³ããŠããŸãã ãŸããå¶åŸ¡æ¥ç¶ãäœæããå¿ èŠããããŸã-ããŒã21ã§ãµãŒããŒã«æ¥ç¶ããŸãã次ã«äœãããŸããïŒ äœæãããå¶åŸ¡æ¥ç¶ãä»ããŠãµãŒããŒã«æ£åžžã«ãã°ã€ã³ãããšããµãŒããŒããæšæ¶ãåãåããŸããããã¯ããAlt Linux 2.2ã®220 VSFTPããŒã¢ã³ããŒã¹ãShpakovskyãã®ãããªãã®ã«ãªããŸãã
次ã®ã¹ãããã¯ç»é²ã§ã-å¿åãµãŒããŒã«æ¥ç¶ãããšããŸããã-å¶åŸ¡æ¥ç¶ãä»ããŠãã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒã«USERå¿åã³ãã³ããéä¿¡ãããµãŒããŒãå¿åãŠãŒã¶ãŒããµããŒãããŠããå Žåãã331ãã¹ã¯ãŒããæå®ããŠãã ããã-ããã¹ã¯ãŒããå ¥åããŠãã ããããµãŒããŒã®å¿çã®æ°åã3ãã¯ãç¶è¡ããã«ã¯ããã«ã³ãã³ããå¿ èŠã§ããããšãæå³ããŸããããã¯ãã¯ã©ã€ã¢ã³ããå®éã«è¡ãããšã§ã-PASS 1 @ 1ã³ãã³ããéä¿¡ããŸã-ãããŒã®é»åã¡ãŒã«ããã¹ã¯ãŒããšããŠæå®ããŸã ãµãŒããŒã®å¿çãååŸãããã®Â«230ãã°ã€ã³æåã ã-ãç»é²ãæåããŸããã
ããã§ãã¢ã¯ã·ã§ã³ã¯å¿ èŠãªãã®ã«äŸåããããã«ãªããŸãããåè¿°ã®ããã«ããµãŒããŒãããã¡ã€ã«ãååŸããŸããããšãã°ããµãŒããŒã®ã«ãŒããã£ã¬ã¯ããªã«ãããã¡ã€ã«ãHIDE.EXEãã«ããŸãã ãµãŒããŒã«ããŒã¿ãéåä¿¡ããåã«ãã©ã®ã¿ã€ãã®ããŒã¿ãéä¿¡ãããã瀺ãå¿ èŠããããŸããããã¯TYPE Nã³ãã³ãã§è¡ããŸããã¿ã€ããASCIIã®å Žåã¯N = "A"ããã¡ã€ã«ããã€ããªã®å Žåã¯N = "I"ã§ãã ã¯ã©ã€ã¢ã³ãã¯ããµãŒããŒã«TYPE Iã³ãã³ããéä¿¡ããŸãããã®ã³ãã³ãã«å¯ŸããŠãã200ãã€ããªã¢ãŒããžã®åãæ¿ãããšããå¿çãè¿ãããŸãã
ãã®ããããã¡ã€ã«ãååŸããã ãã§ãã ãããè¡ãã«ã¯ãã¯ã©ã€ã¢ã³ãã¯ããŒã¿æ¥ç¶ãéãå¿ èŠããããŸãã 空ãããŒããã¯ã©ã€ã¢ã³ãã«ãã£ãŠéžæãããããã·ããªãŒããã³ã°ãå®è¡ãããŸãã ã¯ã©ã€ã¢ã³ãã¯åœŒã«ãè³ãåŸãããã 次ã«ãã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒã«èªèº«ã®IPã¢ãã¬ã¹ãšããã·ãã«éããããŒãçªå·ãäŒããå¿ èŠããããŸãïŒã¯ã©ã€ã¢ã³ãã®ãã¹ãIPã¢ãã¬ã¹ã10.21.23.10ã§ãããŒãçªå·ã2000ã§ãããšä»®å®ããŸãïŒã ã¯ã©ã€ã¢ã³ãã¯ãPORTæ¥ç¶10,21,23,10,7,208-ãã©ã®ãããª7,208ïŒã-ã³ã³ãããŒã«æ¥ç¶ãä»ããŠãµãŒããŒã«éä¿¡ããŸã-ããªãã¯å°ããŸãã ããã¯ããŒãçªå·ã§ãããã®ããã«æ§ç¯ãããŸã-7 * 256 + 208 =2000ããã®ã³ãã³ããåä¿¡ããåŸããµãŒããŒã¯æå®ãããããŒããç©æ¥µçã«éããæåããå Žåãã200 PORTã³ãã³ããæåããŸããã PASVã®äœ¿çšãæ€èšããŠãã ããã "ã
ãã¹ãŠãããŒã¿æ¥ç¶ã確ç«ããããµãŒããŒã«ããŒã¿ã転éããã³ãã³ããäžããããã«æ®ããŸããã¯ã©ã€ã¢ã³ãã¯ãããå®è¡ããŸã-RETR HIDE.EXEããã¹ãŠã«åé¡ããªããã°ïŒãã¡ã€ã«ãååšãã転éå¯èœïŒããµãŒããŒã¯ã150 Opening BINARY mode data connection for HIDE.EXEãã§å¿çããŸãïŒ4096ãã€ãïŒãããããŠãããŒã¿æ¥ç¶ãä»ããŠãã¡ã€ã«ã®ããŒãžãéå§ããŸãã ç¹°ãè¿ããŸãããçãã®æåã®æ¡ã«æ³šæãåããŸãã ãã¡ã€ã«ãå®å šã«éä¿¡ããããšããµãŒããŒã¯ã226 File send OKããšããã¡ãã»ãŒãžãéä¿¡ããããŒã¿æ¥ç¶ãéããŸãã
ã¯ã©ã€ã¢ã³ãã¯ããµãŒããŒããã®ã¡ãã»ãŒãžã®åä¿¡+ããŒã¿æ¥ç¶ãéããããšã«ãã£ãŠèšŒæãããããã«ãèªåã®åŽããã®ããŒã¿ã®åä¿¡ã®çµäºãåŸ ã¡ã埮åŠãªéãããããŸããããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãïŒã
ãããã£ãŠããã¡ã€ã«ã¯ã¯ã©ã€ã¢ã³ãã«ãã£ãŠåä¿¡ãããå¶åŸ¡æ¥ç¶ãåæããããã«æ®ããã¯ã©ã€ã¢ã³ãã¯QUITã³ãã³ããéä¿¡ãããµãŒããŒã¯ã221 Goodbyeãã§å¿çããåæããŸãã
ãããã³ã«ã«é¢ããæãéèŠãªçè«æ å ±ã以äžã«ç€ºããŸãã ç·Žç¿ãå§ããåã«ãtelnetã䜿çšããŠFTPãµãŒããŒãžã®å¶åŸ¡æ¥ç¶ãè¡ãããšã匷ããå§ãããŸããããŒã¿æ¥ç¶ãäœæããããšã¯ã§ããŸãããããããã«å¯Ÿããã³ãã³ããšåçã¯è¡šç€ºãããŸãã ãŸããããã€ãã®ã³ã³ãœãŒã«FTPã¯ã©ã€ã¢ã³ãã§äœæ¥ãããã®éãäœããã®çš®é¡ã®ãŠãŒãã£ãªãã£ã䜿çšããŠæ¥ç¶ã®äœæãšçµäºã芳å¯ããããšããå§ãããŸãã
å®è£ ã
次ã«ãå®è£ èªäœã«ã€ããŠèª¬æããŸãã ãã®ã¯ã©ã€ã¢ã³ãå®è£ ã§ã¯ãéããããã³ã°ïŒéããããã³ã°ïŒãœã±ããã䜿çšããŠãããããã¯ã©ã€ã¢ã³ãã¢ãã«ã¯ã€ãã³ãé§ååã§ãã ã¯ã©ã€ã¢ã³ãã¯ã察å¿ããã€ãã³ããçºçãããšãã«ã¯ã©ã€ã¢ã³ãã䜿çšãããœã±ããã«é¢ããç¹å®ã®ã¢ã¯ã·ã§ã³ã®ã¿ãå®è¡ããŸãïŒããšãã°ãæ¥ç¶ã®ã¯ããŒãºãããŒã¿ã®åä¿¡ã®éç¥ãªã©ïŒã ã€ãã³ããšããŠãã¡ã€ã³ãŠã£ã³ããŠããã·ãŒãžã£ã«å°éããã¡ãã»ãŒãžã䜿çšãããŸãã ããã«ãããã°ã©ã ã¢ãã«ã¯ã¹ããªãŒãã³ã°ã§ãããã¹ããªãŒã ã¯ããŒã¿æ¥ç¶ã®èªã¿åãã«äœ¿çšãããã¹ããªãŒã ã¯å¶åŸ¡æ¥ç¶ã®èªã¿åãã«äœ¿çšãããã¡ã€ã³ã¯ã©ã€ã¢ã³ãã¹ããªãŒã ã¯ãæ¥ç¶ããã¿ã³ãã¯ãªãã¯ããããšãã«éå§ãããŸãã ãããã®3ã€ã®ã¹ã¬ããïŒããã³ã¡ã€ã³ãŠã£ã³ããŠã¡ãã»ãŒãžããã·ãŒãžã£ïŒã®åäœãåæããããã«ããã°ã©ã ããã«ãã¹ã¬ããåãããŠããããããã€ãã³ããã䜿çšããïŒãã€ãã³ããïŒãããã°ã©ã ã§äœ¿çšããããããã®ã€ãã³ããã»ã³ãµãŒ1ãŸãã¯0ãšããŠæ··åããªãã§ãã ãã-ã€ãã³ããçºçããããçºçããŠããªãã¡ã€ã³ãŠã£ã³ããŠããã·ãŒãžã£ã«æ¥ããœã±ããïŒã
ããã§ã¯å§ããŸãããã ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ãŠã£ã³ããŠãäœæãããšããããã°ã©ã ã®ã¡ã€ã³åæåãå®è¡ããäž»ãªãã€ã³ãã説æããŸãã
call VirtualAlloc,ebx,1024000,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
mov ReciveDataBufferOffset,eax
call VirtualAlloc,ebx,10240,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
mov ReciveCommandBufferOffset,eax
(1 ) (10 ).
call CreateEventA,ebx,ebx,ebx,ebx
mov HDataReciveEvent,eax
âŠâŠ
event () .
call CreateThread,ebx,ebx,offset ReciveThread,offset ReciveDataThreadStruc, \
NORMAL_PRIORITY_CLASS,offset ThreadID_data
call CreateThread,ebx,ebx,offset ReciveThread,offset ReciveCommandThreadStruc,\
NORMAL_PRIORITY_CLASS,offset ThreadID_command
2 â , . , .
call gethostname, offset HostName,64
call gethostbyname,offset HostName
âŠ..
mov PortInPort,esi
ret 0
äžèšã®è¡ã®æå³ã¯ããã¹ãã®IPã¢ãã¬ã¹ãååŸããå°ãå€æããŠå¥ã®å Žæã«æžã蟌ãããšã§ããPORTã³ãã³ããå®è¡ããã«ã¯ãã¹ãã¢ãã¬ã¹ãå¿ èŠã§ãã
ããã§åæåããã»ã¹ãå®äºããããã°ã©ã ã¯ãŠãŒã¶ãŒã³ãã³ããåŸ æ©ããç¶æ ã«ãªããŸãã ãŠãŒã¶ãŒãæ¥ç¶ãã¿ã³ãã¯ãªãã¯ãããšã©ããªããèŠãŠã¿ãŸãããã
ã¡ã€ã³ãŠã£ã³ããŠã®æé ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ãããŒãäœæãããŸãããã®ããŒãã€ã³ããèæ ®ããŠãã ããã
æåã«ãããŒã¿ã®åä¿¡ã«é¢é£ããå€æ°ãåæåãããŠãŒã¶ãŒãå ¥åããæ¥ç¶ãã©ã¡ãŒã¿ãŒïŒãµãŒããŒããã¹ã¯ãŒããªã©ïŒããã€ã¢ãã°ããã¯ã¹ããååŸããŸãã ãã®åŸããµãŒããŒãšã®å¶åŸ¡æ¥ç¶ãäœæããå¿ èŠããããŸãã
- ;
call socket, AF_INET, SOCK_STREAM, IPPROTO_TCP
mov ReciveCommandSock,eax
- ,
,
.
call WSAAsyncSelect, ReciveCommandSock, newhwnd, WM_COMMANDSOCK,FD_READ+FD_CONNECT
-
âŠ..
call connect,ReciveCommandSock,offset sockaddr_in,16
- FD_CONNECT,
call SetEvent,HWaitConnectEvent ,
,
5 , .
call WaitForSingleObject,HWaitConnectEvent,5000
call ResetEvent,HWaitConnectEvent
- , 5
, - . WaitAnswerRecive .
call WaitAnswerRecive,5000
or eax,eax
jnz errorwithregisration
-é¢æ°ãžã®å ¥åãã©ã¡ãŒã¿ãŒã¯ãé¢æ°ãå®è¡ãããééã§ã
æå®ãããééã§å¿çãåä¿¡ãããªãå ŽåããµãŒããŒã®å¿çãåŸ ã€
ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããeaxã¬ãžã¹ã¿ã®ãŒã以å€ã®å€ã§çµäºããŸãã
WaitAnswerRecive proc TimeToWait:dword
call WaitForSingleObject,HWaitCommandEvent,TimeToWait
- HWaitCommandEvent,
, .
or eax,eax
jz NoTimeOutGet
call MessageBoxA,newhwnd,offset ErrTimeOutCommand,offset ErrorCap,40h
call ResetEvent,HWaitCommandEvent
- HWaitCommandEvent .. ,
.
NoTimeOutGet:
ret
WaitAnswerRecive endp
äžèšã®ããã«ããããã®ã¹ããªãŒã ã¯ã¡ã€ã³ãŠã£ã³ããŠãåæåããããã»ã¹ã§äœæãããåžžã«æ°ããããŒã¿ãåŸ æ©ããŠããããã»ã¹ã§ããã¹ããªãŒã ã¯ãæ°ããããŒã¿ããããšããã¡ãã»ãŒãžããããŒãžã£ãŒãžã®ã¡ãã»ãŒãžãåä¿¡ãããšã¡ã€ã³ãŠã£ã³ããŠããã·ãŒãžã£ã§ã¢ã¯ãã£ãã«ãªããŸãã¡ã€ã³ã¹ã¬ããã®æåã®éšåã§WSAAsyncSelecté¢æ°ã䜿çšããŠæ¥ç¶ãå®çŸ©ããŸãããããŒã¿æ¥ç¶ã®ã¡ãã»ãŒãžã¯ãåŸã§èª¬æããããã«ããã®æ¥ç¶ã®äœææã«æ±ºå®ãããŸãã
å¶åŸ¡ããã³ããŒã¿æ¥ç¶ã§ããŒã¿ãåä¿¡ããããã®æ®éçãªååŒã以äžã«ç€ºããŸãã
- ReciveDataThreadStruc
ReciveCommandThreadStruc .
ReciveCommandThreadStruc :
- ;
HCommandReciveEvent dd ?
- , ;
HWaitCommandEvent dd ?
- ;
ReciveCommandBufferOffset dd ?
- ;
BytesCommandRecived dd 0
- , ;
ReciveCommandSock dd ?
ReciveThread proc parametr:dword
mov edi,parametr
InfinityLoop:
- , ;
call WaitForSingleObject,dword ptr [edi],-1
- esi , - +
;
mov esi,[edi+8]
add esi,[edi+12]
- 4096 ;
call recv,dword ptr [edi+16],esi,4096,0
- , ;
add [edi+12],eax
- ebx , , ;
mov ebx,[edi+4]
-
, -
;
cmp edi,offset ReciveDataThreadStruc
je comparefordata
-
0dh, 0ah, ;
mov eax,[edi+12]
mov esi,[edi+8]
cmp byte ptr [esi+eax-1],10
je short CallEvent
jmp InfinityLoop
comparefordata:
- , = ;
mov eax,[edi+12]
cmp FileLenght,eax
jne InfinityLoop
CallEvent:
- ;
call SetEvent,ebx
jmp InfinityLoop
ReciveThread endp
ã¡ã€ã³ã¹ã¬ããã«æ»ã£ãŠããµãŒããŒããã®å¿çãæ£åžžã«åä¿¡ããŸãããã³ãã³ããåä¿¡ããæºåãã§ããŠããã®ã§ãã³ãã³ããéä¿¡ã§ããããã«ãªããŸããããã®å®è£ ã§ã¯ãSendCommandInSocketé¢æ°ã¯ãµãŒããŒã«ã³ãã³ããéä¿¡ãããã®é¢æ°ãåŒã³åºããŠãã®é¢æ°ãåŒã³åºããŸããµãŒããŒã¯ãUSERãPASSãTYPEãCWDãPORTãLISTã®é ã«ã³ãã³ããå®è¡ããŸãã é¢æ°èªäœã¯æ¬¡ã®ããã«ãªããŸãã
- , , ,
;
SendCommandInSocket proc uses ebx ecx esi edi, hSocket:dword, OutBufOffset:dword
- ;
mov edi,OutBufOffset
push edi
mov eax,0ah
mov ecx,100
repne scasb
sub edi,OutBufOffset
mov ecx,edi
pop esi
push edi
- , ,
;
mov edi,ReciveCommandBufferOffset
add edi,BytesCommandRecived
rep movsb
pop edi
add BytesCommandRecived,edi
- ;
call send,hSocket,OutBufOffset,edi,ebx
- , WaitAnswerRecive;
mov eax,5001
Wait2Answer:
dec eax
push eax
call WaitAnswerRecive
or eax,eax
jnz ErrorProcessed
- , , ,
, ,
.
.
mov edi,ReciveCommandBufferOffset
mov ecx,BytesCommandRecived
dec ecx
dec ecx
add edi,ecx
mov al,0ah
std
repne scasb
cld
xor eax,eax
- ;
mov cl,[edi+2]
cmp cl,'1'
- "1"
jz Wait2Answer
cmp cl,'3'
- "3" - ;
jna NoErrorProcessed
call MessageBoxA,newhwnd,edi,offset ErrorCap,40h
ErrorProcessed:
xor eax,eax
inc eax
NoErrorProcessed:
ret
SendCommandInSocket endp
ãã1ã€èæ ®ãã¹ãç¹ã¯ãPORTã³ãã³ããéä¿¡ããåã«ããªã¹ãã³ã°ãœã±ãããäœæããå¿ èŠãããããšã§ãããããè¡ãã«ã¯ãCreateListenSockããã·ãŒãžã£ãåŒã³åºããŸãã
CreateListenSock proc
pushad
- ;
call socket, AF_INET, SOCK_STREAM, IPPROTO_TCP
mov datasock,eax
- - , ,
,
, ;
call WSAAsyncSelect, datasock, newhwnd, WM_DATASOCK, FD_ACCEPT+FD_READ+FD_CLOSE
- ;
mov sin_port,0 ; ,
;
mov sin_family,AF_INET
mov sin_addr,INADDR_ANY
call bind, datasock, offset sockaddr_in, 16
- ;
call getsockname,datasock,offset sockaddr_in,offset szSockaddr_in
- ;
xor eax,eax
mov ax,sin_port
call ntohs,eax
push eax
shr eax,8
- ASCII;
call DECtoASCII,eax,PortInPort
- PORT
mov al,','
stosb
pop eax
and eax,0ffh
call DECtoASCII,eax,edi
mov ax,0a0dh
stosw
mov esi,PortInPort
- ;
call listen, datasock, 1
popad
ret
CreateListenSock endp
ãããã£ãŠãæåŸã«éä¿¡ãããã³ãã³ãã¯LISTã³ãã³ãã§ãããçŸåšã®ãã£ã¬ã¯ããªå ã®ãã¡ã€ã«ã®ãªã¹ããããŒã¿æ¥ç¶ã«å°éããå¿ èŠããããããã¡ãã»ãŒãžãéä¿¡ããåŸããã®ãªã¹ããååŸãããŸã§åŸ æ©ããå¿ èŠããããŸãã ãµãŒããŒããã¹ãŠã®ããŒã¿ã®éä¿¡ãæ£åžžã«å®äºããããšã瀺ãã¡ãã»ãŒãžãéä¿¡ããå Žåã§ããããã¯ã¹ããªãŒã ããã¹ãŠæ©èœãããã¹ãŠãåä¿¡ããããšãæå³ãããã®ã§ã¯ãªããããWaitTransferCompleteé¢æ°ãåä¿¡ãçµäºããããšãæåŸ ããŠããŸãã
-
, , .
WaitTransferComplete proc uses ecx edi, TimeToWaitEndTransfer:dword
WaitProgress:
- ,
;
call WaitForSingleObject,HWaitCloseEvent,-1
- , ,
;
call WaitForSingleObject,HWaitDataEvent,TimeToWaitEndTransfer
or eax,eax
jz CloseDataSocks
- , , , ..
, ,
;
cmp TimeToWaitEndTransfer,1000 ;
jz CloseDataSocks
call MessageBoxA,newhwnd,offset ErrTimeOutCommand,offset ErrorCap,40h
CloseDataSocks:
- ;
call ResetEvent,HWaitDataEvent
- ;
call closesocket,ReciveDataSock
call closesocket,datasock
ret
WaitTransferComplete endp
äžèšã®æé ãæ£åžžã«å®äºããå Žåããã£ã¬ã¯ããªããŒãã«ã¯ããŒã¿åä¿¡ãããã¡ã«ãããŸãã ããã°ã©ã ã®äžã§ãçµæã®ããŒãã«ãåŠçããèŠã€ãã£ããã¹ãŠã®ãã¡ã€ã«ãé çªã«åãåããŸãããã¡ã€ã«ãåãåãããšã¯ãã£ã¬ã¯ããªãåãåãããšãšåããªã®ã§ãããã§ã¯èª¬æããŸããã ãã¹ãŠã®ãã¡ã€ã«ãåä¿¡ããŠââä¿åããããå¶åŸ¡æ¥ç¶ãéããŠã¹ããªãŒã ãçµäºããŸãã
ãããã«
ãã¡ãããã¯ã©ã€ã¢ã³ãåŽã§FTPãããã³ã«ã䜿çšããåºæ¬ååã調ã¹ãŸãããããã®ã¿ã¹ã¯ã®ãã¹ãŠã®åŽé¢ã圱é¿ãåããããšã¯ãããŸããã§ããã ããšãã°ããã¡ã€ã«ããµãŒããŒã«éä¿¡ããããšã¯èæ ®ãããŠããŸããã§ããããæ·»ä»ã®ãœãŒã¹ã³ãŒããšåæ§ã«äžèšã®è³æãæ éã«æ€èšããã®ã§ãåé¡ãªããããè¡ãããšãã§ããŸãããµãŒããŒããã®FTPãããã³ã«ã®ãããªãç 究ãã宿é¡ãã«ããŸãããã