• bugku welcome to bugkuctf


    题目地址:http://123.206.87.240:8006/test1/

    这道题主要用到了俩个知识点:php伪协议和序列化

    点进题目看到:you are not the number of bugku !这句话,很来气,啥都没有,查看源码。

    看到三个get方式提交的参数。txt、file、password。第一眼看到还是没什么思路,先完成if条件,看第八行代码,我们要使user这个文件里面的内容完全等于"welcome to the bugkuctf"。这里我们用到了第一个知识点,php伪协议里面的PHP://input,写入txt,构造payload如下。  //这里不明白为什么不可以直接令txt=welcome to bugkuctf。

    我们就得到了右边这个页面。然后注意到hint.php这个东西,尝试访问一下,什么也没有。这里,我们传入第二个参数file,并利用伪协议的PHP://fifter读取一下hint.php的源码,结果是base64加密的,读完之后解密一下就行了。

    解密右边的密文,得到下图代码,这里有一个FLAG类,注意一下,后面有用。

    然后我们用同样的方法读取index.php,解密后得到如下代码。//关于为什么可以直接读index.php,网上找了很久也没有到合适的答案,应该是经验之谈吧。

    御剑扫描后台时,发现有flag.php页面,我们试着读取一下。把index.php改为flag.php,结果如下:

     为什么会这样呢?我们观察第八行代码,这一句的作用是,利用正则匹配,是file里面不能含有flag。只能想其它的办法获得flag。我们往下看else里面的语句。它表示如果file不含flag,就会把file包含进去,然后$password进行反序列化,再输出$password的值。我们回到FLAG类那块,看到里面有一个$file属性,并且有一个魔术方法_tostring(),这个方法的作用就是当调用实例化对象时就会自动执行_tostring()这个方法。简单来说创造一个这个类的对象就会调用这个方法。而在_tostring()中,会输出以字符串的形式输出file,根据上面的这些条件,我们可以让$password为FLAG类型,并且让FLAG中的$file就等于flag.php,这样我们就可以得到flag.php的内容了,不过要记得,前面$password进行了反序列化的操作,所以我们要先把它序列化。写一个php脚本吧!如下:

    左边是flag.php序列化之后,这个脚本大家可以先在自己电脑室试一下,用phpstudy就行,放在根目录下,具体的用法可以百度,然后我们传入txt、file、password的值

    这里的%22是双引号。

    然后再查看器里找到flag:

    (ps:本人太菜,若有错误的地方欢迎大佬随时责骂。。。。xixixii)

  • 相关阅读:
    0x00000090 该内存不能read written
    AutoCAD系统变量:EDGEMODE
    AutoCAD.net: DoubleClick
    Access 类型转换函数
    无法更改文件夹的隐藏属性 解决方法!
    Windows防火墙无法启动解决办法
    AutoCAD.net: DrawOrderChange display order of the entities in the drawing
    C#调用C++编写的COM DLL
    编辑AutoCAD 2010中新出现的CUIx文件[转]
    hook钩子
  • 原文地址:https://www.cnblogs.com/liangshian/p/10016776.html
Copyright © 2020-2023  润新知