Linux 别名<;cmd>;至;那么做X<;cmd>&引用;透明地
标题很烂,但我不确定我想做什么的正确术语,如果我知道我现在可能已经找到了答案的话 问题: 由于每次扫描端口23时都有一个过于热心的端口扫描程序(客户的网络监视器)和一个过于简单的telnet守护程序(busybox linux),telnetd会启动另一个Linux 别名<;cmd>;至;那么做X<;cmd>&引用;透明地,linux,bash,command-line,alias,io-redirection,Linux,Bash,Command Line,Alias,Io Redirection,标题很烂,但我不确定我想做什么的正确术语,如果我知道我现在可能已经找到了答案的话 问题: 由于每次扫描端口23时都有一个过于热心的端口扫描程序(客户的网络监视器)和一个过于简单的telnet守护程序(busybox linux),telnetd会启动另一个/bin/login实例,等待用户通过telnet输入 由于端口扫描程序实际上没有尝试登录,因此没有会话,因此不会出现会话超时,因此我们很快就会看到运行/bin/login的无数僵尸副本 我想做什么: telnetd为我们提供了启动其他东西的选
/bin/login
实例,等待用户通过telnet输入
由于端口扫描程序实际上没有尝试登录,因此没有会话,因此不会出现会话超时,因此我们很快就会看到运行/bin/login
的无数僵尸副本
我想做什么:
telnetd
为我们提供了启动其他东西的选项(-l
),而不是/bin/login
,因此我认为我们可以用bash脚本替换/bin/login
,该脚本杀死旧的登录进程,然后正常运行/bin/login
:
#!/bin/sh
# First kill off any existing dangling logins
# /bin/login disappears on successful login so
# there should only ever be one
killall -q login
# now run login
/bin/login
但这似乎会立即返回(没有错误,但没有登录提示)。我还尝试在telnetd的参数中链接命令:
telnetd---l“killall-q login;/bin/login”
但这似乎也不起作用(同样,没有错误,但没有登录提示)。我肯定这里少了一些明显的皱纹
该系统是运行Busybox的嵌入式Linux 2.6.x,因此保持简单是首选
编辑:好的,我是一个不让脚本可执行的傻瓜,完成后我会得到
登录:
提示,但在输入用户名后,我不会得到任何进一步的提示。检查脚本是否设置了执行位。权限应与原始二进制文件(包括所有权)的权限相同
至于-l
:我猜它试图执行命令killall-q login/bin/login
(这是一个词)
由于这是一个嵌入式系统,它可能不会写入日志。但无论如何,您都应该检查
/var/log
以查看错误消息。如果没有,您应该能够使用文档对其进行配置:对,我修复了它,因为我怀疑我丢失了一条皱纹:
exec/bin/login
我需要exec
将控制权交给/bin/login
,而不仅仅是调用它
因此,telnet守护进程启动如下:
/usr/sbin/telnetd -l /usr/sbin/not_really_login
非真正登录脚本的内容包括:
#!/bin/sh
echo -n "Killing old logins..."
killall -q login
echo "...done"
exec /bin/login
在telnet connect上,我们得到了以下信息:
**MOTD Etc...**
Killing old logins......done
login: zero_cool
password:
我们可以像往常一样登录
我唯一没有弄清楚的是我们是否能检测到
/bin/login
(如果我们杀死它)的退出状态,并打印一条消息说太慢了,笨蛋代码>或类似。TBH虽然,这是一个可以等待雨天的好消息,我只是很高兴我们的东西不能再通过Telnet进行DDOS攻击了 您是否为脚本设置了执行位?有人仍然使用telnet
来执行最初创建的脚本?登录?哇,-l
标志是否采用了第二个示例中的shell脚本文本?我希望它需要一些可以执行的东西(比如二进制或可能是带有执行位和适当shebang行的shell脚本)。现在获取登录:
,但不再进一步。脚本现在可执行-请参阅编辑。已启用通过syslog进行日志记录,但未显示来自登录的消息。请在脚本中放入一组echo 1>/tmp/debug
,以查看是否调用了它以及调用的距离。