[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,将内容全部写

最低0.47元/天 解锁文章
937





