目录导航
poc2jar 简介
java编写,python作为辅助依赖的漏洞验证、利用工具,另外添加了编码模块、命令模块、常见漏洞利用GUI模块,加快测试效率.
个人写的很简陋的poc工具,每次遇到新的漏洞爆发出来,都要去复现,复现好以后保存到哪里就成了一个问题了,写这个工具,就是为了解决这个问题,希望能集合到个人主机内,然后可以根据不同的poc来使用
poc保存模块
举一个很简单的例子,hikvision的漏洞

截取到数据包如下:
GET /onvif-http/snapshot?auth=YWRtaW46MTEK HTTP/1.1
Host:x.x.x.x
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
直接放入到poc保存模块里,进行发包

可以看到返回的为二进制的图片,那我们可以把漏洞关键字设置为Content-Type:image/jpeg,只要请求这个路径返回这个,就判断为存在漏洞

满足条件,可以保存为yml文件
填入exp名称、yml文件的名称(这里名称需要带入组件,如这里应该为hikvision/test.yml)

至此,保存yml文件成功
exp利用模块
直接选择刚刚保 存的yml文件

输入刚刚的url,进行测试

存在相应回显即为存在漏洞
批量利用(这里多线程没有处理好,暂时不能太多目标,后期想更换为python多线程)

tasklist进程搜索模块
这里需要tasklist /svc格式的输入

常用命令模块

python利用模块

不足 todo
①.对于一些复杂请求的没有做到兼容测试,还是依赖于python模块去执行 暂时没找到好方法替代
②.对于多线程没有处理好 用python替代了
③.对于单个目标可以把对应模块的poc全部测一遍
④.所需要的文件有点多,考虑办法不需要文件,直接写进jar包内 2021.8.14(部分完成)
⑤.考虑和goby、xray格式相同(长久来看)
对文件的说明
①.poc文件夹存放poc文件,即yml文件
②.property文件夹存放cmdlists.txt,即常用命令模块;config.properties,即python路径,或者环境变量下python的调用命令;exetest.txt,即tasklist /svc查找的敏感进程;test.txt是保存的请求包
③.pythonexp文件夹存放的python脚本,usage放在了文件第一行,可以进行调用
安装说明
安装pyyaml库 5.3.1
运行
Mac OS
直接运行jar即可
Windows
直接运行jar即可
需要在命令行加入参数编码参数,否则会乱码,即java -jar -Dfile.encoding=utf-8 poc2jar.jar
编写过程的难点
其实真正的难点在于发请求,尤其是发POST请求,但是没有Content-type这样的漏洞payload的时候,有些漏洞请求是要POST,但是Content-type是不需要的,这就导致了该项目当时停滞不前,遇到一位大佬帮我解决问题,真的太感谢了,此处艾特董神 主要在于setIfNotSet自动加上了Content-type,所以我们重写这个方法 下面给出解决的demo

test类下定义一个setIfNotSet方法
public synchronized void setIfNotSet(String arg0, String arg1) {
// System.out.println("hook: " + arg0);
if ("Content-type".equals(arg0)) {
return;
}
if ("Connection".equals(arg0)) {
return;
}
if ("Accept".equals(arg0)) {
return;
}
super.setIfNotSet(arg0, arg1);
}
继承test类
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
// 设置通用的请求属性
Object target = connection;
if (!target.getClass().equals(sun.net.www.protocol.http.HttpURLConnection.class)) {
//https
Field field1 = connection.getClass().getDeclaredField("delegate");
field1.setAccessible(true);
target = field1.get(connection);
}
Field field2 = sun.net.www.protocol.http.HttpURLConnection.class.getDeclaredField("requests");
field2.setAccessible(true);
test customMessageHeader = new test();
2021.12.8更新v0.48
增加shiro RememberMe参数解密模块,
取自https://github.com/r00tuser111/SerializationDumper-Shiro
增加反编译工具fernflower.jar、shiro key文件keys.conf
举例说明: 使用ysoserial工具生成

进行解密:

使用shiro利用工具生成

进行解密:

2021.11.30更新v0.47
新增模块
1.增加CORS漏洞poc生成、JSONP漏洞poc生成,在日常挖洞过程中,会遇到cors、jsonp,有些是安服项目,有些是src项目,但是每次遇到这些漏洞,poc的生成会比较麻烦,像我自己平时也会挖掘一些漏洞交到src混混奖励等等

