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

最新文章

  1. EasyUI树和Ztree树冲突问题
  2. js模版引擎handlebars.js实用教程——由于if功力不足引出的Helper
  3. WOJ-1203
  4. Qt 二级菜单栏 中文无法输入问题
  5. Java for LeetCode 041 First Missing Positive
  6. javascript中this的使用
  7. ExtJS4加载FormPanel数据的几种方式
  8. Script.NET Perl解释器代码已经在GitHub开源发布
  9. ios CAF音频转换为MP3
  10. 【贪心】CSU 1809 Parenthesis (2016湖南省第十二届大学生计算机程序设计竞赛)
  11. appium 使用findElementByAndroidUIAutomator 定位元素示例
  12. hive的udf制剂
  13. K-Means算法
  14. 分页工具类 BaseAction
  15. 201521123044 《Java程序设计》第14周学习总结
  16. Javascript、CSS、HTML面试题
  17. c++第七周学习小结
  18. AI 奇异值分解(SVD)
  19. winfrom 动态添加控件,以及删除
  20. 20155308 《网络攻防》 Exp2 后门原理与实践

热门文章

  1. etymology-F
  2. photoshop 动作 自己定义快捷键 播放选定的动作
  3. Objective-C之@protocol
  4. 从头认识Spring-2.3 注解装配-@autowired(3)-通过构造器方法注入
  5. builtroot make menuconfig流程
  6. #include&quot;&quot;和#include&lt;&gt;的区别
  7. c++11 thread (目前我使用的ZThread库)
  8. linux学习笔记22--命令ln
  9. Swift培训
  10. Zookeeper中的选举机制