01(JS前端认证)
客户端JS脚本有限制,本来想用上次笔记的方法来做(即改扩展名为.jpg,上传,抓包,改扩展名为.php,放行或者发送至repeater,改扩展名然后重发,再使用蚁剑连接),但是不知道是什么原因上传不成功,只好选择另一种方法来做
首先打开谷歌浏览器的设置,选择隐私与安全
选择网站设置
找到JavaScript然后选择“不允许网站使用JavaScript”(即关闭JS)
然后返回界面,直接上传一个php类型的一句话木马
就会自动识别为图片
右键点击图片复制图片地址
使用蚁剑连接成功,说明上传成功
也可以用hackbar构造传参,返回phpinfo界面即为传参成功
源码解读(关键部分在复制源码时已有解读):
function checkFile() {var file = document.getElementsByName('upload_file')[0].value;#获取用户选择的文件名if (file == null || file == "") {alert("请选择要上传的文件!");return false;}#检查用户是否选择文件//定义允许上传的文件类型var allow_ext = ".jpg|.png|.gif";//提取上传文件的类型var ext_name = file.substring(file.lastIndexOf("."));//判断上传文件类型是否允许上传if (allow_ext.indexOf(ext_name + "|") == -1) {var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;alert(errMsg);return false;}
}
02(MIME认证)
解读代码:
$is_upload = false;
$msg = null;#定义两个变量,is_upload标记文件是否上传,初始值为false,msg存储上传过程中的错误信息,初始值为null
if (isset($_POST['submit']))#检查是否点击了submit按钮,如果有就接着执行 {if (file_exists(UPLOAD_PATH))#检查上传目录UPLOAD_PATH是否存在 {if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))#检查文件类型是否为image/jpeg、image/png、image/gif {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'] if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';#如果上传文件类型正确,则将该文件移动到目标路径,若移动失败则显示“上传出错!”}} else {$msg = '文件类型不正确,请重新上传!';#如果上传文件类型错误,则显示错误}} else {$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';}
}
通过其检查的是文件类型image/jpeg……可看出本题的基本思路是抓包修改content-type,选择一个一句话木马,上传并抓包发至重放器
将Content-Type改为 image/jpeg(只要是代码解释里面的三个都可)
发包后即可得到文件路径,使用蚁剑连接成功
03(php3、phtml绕过黑名单)
解读源码:
12行:定义两个变量,is_upload标记文件是否上传,初始值为false,msg存储上传过程中的错误信息,初始值为null
3:submit按钮是否被点击
4:检查上传目录是否存在
5-11:获取文件扩展名并将其转换为小写
13-22:检查扩展名,不允许‘.asp’、'.aspx'、'.php'、'.jsp'类型的文件上传(若没有这么多限制,只是不允许.php文件上传的话,可以通过剩下几个文件扩展名替代php),若是这些文件以外的文件上传,则正常上传,并且从第15行可以看出,路径由上传目录、当前日期时间(YmdHis格式)、4位随机数和文件扩展名组成
解题过程:
思路为可将文件扩展名改为.php3、.php4来绕过,但是新版本的phpstudy没有ts版本的php,所以就去下载了一个2018版的phpstudy
根据提示下载了运行库合集
下载完接着切换php版本(php-5.2.17+Apache)
打开设置
CTRL+f搜索addtype找到这句话
去掉#,并在后面添加内容,使其变为
保存后像第一次搭建网站一样把upload-labs放到phpstudy2018的WWW文件夹下,访问127.0.0.1即可开始做题
先上传一个一句话木马
bp抓包,修改文件后缀为.php3然后重发
复制并拼接文件路径
使用蚁剑连接即可
04(.htaccess绕过黑名单)
源码解析:
$is_upload = false;#初始化一个变量,表示文件是否上传成功
$msg = null;#初始化一个变量,用于存储上传过程中的提示信息
if (isset($_POST['submit']))#确认submit按钮是否被点击 {if (file_exists(UPLOAD_PATH))#检查上传目录是否存在 {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".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",".ini");#不允许上传的文件扩展名,这里几乎隔绝了所有我们能更改来绕过的扩展名$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$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.'/'.$file_name;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件不允许上传!';#查看文件扩展名是否在黑名单里,若是不在则正常上传并保存上传路径,若是在则提示“此文件不允许上传”}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
根据源码解读,该题属于大量的文件后缀被限制,即除了php外常见的可绕过的后缀都被限制,可尝试上传.htaccess后缀文件,但是此方法仅限于aoache服务器
知识点补充:
大佬的通关wp
.htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令。
.htaccess主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。
.htaccess的用途范围主要针对当前目录。创建.htaccess文件,代码如下:
方法一:
<FilesMatch "4.png">
SetHandler application/x-httpd-php
</FilesMatch>
#如果当前目录下有4.png,就会被解析为.php
方法二:
AddType application/x-httpd-php .png
#如果当前目录下有以.png结尾的文件,就会被解析为.php,.png后面也可以添加其他文件形式
解题过程:
一开始做不出来,后面去搜了别人的wp,说是nst版本的phpstudy做不出来,又换成2018版的phpstudy,但还是不行
首先编辑一个.htaccess文件上传并抓包发送至重发器
将文件名改为abc.jpg,文件内容改为一句话木马,重新发包
复制,拼接路径,使用蚁剑连接