SharkCTF2021 easy_phpserialize题记

***先说教训:

  (1)不要看到正则就走不动路;有些正则不一定能绕。

  (2)__wakeup()漏洞在php5.6以上就被修复了; 本地复现各种题目时要注意环境。

————————

  扫描,得到index.php~中源码;得知flag.php存在。

 

 

 从底下看起;首先看似要绕一个正则,但实际上前面是$_GET,后面变成了$_REQUEST;

  且Request_order默认配置:

     

 

  “GP”指$_REQUEST包含$_GET和$_POST,但不包含$_COOKIE;且同一名称P会覆盖G(先读G)。

  因此,GET中的exp只需要随便输一个值就行了;真正的payload留到POST中。

<!--

  顺便说一下这个过滤 /.?f.?l.?a.?g.?/i :

   此处的" . "和" ? "都是元字符。

    " . "匹配除换行符(\n,\r)之外的全部字符;

    " ? "匹配前面的子表达式零次或一次。

      此处,前面的子表达式就是那个点;也就是说,正常的“flag”或“xfxlxaxgx”之类的文字都会被替换。

      若x为%0a,确实不会被替换,但是也读不到flag文件:诸如换行符,/**/之类的东西一般只用于在注入 语!句!中替代空格或者防过滤,放在文件名里显然会改变文件名。

      所以此处好像绕不了》?

-->

 接下来,搓序列的时候记得对象数搞多一点绕__wakeup();题目过滤了文件中的大括号,那么就写个脚本逐字读。

自动化payload:

'O:10:"FileReader":4:{s:8:"Filename";s:8:"flag.php";s:5:"start";i:%d;s:10:"max_length";i:1;}'%(i)

 

 

 

posted @ 2021-10-09 16:38  hiddener  阅读(78)  评论(0编辑  收藏  举报