问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
针对某堡垒机漏洞分析(一)
针对某开源堡垒机漏洞分析,目前开发商已经发布补丁。
**0x01** 环境搭建 ============= 1. 源码下载 ------- 下载此版本源码 ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-e5266a535f28526856dc0cd3fce4c8276146edc3.png) 2. 虚拟机搭建 -------- 下载得到的安装包放到临时目录中,然后执行下列命令: `tar -zxvf xxx.tar.gz` `cd xxx sudo ./setup.sh` 安装时需要指定安装路径,您可以使用默认的安装路径`/usr/local/teleport`(直接回车即可),也可以指定别的路径,请注意**路径中不要含有中文字符或空格**。 管理权限执行./setup.sh即可安装 ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-ad2012a328a4a451338ff3a64193b200d191f127.png) 3. 访问WEB页面 ---------- <http://ip:7190> ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-6fe77a070f8fbae4cdc15d0087e5ea4b08c8859c.png) 0x02 分析源码 ========= 源码在文件夹xxx/data/www/teleport/webroot/app目录下 ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-54526b2b0e37cb0dec620f0789300e66f6c397a5.png) 下面先查看该框架的路由文件 ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-327f02ff228941058cfe2be59eb6261e3664f99f.png) 跟进上图的方法来到以下文件的CLASS ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-73641f4bc75665237e361b878d759add8f707b58.png) 主要看一下代码文件,提供了四种登陆方式,直接看TP\_LOGIN\_AUTH\_USERNAME\_PASSWORD\_CAPTHA这种登陆方式(之前审计就已经发现,此时就不再考虑其他登陆方法)。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-42b179833a6ace0de47ad205c82fd0de60a05201.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-894d8b600202bf7d276e550f4b7dcf42b92ffd74.png) 看代码,我们需要提供type、captcha、username、password、remember参数并且是以json形式POST提交。 果真需要password吗?往下看 ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-58afc039afed7f86160ee3840475222a1062f36c.png) ```php err, user\_info, msg = user.login(self, username, login\_type\=login\_type, password\=password, oath\_code\=oath) if err != TPE\_OK: if err == TPE\_NOT\_EXISTS: err = TPE\_USER\_AUTH msg = '用户名或密码错误' syslog.sys\_log({'username': '???', 'surname': '???'}, self.request.remote\_ip, TPE\_NOT\_EXISTS, '登录失败,用户\`{}\`不存在'.format(username)) return self.write\_json(err, msg) self.\_user = user\_info self.\_user\['\_is\_login'\] = True ``` 验证登陆是通过user.login去验证的,跟进user.login。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-3a00aa10bd9c02ba9c3455e9961aeb578b89604e.png) 这个函数大体的意思是先获取username然后去数据库中去取出相应username的数据,然后与用户输入的比对,然后返回各种结果。最重要的是需要看`if password is not None:`这段和 ```php if len(user\_info\['surname'\]) == 0: user\_info\['surname'\] = user\_info\['username'\] return TPE\_OK, user\_info, msg ``` ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-7e2bffbe5b45ad7d60904838cc68e30fedfde2d2.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-1c941ab45a6b9538ffa92674ad63852877d381dc.png) 从其中可以看出我们不需要输入password字段可以直接跳过IF语句,直接来到判断username是否存在的代码,然后返回结果给上面的class DoLoginHandler(TPBaseJsonHandler)。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-58afc039afed7f86160ee3840475222a1062f36c.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-ef781671d24ddd41b24d7db04c7b8ae5f7171c08.png) 验证完毕后,user.login返回的是正确结果就不会触发return语句,直接去到下面赋权。 由此推断此存在绕过登陆的漏洞。 0x03 验证漏洞 ========= 1. 综上所述payload可构造为 ------------------ `args={"type":2,"username":"admin","password":null,"captcha":"xxxx","oath":"","remember":false}` 2. 验证payload ------------ ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-37f8fc0cb883c07725d6d7dbad57ef0e669c0112.png) code为0说明成功 刷新一下首页就可进入后台 ![image.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-cb0d49fb355252c8ad1710acd70e48cc0f332709.png) 3. 总结一下 ------- 之前python的源码没有审计过,感觉这套难度不太大,这套的套路还是先从路由着手,仔细一点就可以。
发表于 2022-09-07 09:45:25
阅读 ( 7071 )
分类:
漏洞分析
0 推荐
收藏
0 条评论
请先
登录
后评论
ada
1 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!