upload-labs靶场通关详解:第6-9关
目录
第六关:大小写绕过
一、分析源代码
二、解题思路
三、解题步骤
第七关:空格绕过
一、分析源代码
二、解题思路
三、解题步骤
第八关:点号绕过
一、分析源代码
二、解题思路
三、解题步骤
第九关:::$DATA字符串绕过
一、分析源代码
二、解题思路
三、解题步骤
第六关:大小写绕过
一、分析源代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件类型不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
通过分析源代码发现,这一关把.ini也给限制了。但是,仔细观察,发现它和上一关的代码比起来,漏掉了一行代码,这行代码就是转换为小写。
二、解题思路
在PHP中,大小写区分是存在一定的规则。我们尝试使用PHP这个大写后缀,尝试绕过。
三、解题步骤
1.将一句话木马的后缀改成大写的PHP。
2.上传文件,显示成功,说明改成大写是可以绕过的。
3.复制图片地址,查看木马是否被成功解析。
第七关:空格绕过
一、分析源代码
(第七关)
(第五关)
我们发现它少了“首位去空”这行代码,因此猜想解题步骤和第六关应该是差不多的。
二、解题思路
“首尾去空” 是编程中处理字符串时的一种常见操作,指的是去除字符串开头和结尾的空白字符,保留中间的有效内容。这一操作也被称为字符串修剪(Trimming),在数据清洗、文本处理和用户输入验证中经常用到。
windows文件系统的特性是:不允许文件名以空格结尾,创建时会自动删除。
我们可以尝试在上传文件时加上空格绕过,当它保存在服务器上时空格又会被删除,就成功保存了php文件。
三、解题步骤
1.上传666.php,利用bp工具进行拦截,在php后面加上空格,放行。
可以看到这里添加了空格。
2.验证木马是否能被成功解析。
第八关:点号绕过
一、分析源代码
(第八关)
(第五关)
少了“删除文件名末尾的点”这行代码,同前两关一样的道理。
二、解题思路
windows同样会删除文件名末尾的句点(.),同理绕过。
三、解题步骤
1.上传666.php,利用bp工具进行拦截,在php后面加上句点(.),放行。
2.上传成功,验证木马是否能被解析。
第九关:::$DATA字符串绕过
一、分析源代码
(第九关)
(第五关)
少了“去除字符串::$DATA
”这行代码,和前几关一样。
二、解题思路
::$DATA
是 NTFS 文件系统中访问数据流的语法格式,用于标识文件的主数据流或备用数据流。这里不用过多理解,模仿前几关在文件名后缀加上这个字符串尝试去绕过上传。
三、解题步骤
1.上传666.php,利用bp工具进行拦截,在php后面加上::$DATA
,放行。
2.上传成功,验证木马是否能被解析。