文章目录
- 前言
- 思路
- ICP备案
- 子域名枚举
- 收集可用服务
- 漏洞攻击
前言
上一谈我们讨论了自动化渗透测试的实验,但是他过于依赖fofa,不得不承认,fofa在资产收集这方面做的确实很厉害,但是就是需要花钱,那有没有不需要花钱都手段呢,当然是有的
思路
ICP备案
上周已经介绍了ICP备案了,这周就不继续了
子域名枚举
如果大家挖掘src应该知道,很多时候资产的domain列表大概是这样的
*.baidu.com
ac.3ce.com
有些资产可能需要你进一步爆破子域名,但有些不需要
同时爆破子域名用什么工具呢,这里我还是先用subfinder来进行,这里我们先不追究子域名是否齐全,主要把大概思路做出来
挖h1的都知道chaospy.py,这个工具生成的域名大概就是上面那样,所以我们先进行域名处理,把不需要子域名爆破的直接保存,需要爆破的爆破后保存,变成完整的
domains.txtls
*.hackerone.com
www.baidu.com
import os
os.system("cat domains.txtls |grep '*' >xing.txt")
os.system("sed -i 's/*.//' xing.txt")
os.system("cat domains.txtls |grep -v '*' >no_xing.txt")
os.system("mv no_xing.txt domains.txtls ")
os.system("subfinder -dL xing.txt -silent >>domains.txtls ")
os.system("rm xing.txt")
运行之后发现,域名变对了
收集可用服务
这里我做了长度切割,也方便以后大家多线程
然后naabu用来做端口扫描
httpx进一步进行http服务探测扫描,收集可以用的url到newurls.txtls
nabbu里面的端口都是可以修改调整的,大家根据自己情况添加
import os
file_lens=int(os.popen("cat domains.txtls | wc -l").read())
step=100
def get_domains_every_round(start,end):
os.system(f'sed -n "{start+1},{end}p" domains.txtls > domaint.txtls')
def naabu():
os.system("naabu -stats -rate 2000 -l domaint.txtls -p 80,443,8080,8000,8888,6379,6443,3306,6379 -o open-domain.txtls")
def httpx():
os.system("httpx -stats -rl 500 -l open-domain.txtls -o newurls.txtls")
for start in range(0,file_lens,step):
end=min(start+step,file_lens)
get_domains_every_round(start,end)
if os.path.exists("domaint.txtls")==False:
os.system("echo 'domaint.txtls generate failed,Unexpected'")
exit(0)
naabu()
if os.path.exists("open-domain.txtls")==False or int(os.popen("cat open-domain.txtls|wc -l").read())==0:
os.system(" echo 'this domain-list do not exist available domain'")
continue
httpx()
if os.path.exists("newurls.txtls")==False or int(os.popen("cat newurls.txtls|wc -l").read())==0:
os.system("echo 'this domain-list do not exist available url'")
continue
效果如下
漏洞攻击
这里还是使用fscan和nuclie
all exp
import os
import requests
from threading import Thread
os.system("cat domains.txtls |grep '*' >xing.txt")
os.system("sed -i 's/*.//' xing.txt")
os.system("cat domains.txtls |grep -v '*' >no_xing.txt")
os.system("mv no_xing.txt domains.txtls ")
os.system("subfinder -dL xing.txt -silent >>domains.txtls ")
os.system("rm xing.txt")
os.system(f"cat domains.txtls|sort|uniq -u >test.txt")
os.system(f"mv test.txt domains.txtls")
file_lens=int(os.popen("cat domains.txtls | wc -l").read())
step=1000
def get_domains_every_round(start,end):
os.system(f'sed -n "{start+1},{end}p" domains.txtls > domaint.txtls')
def naabu():
os.system("naabu -stats -rate 2000 -l domaint.txtls -p 80,443,8080,8000,8888,6379,6443,3306,6379 -o open-domain.txtls")
def httpx():
os.system("httpx -stats -rl 500 -l open-domain.txtls -o newurls.txtls")
def nuclei():
os.system("nuclei -stats -et ssl/weak-cipher-suites.yaml -l newurls.txtls -rl 500 -bs 35 -c 50 -mhe 10 -o res-tmp.txt -severity critical,medium,high | notify -silent")
if int(os.popen("cat res-tmp.txt|wc -l").read())>0:
os.system("cat res-tmp.txt >>res-all-vulnerability-results.txt")
os.system("rm res-tmp.txt")
def fscan():
os.system("fscan -uf newurls.txtls")
if os.path.exists("result.txt")==False:
return
os.system('cat result.txt|grep "\[+\]"|grep -v "\[Cloudfront\]">sucess.txt')
os.system("rm result.txt ")
if int(os.popen("cat sucess.txt|wc -l").read())>0:
os.system("cat sucess.txt >>res-all-vulnerability-results.txt")
with open("sucess.txt","r") as f:
for line in f.read().split("\n"):
if line =="":
continue
content={"msgtype": "text","text": {"content":line}}
requests.post('https://oapi.dingtalk.com/robot/send?access_token=',json=content)
def clear():
os.system("rm -f open-domain.txtls")
os.system("rm -f domaint.txtls")
os.system("rm -f newurls.txtls")
for start in range(0,file_lens,step):
end=min(start+step,file_lens)
get_domains_every_round(start,end)
if os.path.exists("domaint.txtls")==False:
os.system("echo 'domaint.txtls generate failed,Unexpected'")
exit(0)
naabu()
if os.path.exists("open-domain.txtls")==False or int(os.popen("cat open-domain.txtls|wc -l").read())==0:
os.system(" echo 'this domain-list do not exist available domain'")
continue
os.system("cat open-domain.txtls >>avaliabledomain.txtls")
httpx()
if os.path.exists("newurls.txtls")==False or int(os.popen("cat newurls.txtls|wc -l").read())==0:
os.system("echo 'this domain-list do not exist available url'")
continue
os.system("cat newurls.txtls >>avaliableurls.txtls")
t1 = Thread(target=nuclei)
t2 = Thread(target=fscan)
t1.start()
t2.start()
t1.join()
t2.join()
clear()
这里我加了一个钉钉的机器人通知
大家可以根据自己的需求调整