Babyfirst-Revenge

[HITCON 2017]Babyfirst-Revenge

翻buuoj的时候看到了这道题,分值高达92分,只有32个师傅解出来了这道题,简单看了下其他师傅的wp,这道题乎与Linux命令有关,很有意思,于是参考其他师傅的wp我准备挑战下这道题。

进入题目环境页面上直接出现了源码:

 <?php
    echo $_SERVER['REMOTE_ADDR']."\n";
    $sandbox = '/var/www/html/sandbox/' . md5("orange" . $_SERVER['REMOTE_ADDR']);
    @mkdir($sandbox);
    @chdir($sandbox);
    if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 5) {
        @exec($_GET['cmd']);
    } else if (isset($_GET['reset'])) {
        @exec('/bin/rm -rf ' . $sandbox);
    }
    highlight_file(__FILE__);

简单分析下,题目会自动创建一个/var/www/html/sandbox/文件夹,然后切换目录至改位置,接着满足条件的情况下我们可以执行命令,不过这里有个很明显的难点,就是限制cmd参数的长度必须小于等于五,否则直接给你rm -rf了,所以现在的难点就在于怎么在命令长度受限的情况下实现get shell。

翻了翻P牛的博客,发现他早就提过这个小tips了,参考其他师傅的wp,下面我们来简单分析下:

首先,linux中可以用\拼凑命令,比如l\ s,这样等效于ls:

其次我们可以用sh filename执行文件里的有效文件命令,即使其中有非命令字符串也只会报错,还是会继续执行有效的文件命令:

还有一个很经典的linux知识点,我们可以通过>+fileanme来实现新建一个文件(>是覆盖,>>是追加),这个tips挺好用的,比如某个你在某个网站发现一个无回显的命令注入点,你可以用cat *>1.txt,将内容全部写

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值