ฉันสามารถรัน telnetd แบบ one-shot ได้โดยไม่ต้องแจ้งให้เข้าสู่ระบบ


0

กล่าวอีกนัยหนึ่งฉันต้องการสิ่งที่ต้องการ telnetd ที่ฉันเริ่มต้นจากเปลือกของฉันเพื่อผูกกับ IP ที่เฉพาะเจาะจงและให้บริการการเชื่อมต่อเดียว ฉันไม่ต้องการพรอมต์เข้าสู่ระบบ

โดยทั่วไปฉันต้องการให้เครื่องอื่นดำเนินการคำสั่งบางอย่างในเครื่องนี้ มันเชื่อมต่อโดยตรงดังนั้นฉันไม่ต้องการรหัสผ่านหรือการเข้ารหัสใด ๆ นอกจากนี้ยังไม่มีคีย์บอร์ดหรือติดตั้ง SSH

คำตอบ:


2

ฉันพัฒนาความปรารถนาที่จะทำสิ่งเดียวกันนี้เมื่อหลายปีก่อน ฉันใช้ Cygwin บน Windows เป็นอย่างมากและความสามารถในการเปิดหน้าต่าง telnet แบบ single-shot ง่าย ๆ ก็ดี

ฉันไม่พบวิธีที่จะทำสิ่งนี้ออกจากกล่อง ในที่สุดฉันก็คัดลอกแหล่ง TELNETD และเจาะส่วนสำคัญบางส่วน มันไม่ได้ทำการเข้าสู่ระบบและยอมรับเพียงหนึ่งการเชื่อมต่อ

สิ่งนี้ทำให้คุณต้องยุ่งกับ GCC ฉันเพิ่งทำสิ่งนี้ใน cygwin แต่มันควรจะทำงานใน linux เช่นกัน ดูที่มา DIFFs ที่นี่:

DIFF สำหรับ telnetd.c

83a84
> int be_promiscuous = 0;
133c134
< int debug = 0;
---
> int debug = 1;
145c146
<       'd', ':', 'h', 'k', 'n', 'S', ':', 'u', ':', 'U',
---
>       ':', 'h', 'k', 'n', 'S', ':', 'u', ':', 'U',
169a171
>       'g',
239c241
<               case 'd':
---
> /*            case 'd':
245,246c247,248
<                       /* NOTREACHED */
<                       break;
---
>                       /* NOTREACHED * /
>                       break; */
340a343,345
>               case 'g':
>                       be_promiscuous = 1;
>                       break;
395c400
<           if (argc > 1) {
---
>           if (argc != 1) {
417a423
>           if (!be_promiscuous) inet_aton("127.0.0.1",&sin.sin_addr);
546c552
<       fprintf(stderr, "Usage: telnetd");
---
>       fprintf(stderr, "Usage: telnetdeasy");
553c559,560
<       fprintf(stderr, " [-debug]");
---
> /*    fprintf(stderr, " [-debug]"); */
>       fprintf(stderr, " [-g]");
585c592
<       fprintf(stderr, " [port]\n");
---
>       fprintf(stderr, " port\n");
832c839
<        *      set ttyp line security label
---
>        *      set ttyp line security label
1177c1184
<       if (hostinfo && *IM)
---
>       if (*IM)
1447c1454
<
---
>
1523c1530
<                       ixon = tp->c_iflag & IXON;
---
>                       ixon = tp->c_iflag & IXON;

DIFF สำหรับ sys_term.c

42a43,46
> #include <pwd.h>
>
> extern void
>       start_shell P((char *, int, char *));
1127c1131
<       if (ioctl(t, I_PUSH, "ptem") < 0)
---
>       if (ioctl(t, I_PUSH, "ptem") < 0)
1451c1455,1456
<               start_login(host, autologin, autoname);
---
>               start_shell(host, autologin, autoname);
>               /*start_login(host, autologin, autoname);*/
1560a1566,1614
>  * start_shell(host, autologin, name)
>  *
>  * Assuming that we are now running as a child processes, this
>  * function will turn us into the login process.
>  */
>       void
> start_shell(host, autologin, name)
>       char *host;
>       int autologin;
>       char *name;
> {
>       char *cp, *st, *ar;
>       char **argv;
>       char **addarg();
>       extern char *getenv();
>       struct passwd * uinfo = getpwuid(geteuid());
>
>       cp = uinfo ? uinfo->pw_shell : NULL;
>       if (!cp || !strlen(cp)) cp = "/bin/sh";
>       st = strrchr(cp,'/'); st = st ? st+1 : 0;
>       if (!st || !strlen(st)) st = "sh";
>
>       strcpy( ar = (char*)malloc(strlen(st)+2), "-");
>       strcat(ar,st);
>
>       argv = addarg(0, ar);
>
>       unsetenv("IFS");
>
>       closelog();
>
>       /*
>        * This sleep(1) is in here so that telnetd can
>        * finish up with the tty.  There's a race condition
>        * the login banner message gets lost...
>        */
>       sleep(1);
>
>       execv(cp, argv);
>
>       syslog(LOG_ERR, "%s: %m\n", cp);
>       fatalperror(net, cp);
>       /*NOTREACHED*/
> }
>
>
>
>
> /*
1669c1723
<       } else
---
>       } else
2243c2297
<
---
>

ฉันคิดว่ามันใช้ได้กับเครือข่าย IPv4 เท่านั้น ฉันลบตัวเลือก "-d" และเพิ่มตัวเลือก "-g" แฮ็คของ telnetd นี้ใช้อาร์กิวเมนต์ตัวเลขตัวเดียวซึ่งเป็นพอร์ตการรับฟัง หากไม่มีอาร์กิวเมนต์ "-g" มันจะผูกกับ 127.0.0.1 มิฉะนั้นจะผูกกับทั่วโลก


0

ภายใต้ MacOS คุณสามารถเรียกใช้

/ usr / libexec / telnetd -debug -U 10023

สิ่งนี้จะทำให้คุณมีเซสชันหนึ่งครั้งบนพอร์ต 10023 แม้ว่าจะมีการเข้าสู่ระบบ ตาม manpage ควรจะมีพารามิเตอร์ -a สำหรับข้อมูลประจำตัว (ระบุ -a none) แต่ดูเหมือนจะไม่ทำงานที่นี่แม้ว่ามันอาจทำงานบน Linux (คุณไม่ได้ระบุระบบปฏิบัติการที่คุณใช้)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.