0x00

之前验收waf模块webshell效果,组网pc--waf--webserver,收集网络上的webshell样本,进行上传测试。由于数量较多8000+个样本,

只好写了个工具进行验收。

webshell下载地址https://github.com/tennc/webshell.git

0x01

客户端实现

使用python的requests_toolbelt 库进文件上传,这里有个坑,不能用requests库,requests上传文件只post一个数据包,在文件较大情况下,上传文件不全。

# -*- coding: utf-8 -*-
#@Time :2018/7/14 9:39
#@Author :cui0x01
#@file :webshell_send.py from requests_toolbelt import MultipartEncoder
import requests
import time
import os
import sys
import getopt global logdate
logdate = time.strftime('%Y%m%d%H%M%S',time.localtime())
def w_log(data):
''' :return:
'''
if not os.path.exists('log'):
os.mkdir('log')
log_name=os.path.join('log',logdate)
with open(log_name,'a+') as f:
f.write(data) def send_url(url,folder):
''' :return:
'''
abs_path = os.path.abspath(os.path.dirname(__file__))
folder_path=os.path.join(abs_path,folder)
try:
file_list= os.listdir(folder_path)
except BaseException as re:
print('''
%s is not exist, please check your folder.
'''%folder)
os._exit(0)
for filename in file_list:
#print(filename)
#print(url)
m = MultipartEncoder(
fields={'uploaded': (filename, open(os.path.join(folder_path,filename), 'rb'), 'text/plain')}
)
'''
Content-Disposition: form-data; name="uploaded"; filename="aa.php"
这里的files里uploaded 就是multipart协议name字段里面的uploaded
服务端也是根据isset( $_FILES[ 'uploaded' ],multipart协议name字段里面的uploaded接收文件。
如果修改,要保持一致。
'''
#print(len(files))
time.sleep(1)
#file=os.path.join(folder_path,filename)
#new_url=url+filename
try:
r = requests.post(url, data=m,headers={'Content-Type': m.content_type})
except BaseException as re:
print('waf reject: filename %s'%filename)
data='waf reject: filename %s \n'%filename
w_log(data) else:
print("waf allow: filename: %s"%filename)
data="waf allow: filename: %s \n"%filename
w_log(data) if __name__ == "__main__": try:
opts,args=getopt.getopt(sys.argv[1:],'u:f:')
u=opts[0][1]
f=opts[1][1]
#print(u,f)
except Exception as e:
print('''
******************************************************************
ex:python3 xx.py -u http://33.33.35.20/upload/upload.php -f white
-u: target url
-f: local folder
******************************************************************
''')
os._exit(0)
send_url(u,f)

0x02

服务端实现

用php接收,环境xp+phpstudy

<?php

if( isset( $_FILES[ 'uploaded' ] ) ) {

	$target_path  = "uploads/".basename( $_FILES[ 'uploaded' ][ 'name' ] );

    if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {

        echo '<pre>Your image was not uploaded.</pre>';
}
else { echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
} ?>

0x03

效果演示

服务端

客户端

抓包查看

文件上传成功

下载地址:https://github.com/cui0x01/python_daily/tree/master/upload_fuzz_tool

python文件上传工具实现的更多相关文章

  1. 文件上传工具类 UploadUtil.java

    package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  2. 文件上传工具swfupload[转]

    转至:http://zhangqgc.iteye.com/blog/906419 文件上传工具swfupload 示例: 1.JavaScript设置SWFUpload部分(与官方例子类似): var ...

  3. FastDFS 文件上传工具类

    FastDFS文件上传工具类 import org.csource.common.NameValuePair; import org.csource.fastdfs.ClientGlobal; imp ...

  4. spring mvc 文件上传工具类

    虽然文件上传在框架中,已经不是什么困难的事情了,但自己还是开发了一个文件上传工具类,是基于springmvc文件上传的. 工具类只需要传入需要的两个参数,就可以上传到任何想要上传的路径: 参数1:Ht ...

  5. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  6. Linux文件上传工具下载工具及详细使用说明

    对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令.今天,我们 ...

  7. [原创]Struts2奇葩环境任意文件上传工具(解决菜刀无法传文件或上传乱码等问题)

    上面这问题问得好  1 不知道大家有没碰到有些Strus2站点  上传JSP后访问404 或者503    注意我说的是404或503不是403(要是403换个css/img等目录或许可以)    但 ...

  8. python 文件上传本地服务器

    1:python之上传文件 1.1.url代码 """untitled1222 URL Configuration The `urlpatterns` list rout ...

  9. commons-fileload图片文件上传工具 , servlet文件图片上传案列

    本案列是java  maven工程小项目,提供个大家学习! 1.在pom.xml文件中导入依赖: <!--文件上传依赖--><dependency> <groupId&g ...

随机推荐

  1. GSM/GPRS/EDGE简介

    GSM 全球移动通信系统(Global System of Mobile communication),是全球应用最广泛的移动电话标准.GSM被认为是第二代移动通信标准(2G),同时它是一个开放的标准 ...

  2. Freeswitch中文用户手册(第四章 SIP)----2

    通过 B2BUA 呼叫 在真实世界中,bob 和 alice 肯定要经常改变位置,那么它们的 SIP 地址也会相应改变,并且,如果他们之中有一个或两个处于 NAT 的网络中时,直接通信就更困难了.所以 ...

  3. visual studio 2017发布dotnet core到docker

    docker的好处不用多说,有不了解的可移步<docker入门>,作为一个.net方面的老鸟也想早点搭上docker末班车,减少布署中的各种坑.以下我是在Visual Studio 201 ...

  4. 图解SQL inner join、left join、right join、full outer join、union、union all的区别

    转于:http://justcoding.iteye.com/blog/2006487 这是一篇来自Coding Horror的文章. SQL的Join语法有很多:有inner的,有outer的,有l ...

  5. 点滴积累【JS】---JS小功能(JS实现多功能缓冲运动框架)

    效果: 思路: 首先,多功能框架实现的功能是:css中所有的属性都可以添加进去(也可以把方法作为参数传递过去!),然后进行缓冲运动,比如:物体的高度.长度.颜色.字体大小.透明度等,都可以直接传入参数 ...

  6. Sublime Text 2中自定义代码模板

    Sublime Text 2中自定义代码模板 2012-12-06 10:13 9921人阅读 评论(0) 收藏 举报  分类: 编辑器-Sublime Text 2(5)  版权声明:本文为博主原创 ...

  7. WebView中input file的解决方法

    public class MyWb extends Activity { /** Called when the activity is first created. */ WebView web; ...

  8. 反射学习1、反射机制的介绍和基本的API的使用

    关于动态语言: 一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”.从这个观点看,Perl,Python,Ruby是动态语言,C+ ...

  9. Linux之手动设置IP地址

    一.引言 有时候我们装好了机器却发现网络没有设置,而服务器的机器一般都是没有界面的,那么该如何设置IP呢? 二.步骤 root用户,#vi /etc/sysconfig/network-scripts ...

  10. FileZilla Server-Can’t access file错误解决方法

    在某服务器上用FileZilla Server搭建了一个FTP服务器.开始使用没有发现任何问题,后来在向服务器传送大文件的时候,发现总是传输到固定的百分比的时候出现 ”550 can’t access ...