[⾝份验证绕过]CVE-2018-10933(漏洞复现)
预备知识:
SSH认证流程:
SSH的登录过程会分为5个阶段进⾏,⾸先是版本号协商阶段,服务器端监听22端⼝,客户端与服务端建⽴TCP连接,并且进⾏SSH版本协商,如果协商成功就进⼊密钥和算法协商阶段,否则就断开TCP连接。
在密钥算法协商阶段,服务器⾸先将⾃⼰的公钥和会话ID发送给客户端,客户端将ID及会话密钥Key进⾏异或操作,⽤公钥将异或后的结果加密,发送给服务端。
服务端进⾏反向操作,利⽤⾃⼰的密钥和客户端的公钥解密,得到Key值,接下来的传输都是以密钥的形式进⾏加解密。
在⼝令或密钥认证阶段,⾸先是客户端利⽤⾃⼰的私钥和Key进⾏加密,然后传输到服务器端,服务器端利⽤⾃⼰的私钥和Key进⾏解密,判断解密后的⼝令,
如果⼝令错误,发送失败报⽂和认证列表,客户端收到后重新选择认证,如果认证成功则进⼊交互界⾯,如果认证失败则⼀直循环,直到达到服务器端认证的次数上限,服务器端主动关闭本次TCP连接。
libssh版本0.6及更⾼版本在服务端代码中具有⾝份验证绕过漏洞。
实验环境:
libssh0.7.5
Ubuntu 192.168.100.160/24
python3
docker & docker-compose
漏洞复现:
创建source⽬录,复制libssh到source
解压并进⼊⽬录
tar xvJf libssh-0.7.
cd libssh-0.7.5
看到解压出来的⽂件
编译并安装
mkdir build && cd build
cmake -DCMAKE_install_prefix=/usr -DCMAKE_BUILD_TYPE=Debug ..
make
修改src⽬录下的auth.c源⽂件。
到ssh_userauth_password函数并将SSH2_MSG_USERAUTH_REQUEST替换为SSH2_MSG_USERAUTH_SUCCESS
vim ../src/auth.c
修改后 ./examples/samplessh就会成为验证该漏洞的PoC。
到SSH_AUTH_STATE_NONE和SSH_PENDING_CALL_AUTH_OFFER_PUBKEY
替换为SSH_AUTH_STATE_SUCCESS和SSH_PENDING_CALL_CONNECT
修改两处登录状态源代码,./examples/samplessh就会成为验证该漏洞的PoC。
保存退出输⼊make再次编译
输⼊ ssh-keygen创建私钥和公钥
ssh-keygen⽣成过程中会询问多个配置信息,全部点击回车,使⽤默认设置即可。
启动服务并测试
examples/ssh_server_fork -p 7777 127.0.0.1 -v -k /root/.ssh/id_rsa
同时启动新终端窗⼝,使⽤SSH客户端连接服务端:
进⼊build⽬录输⼊代码 ./examples/samplessh -p 7777 root@127.0.0.1 ,连接成功
在服务器输出的调试信息中可以到包类型的分派处理程序(ssh_packet_process)
根据服务端输出的调试信息,筛掉⽆⽤的⽇志信息,到ssh_pack_process,
分析可以看出该漏洞的利⽤点就是发送SSH2_MSG_USERAUTH_SUCCESS请求,从⽽进⼊ssh_packet_userauth_success函数。 cd 进⼊ libssh-0.7.5/examples/
在ssh_server_fork.c⽂件到ssh_server_callbacks_struct函数,发现服务端设Demo中进⾏了设置
在ssh_server_fork.c⽂件中到auth_password函数
认证成功后的路径:
ssh_message_auth_reply_success ->ssh_auth_reply_success:
ssh_message_auth_reply_success ->ssh_auth_reply_success:
从源代码可以看出,在正常情况下,在SSH登录成功后,libssh给Session设置了认证成功的状态。 结束服务端和客户端程序
退出到source⽬录,并删除刚才解压的⽬录cve漏洞库
rm -rf libssh-0.7.5
通过程序发送SSH2_MSG_USERAUTH_SUCCESS消息,触发漏洞
创建l 输⼊如下代码
docker-compose up -d 启动环境
创建python⽂件libssh_poc.py并输⼊代码
输⼊命令利⽤poc
python3 libssh_poc.py
成功执⾏id命令
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论