序文
前回の講演では、自動侵入テストの実験について話しましたが、彼は fofa に頼りすぎていました。fofa は資産収集が非常に得意であることは認めざるを得ませんが、お金がかかります。お金をかけずにそれを行う方法はありますか?お金を使う?、もちろんあります
一連の考え
ICP申請
ICP ファイリングは先週紹介されたため、今週は続きません
サブドメインの列挙
src を掘ると、多くの場合、アセットのドメイン リストは次のようになることを知っておく必要があります。
*.baidu.com
ac.3ce.com
アセットによっては、サブドメイン名をさらにブラストする必要がある場合がありますが、そうでないものもあります。
サブドメイン名を同時にブラストするためにどのようなツールを使用しますか? ここでは、最初にサブファインダーを使用します。ここでは、サブドメイン名がブラストされているかどうかは調査しません。サブドメイン名は完成しましたが、主に
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()
ここでは DingTalk ロボット通知を追加しました。
必要に応じて調整できます。