春秋云境(三)
本文最后更新于 728 天前,其中的信息可能已经有所发展或是发生改变。
洞都太多了,不一个个深究了,没啥意思,场景还是蛮有意思的

1.CVE-2022-32992


Online Tours & Travels management system SQLI
该CMS的admin/operations/tax.php中存在可控的INSERT 语句参数,从而导致了SQL注入攻击。

(1)admin/operations

其实这个 CMS 的部分文件里还是做了 PDO 处理的,但是这个文件夹下面的注入原理都一样,不只是tax.php这一处

注入点出在short_code这边

<?php
...
if(isset($_POST['submit']))
    {
        $sql = "INSERT INTO tax (tname, percent, short_code)
            VALUES ('".$_POST['tname']."', '".$_POST['percent']."', '".$_POST['short_code']."')";
            // use exec() because no results are returned
            $conn->exec($sql);
             $_SESSION['success']=' Record Added Successfully.....';
            // echo "New record created successfully";
            // $_SESSION['reply'] = "Added Successfully";
        header("location:../tax_details.php");
    }
?>

可以直接延时

包括下面的update()也一样,edit_id同样存在注入

<?php
...
if(isset($_POST['update']))
    {
        $sql = "UPDATE tax SET tname='".$_POST['tname']."',
    percent='".$_POST['percent']."',
    short_code='".$_POST['short_code']."'
     WHERE id='".$_GET['edit_id']."'";

    // Prepare statement
    $stmt = $conn->prepare($sql);

    // execute the query
    $stmt->execute();
    $_SESSION['success']=' Record Updated Successfully......';
     // $_SESSION['reply'] = "Added Successfully";
        header("location:../tax_details.php");
    }

(2)admin/add_travellers.php

本质上还是调用的operations/travellers.php可以文件上传 getshell

