攻防世界 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文件生成时会自动隐藏生成../和./)

原文地址:https://www.cnblogs.com/cioi/p/11664172.html