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