[HarekazeCTF2019]Easy Notes

发布于 2022-05-14  71 次阅读


[HarekazeCTF2019]Easy Notes

分析源码

首先按照惯例,用Seay扫描一下,报告说index.php有文件包含漏洞。

image-20220514021647502

打开index看看代码逻辑

image-20220514021757741

$page变量居然只能用这些参数来代替

再翻翻目录,发现了flag.php

发现这里的意思要我们用admin账户登陆

image-20220514021958444

==Ctrl+左键==跟进这个函数,跟进这个函数

image-20220514022639941

发现这个地方是判断$session,很明显这个题的点就是session欺骗

根据我们可以利用的点

  • 第一个是注册的username
  • 第二个是上传的文件名称
  • 第三个是上传的文件内容
  • 第四个就是export的下载功能进行回显

观察之后可以发现

image-20220514025024014

我们写入的node的title会:

由note.php中得到传到add.php再==通过add_note()这个函数,传输到$session中==

那么这个地方我们可以构造一个admin的session了

利用session的反序列化机制:

XXXX|N;admin|b:1;XXXX

其中

  • |N;是闭合前面的乱七八糟的字符,即XXXX的值是NULL
  • admin|b:1;表达是admin这个键的键值是bool类型的1

image-20220514025953884

image-20220514025940105

这个地方惊奇的发现,,,session和我们下载的文件的目录是在一起的。

image-20220514095919653

image-20220514095809500

这里就有了个思路,如果我们利用admin=bool(true)的权限去构造一个session放在TEMP_DIR路径下,那么不就是等于说我们构造了一个session包,他的属性就是admin了!

然后我们用这个session访问的时候,服务器会访问我们session对应的文件包,发现这个文件包是admin属性,那么我们就是可以访问flag。

解题步骤:session欺骗

参考链接:https://blog.csdn.net/mochu7777777/article/details/106909777

取一个1命名的文件。观察我们下载的session包:

image-20220514031726511

可以看到文件名可控的,于是我们上传一个==|N;admin|b:1;==的文件,并且得到session

image-20220514032034190

然后利用这个session访问即可

image-20220514032215210

修改后点击刷新,再刷新网页即可

参考链接:

https://blog.csdn.net/mochu7777777/article/details/107568406
https://guokeya.github.io/post/Kpq_sd7RO/
https://blog.csdn.net/mochu7777777/article/details/106909777

“缘分让我们相遇乱世以外,命运却让我们危难中相爱”