攻防世界 web进阶区 ics-06

Posted Cxlover的博客哦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了攻防世界 web进阶区 ics-06相关的知识,希望对你有一定的参考价值。


攻防世界 ics-06

涉及知识点:

(1)php://filter协议

(2)php中preg_replace()函数的漏洞

解析:

进入题目的界面,一通乱点点出了唯一一个可以进入的界面。

观察url

http://111.198.29.45:41597/index.php?page=index

觉得page变量有问题,既然他可以为index(即文件名,那可不可以显示文件源码呢?)

于是构造payload

http://111.198.29.45:41597/index.php?page=php://filter/read=convert.base64-encode/resource=index.php

 

 果然爆出了源码。放到解密网站中go一下。解出源码。

代码审计,发现了关键点。

 

 这里就要提到preg_replace()函数的漏洞了,在$pattern中包含/e时,$replacement会被当做php代码来使用。(正则匹配几次就会执行几次$replacement中的代码)

学习资料:http://www.xinyueseo.com/websecurity/158.html

那还有啥说的,burpsuite走起来。

 

 扫出了目录,那就是一个个找了。最后发现s3chahahaDir有东西。

查看文件发现真的有flag。提交。完成!

 

 另外:有两遍flag就是 因为  test test匹配了两次/test/ 所以以上的代码执行了两次(最好写两次,万一两次返回结果不一样呢,虽然不太可能,但试试总没错QWQ)

攻防世界 ics-07   (没有做出来,但好像是题目的问题,毕竟本地复现成功了,但是照着wp撸也没拿到flag。看个思路和知识点就好了。)

涉及知识点:

(1)代码审计(php的弱类型特点)

(2)linux下的文件生成特点

解析:

if (isset($_GET[id]) && floatval($_GET[id]) !== \'1\' && substr($_GET[id], -1) === \'9\')

第一步的payload: ?id=1@9&submit&page=flag.php 没什么好说的。利用php的弱类型比较可以轻松的读取出admin用户(即id=1的用户)并满足以上条件。

使自己的session成为admin后,第二个点

<?php
     if ($_SESSION[\'admin\']) {
       $con = $_POST[\'con\'];
       $file = $_POST[\'file\'];
       $filename = "backup/".$file;  //假目录

       if(preg_match(\'/.+\\.ph(p[3457]?|t|tml)$/i\', $filename)){
          die("Bad file extension");
       }else{
            chdir(\'uploaded\'); //更改目录
           $f = fopen($filename, \'w\');
           fwrite($f, $con);
           fclose($f);
       }
     }
     ?>

其他的点就不多说了,毕竟都标注了,重点linux下的文件

可以用../shell.php/.来绕过过滤。(原理的话大概是因为linux文件生成时会自动隐藏生成../和./)

以上是关于攻防世界 web进阶区 ics-06的主要内容,如果未能解决你的问题,请参考以下文章

攻防世界(XCTF)WEB(进阶区)write up

CTF_Web:攻防世界高手区进阶题WP(5-8)

攻防世界 WEB lottery 和 ics-06

XCTF-攻防世界CTF平台-Web类——5ics-06

攻防世界web进阶区

攻防世界 web进阶区 NewsCenter