WMCTF2020 web之web_checkin

这道题是自己没有做出来,当时也没有认真做,最后看看来NU1L的wp才知道思路。
NU1L真的太强了,向他们看齐!!!

题目:web_checkin

<?php
//PHP 7.0.33 Apache/2.4.25
error_reporting(0);
$sandbox = '/var/www/html/' . md5($_SERVER['REMOTE_ADDR']);//remote_addr代表客户端的IP
@mkdir($sandbox);//创建一个文件
@chdir($sandbox);//进入这个文件
highlight_file(__FILE__);
if(isset($_GET['content'])) 
{
    $content = $_GET['content'];

    if(preg_match('/iconv|UCS|UTF|rot|quoted|base64/i',$content))//没有弄明白这里是为什么?
         die('hacker');

    if(file_exists($content))//file_exists() 函数检查文件或目录是否存在。
        require_once($content);
        
    file_put_contents($content,'<?php exit();'.$content);
    //file_put_contents() 函数把一个字符串写入文件中。
}

他们是wp就一句话:?content=/flag
难道flag在根目录下面?
于是自己搭建环境测试确实可以获得flag,(使用绝对路径获得,这样可以避免进行修改,但是也应该是没有权限写入吧?)
先放着这里,过几天官方出wp在想一想吧!

想法
结合这个题,我想到了file_exists()函数可能存在绕过,这个例子来源于网络。

<?php
highlight_file(__FILE__);
$file=$_GET['file'];
//file_exists这个函数允许传入的路径中含有特殊符号
if(file_exists($file)){
echo "hacker!!!";
}else{
include($file);
}
?>
//flag.php
<?php
flag{nice_to_meet_u0}

正常输入如果文件存在就会输出hack!!!
使用我们可以构造一个系统没有的文件夹然后…/绕过来绕过。
payload:

?file=./nice/../flag.php

这个思想来自DASCTF7月的比赛
题目链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值