【搬运】算法竞赛中的 SSH
警告:请勿在正式比赛中模仿!您将会被禁赛三年的风险。
纯技术性文章,请勿恶意举报、评论!
前置芝士
- Linux 基本使用。
ssh的基本使用
ssh 是用来连接远程主机的命令行工具,名字来源是secure shell
,即 sh
前加上 s
,与其名字构成相同的有 scp,即 secure copy
远程复制。
一般用法有 ssh user@host -p port
。
直接输入 ssh
可以获得提示信息,不用加 -h
。
错误示范:
前置条件
- 试机时到别人考场了解某很强的人的 IP 地址。
- 获得了别人的密码(或密码都是默认的
123456
)。 - 对方机器开启 sshd(或本来自动开启,没有刻意关闭)。
- 对方是实体机/虚拟机开启端口映射到内网。
- 没有关交换机。
考场用法
对于NOI Linux,我们可以知道默认用户是 NOI Linux,密码是123456
此时假设我们已经在机试的时候进入了别人的机房, 获取了他的 IP 地址, 因为 IP 地址在短时间内不会变动, 具体更换时长由交换机配置决定, 所以在考试时 IP 是与机试一样的。
假设IP为 192.168.123.123
。
如果是NOI Linux,我们可以使用 ssh noilinux@192.168.123.123
登录进入他的电脑。
大多数Linux发行版默认ban掉了root的ssh登录, 所以我们需要使用普通用户登录, 然后再 sudo -i
或 su --
切换到root。
(一般官方镜像安装的 Linux 在安装过程中会设置用户,所以不允许 root 以 ssh 登录,但可以在 sshd 的配置修改允许。如果您使用的是阿里等的云服务器,他们是自己做的镜像,允许了 root 登录。)
然后在找到对方源文件位置后就可以为所欲为了。
你需要熟练使用vim
,cat
等命令行工具, 对其代码进行操作。
你可以选择仁慈的复制, 也可以选择阴险的修改乃至删除。
此处提供几个例子
- 用cat显示别人的代码然后自己改改,A掉。
- 删除别人的代码,用心险恶。
- 帮别人复制一个板子进去,赛后举报。
- 帮别人改动一下MLE/TLE/CE/RE。
源文件地址如果是虚拟机可以在 /mnt/hgfs/xxx
找到映射的文件夹。
如果是实体机目录就和你自己的机子一样。
更高明的方法
如果你不想使用vim
,cat
等留下踪迹,可以使用scp
。
用法:scp noilinux@192.168.123.123:/mnt/hgfs/WC-xxxx/express.cpp .
。
这样就会把 express.cpp
复制到 .
(当前目录)。
这样比 ssh 高明了许多,不会在对方电脑上留下记录。
scp 是基于 ssh 的,但是只是复制文件,避免了登入别人电脑进行操作。
如果没有搞到密码
如果没有搞到密码, 难道我们就不能 ssh 了吗?
当然不是我们可以爆破密码(
此段内容可能对您的考试没有任何帮助, 不像上一段可以实操。
你得首先生成一个密码字典。
可以使用 C++ 生成,密码字典要求一行一个可能密码。
然后使用 hydra,hydra -l 用户名 -P 字典路径 -t 线程数 -s 22(端口) ssh://192.168.0.110
。
关于hydra,需要联网安装使用:apt-get install hydra -y
,所以在考场上不一定具备实操性。
如何不留踪迹
搞完事以后 rm ~/.bash_history
删除你的 terminal 使用记录。
因为一般需要重启当前 terminal 才能看到别的 terminal 的使用记录, 赛场上一般不会有人显得无聊来重启 terminal,所以一般不会被发现。
只要清除了记录,赛后即使有人来查也不会被发现
sshd 的基本操作
sshd 是 Linux 中 ssh 服务端的进程。
如果你要 ssh 登入别人电脑,别人的电脑中 sshd 一定要是运行着的。
由于 Linux 一般作为服务器使用,所以大多数都安装了 sshd。
sshd 的开启和关闭都可以通过 service/systemctl
实现。
用 service ssh {stop|start|restart}
来实现停止、启动、重启。
如果关闭心切可以直接 pkill sshd
。
记住到考场上如果没有关闭交换机,一定要物理断网或关闭 ssh,不要给投机分子可乘之机!