
소셜 네트워크에서 사용자 이름으로 계정을 검색하는 OSINT 도구입니다.
록히드 SR-71 "블랙버드(Blackbird)"는 미국 항공우주 기업 록히드 코퍼레이션(Lockheed Corporation)이 개발하고 제조한 장거리, 고고도, 마하 3+ 전략 정찰기입니다.
This or previous program is for Educational purpose ONLY. Do not use it without permission.
The usual disclaimer applies, especially the fact that me (P1ngul1n0) is not liable for any
damages caused by direct or indirect use of the information or functionality provided by these
programs. The author or any Internet provider bears NO responsibility for content or misuse
of these programs or any derivatives thereof. By using these programs you accept the fact
that any damage (dataloss, system crash, system compromise, etc.) caused by the use of these
programs is not P1ngul1n0's responsibility.
git clone https://github.com/p1ngul1n0/blackbird
cd blackbird
pip install -r requirements.txt
python blackbird.py -u username
python blackbird.py --web
브라우저에서 http://127.0.0.1:9797에 접속하세요
python blackbird.py -f username.json
python blackbird.py --list-sites
python blackbird.py -u crash --proxy http://127.0.0.1:8080
기본적으로 발견된 계정만 표시되지만, 아래 인수를 사용하면 모든 계정을 볼 수 있습니다.
python blackbird.py -u crash --show-all
Blackbird는 Docker와 함께 사용할 수도 있습니다.
docker pull p1ngul1n0/blackbird:v2
docker run -p 9797:9797 p1ngul1n0/blackbird:v2 "--web"
결과는 PDF 보고서로 내보낼 수 있습니다.
blackbird-pdf-cover
가능한 경우 Blackbird는 사용자의 메타데이터를 추출하여 이름, 소개, 위치, 프로필 사진과 같은 데이터를 가져옵니다.
Blackbird는 차단을 방지하기 위해 각 요청에 1000개의 UserAgent 목록에서 무작위 UserAgent를 사용합니다.
Blackbird는 비동기 HTTP 요청을 보내 사용자 계정을 발견할 때 훨씬 더 빠른 속도를 제공합니다.
data.json 파일은 blackbird가 확인하는 모든 사이트를 저장합니다.
GET
{
"app": "ExampleAPP1",
"url": "https://www.example.com/{username}",
"valid": "response.status == 200",
"id": 1,
"method": "GET"
}
POST JSON
{
"app": "ExampleAPP2",
"url": "https://www.example.com/user",
"valid": "jsonData['message']['found'] == True",
"json": "{{\"type\": \"username\",\"input\": \"{username}\"}}",
"id": 2,
"method": "POST"
}
메타데이터 추출이 포함된 GET
{
"app": "Twitter",
"id": 3,
"method": "GET",
"url": "https://nitter.net/{username}",
"valid": "response.status == 200",
"metadata": [
{
"type": "generic-data",
"key": "Name",
"value": "soup.find('a', class_='profile-card-fullname')['title']"
},
{
"type": "generic-data",
"key": "Bio",
"value": "soup.find('div',class_='profile-bio').string"
},
{
"type": "generic-data",
"key": "Site",
"value": "soup.find('div',class_='profile-website').text.strip('\\t\\r\\n')"
},
{
"type": "generic-data",
"key": "Member since",
"value": "soup.find('div',class_='profile-joindate').find('span')['title']"
},
{
"type": "image",
"key": "picture",
"value": "'https://nitter.net'+soup.find('a', class_='profile-card-avatar')['href']"
},
{
"type": "location",
"key": "location",
"value": "soup.select_one('.profile-location:nth-of-type(2)').text.strip('\\t\\r\\n')"
}
]
}
프로젝트를 개선하고 버그를 수정해 준 모든 기여자에게 감사드립니다.
enumerate 구현 및 함수 코드 분할을 수행했습니다.언제든지 Twitter로 연락주세요.
검색에 포함할 사이트 제안이 있으면 템플릿에 따라 풀 리퀘스트를 만들어 주세요.