php session统计登录在线人数_通达OA 前台任意用户伪造登录分析

通达OA 前台任意用户

伪造登录分析

看到最近报出来的通达前台任意用户伪造登录的漏洞,今天也尝试复现一下。

通达oa的php文件需要zend5 解密。

漏洞文件在 logincheck_code.php ,当UID为1时,用户默认为admin。

include_once "inc/session.php";session_start();ob_start();include_once "inc/conn.php";include_once "inc/td_core.php";include_once "inc/utility.php";include_once "inc/utility_cache.php";include_once "inc/TRedis/TRedis.php";$redis = TRedis::redis();$UID = intval($_POST["UID"]);$CODEUID = $_POST["CODEUID"];$login_codeuid = TD::get_cache("CODE_LOGIN" . $CODEUID);if (!isset($login_codeuid) || empty($login_codeuid)) {    $databack = array("status" => 0, "msg" => _("参数错误!"), "url" => "general/index.php?isIE=0");    echo json_encode(td_iconv($databack, MYOA_CHARSET, "utf-8"));    exit();}

来看下代码,前边包含了inc文件夹中的session.php,创建了session会话并且打开了数据缓冲,接下来加载了一些配置文件,变量redis 配置redis连接的内容,比较关键的就是UID参数的获取。可以看到$UID是通过post方法传递进来的,而且为整数。

然后我们往下看,会进行一次UID的查询。

6a253b0f6e7ed03298236d900926e8ad.png

同时在180行左右,会把UID传递给$LOGIN_UID,同时$LOGIN_UID会直接传递给SESSION。

d49ad0b34ff3d22f16bd302b6724198d.png

现在就是要搞明白CODEUID 是怎么传递的了。找一下设置CODE_LOGIN的文件,跟进general\login_code.php。

44e2dba9c39f38295c2aa581eb167f2c.png

当$login_codeuid为空时会getUniqid()生成一个存入redis缓存并且在最后echo出来。所以我们可以通过直接get请求。

使用之前的CODEUID即可绕过if条件的exit()。

利用:

c6b6f32ab2e906706ceb2855bd8b488d.png

22DB918D-DFA8-4A93-5AA1-B7E8040702AF

eb2d2e726db7d74f1056ec4619b641b0.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值