<?php
...
if(isset($_POST['submit']))
    {

        $file_name=$_FILES['photo']['name'];
        $file_type=$_FILES['photo']['type'];
        $file_size=$_FILES['photo']['size'];
        $file_tem_loc=$_FILES['photo']['tmp_name'];
        $file_store="../../admin/img/".$file_name;
         if (move_uploaded_file($file_tem_loc, $file_store)){

            echo "File Uploaded Successfully";
        }
...

admin/img/

admin 下的其他文件也有问题


2.CVE-2022-25101 && CVE-2022-25099


WBCE CMS v1.5.2 /templates/install.php 文件存在漏洞,攻击者可精心构造文件上传造成RCE

我其实一直都觉得,进到后台才能打的漏洞比较鸡肋,毕竟是弱口令引起的

这个可以在 issues#406issues#446 下找到

(1)install

其实在 Add-ons 里面的前两个是一样的,都用到了find_addon_root_path()所以可以触发

  • admin/modules/install.php
  • admin/templates/install.php
<?php
...
function find_addon_root_path($zip)
{
    // get list of files contained in the zip object
    if (($zip_files = $zip->listContent()) == 0) {
        return '';
    }

    // find first folder containing an info.php file
    foreach ($zip_files as $zip_file => $info) {
        if (basename($info['filename']) == 'info.php') {
            return '/' . dirname($info['filename']);
        }
    }
    return '';
}

写一个info.php然后压缩成 .zip,直接传就可以了

language/install.php里也有问题,方法是一样的

(2)upload

在 settings 下有黑名单,直接删了ph那部分就行

然后转到 media 页面直接传

这部分请求的其实是这个文件/modules/elfinder/ef/php/connector.wbce.php,然后执行到 219 行

<?php
...
// run elFinder
$connector = new elFinderConnector(new elFinder($opts));
$connector->run();

这个类在同文件夹下的elFinderConnector.class.php


3.CVE-2022-24663


wordpress插件PHP Everywhere RCE
远程代码执行漏洞,任何订阅者都可以利用该漏洞发送带有“短代码”参数设置为 PHP Everywhere 的请求,并在站点上执行任意 PHP 代码。P.S. 存在常见用户名低权限用户弱口令

这个解出来的人好少啊……😅

直接挂 wpscan 开扫,默认用户名 test,字典用/usr/share/wordlists

test/test 登录即可

利用方式其实已经给出来了,通过请求 admin-ajax.php,POST 传递参数action=parse-media-shortcode&shortcode=[php_everywhere]<arbitrary PHP>[/php_everywhere]

例如这样shortcode=[php_everywhere]<?php system('whoami');?>[/php_everywhere]

返回结果就在第二行的 body 里,所以直接cat /flag就行,想要纯净版的话,就在后面加个exit();


4.CVE-2022-24263


Hospital Management System sqli

源码在这,都是很基础的审计,不一个个扒拉了

admin/admin123 进后台,在 Add Doctor 这里可以注入

Queries 也可以


5.CVE-2022-24124


Casdoor api get-oraganizations SQL注入
Casdoor是开源的一个身份和访问管理 (IAM) / 单点登录 (SSO) 平台,带有支持 OAuth 2.0 / OIDC 和 SAML 身份验证的 Web UI 。 Casdoor 1.13.1 之前存在安全漏洞,该漏洞允许攻击者通过api/get-organizations进行攻击。

PS:这个洞是 E99p1ant 师傅挖的,可以看这里

默认 admin/123 登录

毕竟是 Go 开发的,不太熟悉,根据描述漏洞点在api/get-organizations,先到 Swagger UI 下找找

GET 请求,必须有参数owner,u1s1 没看懂,到源码里查一下,可以请求的参数有很多,主要看else干了点啥

// @router /get-organizations [get]
func (c *ApiController) GetOrganizations() {
    owner := c.Input().Get("owner")
    limit := c.Input().Get("pageSize")
    page := c.Input().Get("p")
    field := c.Input().Get("field")
    value := c.Input().Get("value")
    sortField := c.Input().Get("sortField")
    sortOrder := c.Input().Get("sortOrder")
    if limit == "" || page == "" {
        c.Data["json"] = object.GetMaskedOrganizations(object.GetOrganizations(owner))
        c.ServeJSON()
    } else {
        limit := util.ParseInt(limit)
        paginator := pagination.SetPaginator(c.Ctx, limit, int64(object.GetOrganizationCount(owner, field, value)))
        organizations := object.GetMaskedOrganizations(object.GetPaginationOrganizations(owner, paginator.Offset(), limit, field, value, sortField, sortOrder))
        c.ResponseOk(organizations, paginator.Nums())
    }
}

paginator应该是做分页处理的,重点看organizations,最内层调用的是GetPaginationOrganizations()

func GetPaginationOrganizations(owner string, offset, limit int, field, value, sortField, sortOrder string) []*Organization {
    organizations := []*Organization{}
    session := GetSession(owner, offset, limit, field, value, sortField, sortOrder)
    err := session.Find(&organizations)
    if err != nil {
        panic(err)
    }

    return organizations
}

这里又调用了GetSession()

func GetSession(owner string, offset, limit int, field, value, sortField, sortOrder string) *xorm.Session {
    session := adapter.Engine.Limit(limit, offset).Where("1=1")
    if owner != "" {
        session = session.And("owner=?", owner)
    }
    if field != "" && value != "" {
        session = session.And(fmt.Sprintf("%s like ?", util.SnakeString(field)), fmt.Sprintf("%%%s%%", value))
    }
    if sortField == "" || sortOrder == "" {
        sortField = "created_time"
    }
    if sortOrder == "ascend" {
        session = session.Asc(util.SnakeString(sortField))
    } else {
        session = session.Desc(util.SnakeString(sortField))
    }
    return session
}

在第二个if也就是filed那里,用fmt.Sprintf格式化字符串拼接,直接造成注入,再加上有panic()捕获异常,直接报错注入

field=updatexml(null,version(),null)

然后……,我 flag 找了半天……,mlgb 找不到,有没有好心的师傅说下😭

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