模块演示环境取自DoraBox(https://github.com/0verSp4ce/DoraBox)
CORS生成模块:

导出文件为poc2jar-cors.html

访问poc2jar-cors.html,即可看到弹窗:

这里有个CORS的小tips,在一些src站点中,把js代码保存成js文件,然后上传个新的html引用这个js文件,在一些环境中就可以执行了
JSONP模块:

导出文件为poc2jar-jsonp.html

访问poc2jar-jsonp.html,即可看到弹窗

优化部分: Python脚本模块增加报错机制,具体实现为:
Process pro = Runtime.getRuntime().exec(commands);
InputStream Output = pro.getInputStream(); // Output为正常信息
InputStream errorOutput = pro.getErrorStream(); // errorOutput为报错信息
界面如下:

2021.11.25更新v0.46
增加druid未授权漏洞利用,可以查看到jdbc链接、数据库用户名、sql语句、访问的uri、SESSION值

简单说下为什么要收集这些信息,jdbc的数据库名称、用户名、密码都有可能是一样的,这里收集也是为了站点的信息收集;
sql语句的一些变量可以收集起来进行fuzz,针对同一类开发团队来说,以及一些路由的可能语句;
uri信息这里做了jdbc执行次数的降序排列,也就是最上面的可能就是系统执行sql语句的路由,可以重点看下;
SESSION值,大家应该都知道,看SESSION的有效性了;
还有一个小优化就是bash命令增加去掉花括号和bash -c的版本,感谢@金鱼 师傅完善

发现python模块下的脚本可能会未响应,后续增加脚本的延时跳出未响应状态 (迭代的时候发现properties被覆盖了,已经更正过来,感谢@Tukali 师傅提交issue)
2021.11.20更新v0.45
1.base64解码优化,遇到奇数编码会报错,由于没有处理好报错问题,导致程序出错,优化如下:
(如该种解码只出现了三种情况,其他情况报错忽略)

2021.11.19更新v0.44
1.base64模块解码加入分段猜解,类似base64编码中可能存在部分非base64的加密部分,剔除后进行base64解密。参考(https://xz.aliyun.com/t/7779)
测试base64:
RuYW1lPVRfWlBHTF9ER1dSU0pHWlNYJklzaGFzWVBYSEJ5ZmlsZWQ9JnNlbGVjdGZpZWxkSWRzPSwmc2VsZWN0ZmllbGRJZHNWYWx1ZT0sY29td2lzZWR1Y29td2lzZWR1c3VibWl0PXRydWUmeXB4aHZhbHVlPTI3OTQ2Jn


2.优化cs payload,可以进行按钮保存,方便之后打开使用

2021.11.19更新v0.43
优化windows下的启动参数,由于mac下java默认是utf-8,windows下java默认是gbk
mac下

windows下

导致有师傅提了issue,这里思考了一下,把文本文档的编码更改一下应该就行了,windows下双击打开jar:

2021.11.18更新v0.42
1.增加命令模块(Bash模块、PowerShell模块、Python模块、Perl模块),
参考http://www.jackson-t.ca/runtime-exec-payloads.html
Bash模块

PowerShell模块

Python模块

Perl模块

2.增加cs快速生成命令模块,第二三四条可以绕过windows defender的上线命令,第一条只是做了加号处理

第五条效果不好

3.优化windows下体验(由于没在windows下测试,导致windows之前的jar都打不开,0.42开始,windows和mac都会进行一次测试)
todo:base64模块解码加入猜解,参考(https://xz.aliyun.com/t/7779)
2021.11.17更新v0.41
1.优化listview选择列表事件,可通过上下方向键进行选择,
由于使用方向键可以移动光标位置,所以可以通过监听onKeyReleased事件来实现,具体实现逻辑如下:
添加监听事件:
onKeyReleased="#mListView1Click2"
事件定义为:
public void mListView1Click2(KeyEvent event)
函数为:
mListView1.getSelectionModel().getSelectedItem()
通过读取光标来进行获取listview选中的内容
2.去除了文件中会显示.DS_store文件
3.增加druid1.0.16版本及以后的解密方式

4.增加编码模块(Unicode、URL、Base64、Hex、Html、ascii编码),由于平时编码工具很少,要么是burp的编码模块,很难用,要么是某些在线网站,在线网站进行编码,需要有互联网,就导致了在一些内网环境中无法进行编码、解码,所以写了进去,简单介绍下:
Unicode模块(遇见一些网页响应包里的无法转码,可以尝试这个模块)


URL模块(有些在URL里以百分号存在的字符,可以尝试这个模块)

Base64模块(形如base64格式的,可以尝试这个模块)


Html模块(形如&#格式的,可以尝试这个模块)


ascii模块(一般是在SQL注入中会用到,取ascii码进行比对)


2021.11.15更新 v0.4
1.完善密码模块对druid密码的解密,在druid 1.0.16版本及之前

发现有些时候poc利用的还不是很好,emmm在思考怎么优化
2021.8.14更新 v0.3
1.完善对于单个目标进行全部poc检测

2.python运行命令可在调用python脚本手动设置。
3.将python固定至jar包内部,减少config.properties文件;将test.txt固定至jar包内部,减少test.txt文件(对macos来说,windows还未适配)
后续看看windows怎么减少config.properties文件和test.txt文件,文件说明在最下面都有解释
基本已经完成我所需要的功能了,后续看有必要再次更新
2021.8.8更新 v0.2
1.批量模块更改为python批量,默认用的python3,所以需要配置一下python3命令。(emmm后续再看看改成go试试)
2.添加finalshell密码解密
3.添加seeyon数据库密码解密
注:
1.增加了pythonexp/poc2jarpiliang.py、url.txt文件,最好重新下载一遍项目里的txt
2.property/config.properties增加python2、python3,python脚本默认python2执行
python批量

finalshell密码解密(支持批量)

seeyon数据库密码解密(支持批量)

项目地址
GitHub
https://github.com/f0ng/poc2jar
下载地址
①GitHub:
- poc2jar-MACOS.zip2.91 MB
- poc2jar-WINDOWS.zip 3.13 MB
②云中转网盘:
yzzpan.com/#sharefile=DcO92G3o_23927
解压密码:www.ddosi.org
转载请注明出处及链接