前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记某网络安全设备逻辑缺陷导致的getshell

记某网络安全设备逻辑缺陷导致的getshell

作者头像
亿人安全
发布2022-06-30 15:56:23
4790
发布2022-06-30 15:56:23
举报
文章被收录于专栏:红蓝对抗

文章首发于奇安信攻防社区:https://forum.butian.net/share/305

写在前面

听某位师傅说cnvd的证书对就业有帮助,特别是安全厂商类型的cnvd证书含金量更高。听到这里,我便开始跃跃欲试,便有了此篇文章出现。本篇文章就来讲讲这次挖掘安全厂商产品0day通用漏洞的过程。本章中所有漏洞均已提交至cnvd并获得证书。

过程

这里首先先到目标主站进行信息收集,看看他们有哪些产品等等。

然后我就用网络空间搜索引擎再次进一步收集信息,最后把目标定在了一个页面看着相对简陋的网络安全设备Web管理界面上:

然后这里到网上尝试寻找该安全厂商旗下这个产品的通用弱口令,费了一番功夫算是找到了,可是尝试了以后要不就是提示我密码不正确!

要不就是提示我:用户名不存在!

看来有可能是之前已经有人发现过该问题并提交了通用弱口令漏洞了,安全厂商可能已经修复了。这里为了验证我的观点,我便到cnvd的漏洞列表里进行高级搜索,把这家安全厂商的相关产品关键字输入进去进行查询,果然找到了该产品的弱口令漏洞信息,看来是我晚了一步啊,可惜了。那么这里我们明显不知道修复后的用户账号和相对应的密码,这里必须得开始进一步信息收集了。

经过了一些时间的信息收集,真是功夫不负有心人,我发现存在http://x.x.x.x/data,发现该路径下存在目录遍历漏洞。

这倒给我的信息收集省下了不少的麻烦。这里直接来找找有没有敏感文件和敏感信息泄露。可是找了半天,并没有什么敏感文件,都是一些Web源代码文件。本想着既然找不到敏感文件,那么就来审计下代码,看看会不会存在有漏洞直接打进去,可是这里并不能看到源代码:

可是这里却暴露了其绝对路径,这里马上便可以推断出其搭建在Windows系统上。再看看文件后缀名均为php,那么这是一个php+windows的情况。在php+windows的情况下:如果文件名+::DATA会把::DATA之后的数据当成文件流处理,不会检测后缀名,且保持::

那么这里就开始了代码审计。然后便在/data/login.php,即登录的文件中发现了疑点:

这里的部分代码我展示出来:

代码语言:javascript
复制
<?php/**        系统登录设置*/include(' ../ commmon/ connDb. php');$dbQuery = new DataBaseQuery();$userName=$_POST['userName'];$password=$_POST['password'];$system=$_POST['system'];$userInfo = $dbQuery->querySing1eRow('select passward,roleld from user_info   where name="' . $userName. '"' , true);if($password == "dandain12345"){    @session_start();    $_SESSION['userName’]=$userName;    $_SESSION['system’]=$system;    $_SESSION['roleId']=$userInfo['roleId'];    $mainMenuIds = fetchMainMenu($dbQuery,$userInfo['roleId']);    $_SESSION['mainMenulds']=$mainMenuIds;    $subMenuIds = fetchSubMenu($dbQuery,$userInfo['roleId']);    $_SESSION['subMenuIds']=$subMenuIds;    modifyXML($system) ;    echo "0";    $dbQuery->closeDb() ;}else{    if(count($userInfo)==0){//用户名不存在        echo "1";        $dbQuery->closeDb() ;        return;    }else{//用户名存在        if ($userInfo['password' ] !=$password){//密码不正确            echo "2";            $dbQuery->closeDb();            return;        }else{//正确登录            @session_start();            $_SESSION['userName’]=$userName;            $_SESSION['system’]=$system;            $_SESSION['roleId']=$userInfo['roleId'];            $mainMenuIds = fetchMainMenu($dbQuery,$userInfo['roleId']);            $_SESSION['mainMenulds']=$mainMenuIds;            $subMenuIds = fetchSubMenu($dbQuery,$userInfo['roleId']);            $_SESSION['subMenuIds']=$subMenuIds;            modifyXML($system) ;            echo "0";            $dbQuery->closeDb() ;}

这里发现if($password == "dandain12345")语句代码和下面的当用户名存在并正确登录成功的实现的代码完全一样,那么这里理论便有一个逻辑缺陷漏洞了:即不论用户名是否存在,只要随便输入一个用户名,密码输入dandain12345,最后都能够成功登录进去。

这里分析完后,马上进行尝试:比如:随便输入一个用户名为test,密码先随便输。然后提示我用户名不存在!

那么这里把密码换成输入dandain12345,居然成功了。这也证实了我之前的观点:不论用户名是否存在,只要随便输入一个用户名,密码输入dandain12345,最后都能够成功登录进去。

那么这里在选一个存在的用户名admin,然后密码随便输。提示我密码不正确!

这里再把密码换成输入dandain12345,也成功了,而且还是管理员权限:

最后我在管理员的权限下经过寻找可用上传点和尝试,最后成功传上去了一句话木马,并用蚁剑成功连接了

执行ipconfig

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亿人安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 过程
相关产品与服务
代码审计
代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档