| 靶场 | upload-labs-env-win-0.1 |
| 环境 | windows |



发现有类型限制
抓包

将png修改为php.

成功上传,



- 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;
- }
- }
代码只过滤了文件上传的类型,但没有过滤文件的内容,这个和dvwa中级靶场有异曲同工之处。所以使用图片木马配合中国蚁剑连接
温馨提示:记得删除上传文件,否则会影响下面关卡。

测试(目的:让他提示上传什么类型文件)

发现没有提示

图片木马可以(老规矩,抓包改后缀试试)

../upload/shell.php


- $is_upload = false;
- $msg = null;
- if (isset($_POST['submit'])) {
- if (file_exists(UPLOAD_PATH)) {
- if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == '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,image/png,pload_file,image/gif类型上传,所以使用图片木马还是可行的,图片依旧是image/png类型,进入循环。
上传一句话木马,测试可以上传什么类型文件



发现不可以了
修改shell.php为shell.php.png.


发现上传内容生成新的文件了
创建php5木马


分析代码,进行黑名单验证,但是黑名单不全,可以使用php3、php5、phtml等等绕过
但是因为靶场是用phpstudy环境搭建的,要进去修改一下配置文件改一下
httpd.conf文件里的#AddType application/x-httpd-php .php .phtml
为AddType application/x-httpd-php .php .phtml .php5 .php3
记得去掉#号。


- $is_upload = false;
- $msg = null;
- if (isset($_POST['submit'])) {
- if (file_exists(UPLOAD_PATH)) {
- $deny_ext = array('.asp','.aspx','.php','.jsp');
- $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.'/'.date("YmdHis").rand(1000,9999).$file_ext;
- if (move_uploaded_file($temp_file,$img_path)) {
- $is_upload = true;
- } else {
- $msg = '上传出错!';
- }
- } else {
- $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
- }
- } else {
- $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
- }
- }
分析代码,进行黑名单验证,但是黑名单不全,可以使用php3、php5、phtml等等绕过
各位大佬,还在学习,下面的慢慢来。