警告:請勿在正式比賽中模仿!您將會被禁賽三年的風險。
純技術性文章,請勿惡意舉報、評論!
前置芝士
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,不要給投機分子可乘之機!