基础设施推荐:HTTP上传下载服务器

admin 2024年4月17日17:09:28评论4 views字数 3945阅读13分9秒阅读模式
基础设施推荐:HTTP上传下载服务器

0x00 前言
在渗透测试过程中,主要是有以下几种情况会用到HTTP服务器。
1、扫描工具的测试,记录请求记录。2、托管远程下载服务,下载测试工具、shellcode等数据。3、托管远程上传服务器,回传测试数据。
对于场景1,一般都会选择使用专门的HTTPlog服务器。
一般方案是使用burpsuite和yakit自带的Log服务器,或自己配置HTTPLog服务器。
对于场景2,一般是直接使用Python等环境自带模块启动HTTP服务。
使用自带的模块,优点就是便捷,但是在认证功能、下载速度、错误处理等方面都存在较多限制。并且一般需要用完即关,不然会泄露服务器数据。
对于场景3,需要在常规HTTP服务器的基础上对代码进行修改,支持保存上传数据包。
后续内容会附带笔者自己写的http服务器和推荐的开源HTTP服务器。
0x01 需要什么样的HTTP服务器
对于渗透测试而言,对于HTTP服务器,一般需要如下的基础需求:
1、能够添加授权功能,防止未授权访问导致数据泄漏。2、能够支持Curl、Wget等常见工具的上传和下载。3、默认不开启目录浏览功能,防止绕过授权后,目录下所有数据泄漏。
为了满足常用的认证、下载和上传需求,使用python编写了一个简单的HTTP服务器。经过一段时间的使用,发现由于代码比较简单,在大文件的上传上存在很多可以优化的地方。
因此,又提出了新的需求:
4、打包运行、没有依赖、稳定运行,不容易崩溃。5、支持中断继续上传、中断继续下载等功能。6、能够兼容curl、wget程序的上传下载功能。
翻开收藏夹,找到了已有功能比较接近的Go语言项目 UpDownFile。
作者@jan-bar已经实现好了复杂的断点上传、下载功能,只需要再实现简单的认证功能、关闭目录浏览,
秉承着不重复开发活跃项目的原则,在Github和@jan-bar和提上需求,作者回复的很快,至今已完整实现了对应的需求。
0x02 Python一句话启动HTTP服务器
# Python >= 2.4python -m SimpleHTTPServer 8000# Python 3.xpython -m http.server 8000
0x03 基于参数认证的HTTP上传下载服务器
这是由笔者编写的简单HTTP服务器,与常见服务器不同的是,本程序更注重下载程序的兼容性。通过实现基于参数值的认证方式,基本适用于所有的下载程序,如bitadmin.exe等不支持添加设置请求头认证的程序。
import osimport timefrom flask import Flask, request, send_fileROOT_PATH = os.path.abspath(os.path.dirname(__file__))BASE_PATH = Nonebasic_path = BASE_PATH if BASE_PATH else ROOT_PATHupload_path = os.path.join(basic_path, 'uploads')download_path = os.path.join(basic_path, 'download')AUTH_PARAM = "auth"  # 自定义认证参数AUTH_CUSTOMS = "passpass"  # 自定义认证参数值AUTH_DEFAULT = time.strftime("%Y%m%d%H")app = Flask(__name__)def auth_check(request_context):    request_auth_info = str(request_context.args.get(AUTH_PARAM))    print(f"auth_info: {request_auth_info} <-> AUTH_PARAM:{AUTH_PARAM} <-> AUTH_VALUE:{AUTH_CUSTOMS} <-> AUTH_DEFAULT:{AUTH_DEFAULT}")    return request_auth_info == AUTH_DEFAULT if AUTH_CUSTOMS is None else request_auth_info == AUTH_CUSTOMS@app.route("/download/<filename>", methods=["GET"])def download_file(filename):    try:        # 获取查询参数        if not auth_check(request):            return "Unauthorized", 401        # Download ing        if not os.path.exists(download_path):            os.makedirs(download_path)        file_path = os.path.join(download_path, filename)        return send_file(file_path, as_attachment=True)    except Exception as e:        # return str(e)        return "error"@app.route('/upload', methods=["GET","POST"])def upload_file():    try:        if not auth_check(request):            return "Unauthorized", 401        # Download ing        if not os.path.exists(upload_path):            os.makedirs(upload_path)        if 'file' not in request.files:            return "No file part"        file = request.files['file']        if file.filename == '':            return "No selected file"        if file:            filename = os.path.join(upload_path, file.filename)            file.save(f"{filename}.{time.time()}")            return "File Uploaded success!"        else:            return "File Uploaded failure!"    except Exception as e:        # return str(e)        return "error"if __name__ == "__main__":    app.run(host="0.0.0.0", port=8888)
使用方法:
首先配置 自定义认证参数和自定义认证参数值,如:

AUTH_PARAM = "auth"

AUTH_CUSTOMS = "passpass"

文件下载和上传时,在请求URL后添加 ?auth=passpass.
# curl 下载curl http://127.0.0.1/download/xxx?auth=passpass -o xxx# 上传curl -X POST -F '[email protected]' http://example.com/upload?auth=passpasscurl -F "[email protected]" http://example.com/upload?auth=passpass
注: 由于文件是一次性写入内存,因此存在性能上的限制,单个文件不建议超过500MB。
0x04 UpDownFile 开源HTTP上传下载服务器

UpDownFile是@jan-bar使用Go编写的简易上传下载文件服务器,经过这几天不断地Issue,目前已经很适合渗透测试小伙们的体质。

1、完美支持Curl、wget等常见工具的断点上传和断点下载。2、-auth参数 支持http base 认证3、-deny参数 支持关闭目录浏览功能

下载安装

# 项目地址jan-bar/UpDownFile: 简易上传下载文件服务器https://github.com/jan-bar/UpDownFile# 安装go install github.com/jan-bar/UpDownFile@latest# 编译 需要Go 1.22build.bat

常用命令

# 启动服务upDownFile.exe -s :8080 # 启动认证服务 且关闭目录浏览 (建议)upDownFile.exe -s :8080 -auth "user:pass" -deny# 下载文件# upDownFile cli 下载upDownFile cli -c -auth "user:pass" -o example.txt "http://xxx/example.txt"# curl等程序下载wget --user "user" --password "pass" --content-disposition "http://xxxx/example.txt"curl -u "user:pass" -C - -OJ "http://xxxx/example.txt"# 上传文件# upDownFile.exe cli 上传upDownFile.exe cli -c -auth "user:pass" -d @example.txt "http://xxxx/example.txt" # curl等程序上传 curl -u "user:pass" -C - -T example.txt "https://xxxx/example.txt"

服务端启动时,会输出常用的命令和参数值,更多使用方式可以查看ReadMe文件。

0x05 总结
虽然目前很多C2都自带了HTTP服务,但还是会有很多场景下需要用到自定义的HTTP服务器。
本文主要是分享笔者自身对于HTTP服务的额外需求和实现,如有雷同,纯属打工。
 

原文始发于微信公众号(NOVASEC):基础设施推荐:HTTP上传下载服务器

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月17日17:09:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基础设施推荐:HTTP上传下载服务器https://cn-sec.com/archives/2665859.html

发表评论

匿名网友 填写信息