python文件上传工具实现
2024-09-19 00:29:20
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
最新文章
- EasyUI树和Ztree树冲突问题
- js模版引擎handlebars.js实用教程——由于if功力不足引出的Helper
- WOJ-1203
- Qt 二级菜单栏 中文无法输入问题
- Java for LeetCode 041 First Missing Positive
- javascript中this的使用
- ExtJS4加载FormPanel数据的几种方式
- Script.NET Perl解释器代码已经在GitHub开源发布
- ios CAF音频转换为MP3
- 【贪心】CSU 1809 Parenthesis (2016湖南省第十二届大学生计算机程序设计竞赛)
- appium 使用findElementByAndroidUIAutomator 定位元素示例
- hive的udf制剂
- K-Means算法
- 分页工具类 BaseAction
- 201521123044 《Java程序设计》第14周学习总结
- Javascript、CSS、HTML面试题
- c++第七周学习小结
- AI 奇异值分解(SVD)
- winfrom 动态添加控件,以及删除
- 20155308 《网络攻防》 Exp2 后门原理与实践
热门文章
- etymology-F
- photoshop 动作 自己定义快捷键 播放选定的动作
- Objective-C之@protocol
- 从头认识Spring-2.3 注解装配-@autowired(3)-通过构造器方法注入
- builtroot make menuconfig流程
- #include";";和#include<;>;的区别
- c++11 thread (目前我使用的ZThread库)
- linux学习笔记22--命令ln
- Swift培训
- Zookeeper中的选举机制