Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 도구모음
- 웹 해킹 입문
- 불법유통
- nurisec
- suninatas
- PHP
- 여행
- 대외활동
- 국가정보원
- webhacking
- UKPT level
- 국정원
- HTML
- 정보보안
- 경기팀
- 연구모임
- 화학물질
- 불법유통근절
- codeup
- 프로젝트
- UKPT
- 12기
- 국가기록원
- 화학물질안전원
- MITRE ATT&CK
- Los
- 화학물질불법유통온라인감시단
- 기타정보
- Service
- 파이썬
Archives
- Today
- Total
agencies
cvedetails에서 description 가지고 오기 본문
import os
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# CVE description 가져오기
def fetch_cvedetails_description(cve_id):
print(f"Fetching {cve_id} from web")
url = f"https://www.cvedetails.com/cve/{cve_id}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
try:
response = requests.get(url, headers=headers, timeout=10)
if response.status_code != 200:
print(f"Failed to fetch {cve_id}, Status Code: {response.status_code}")
return "No description found"
soup = BeautifulSoup(response.text, 'html.parser')
description_tag = soup.find('div', {'id': 'cvedetailssummary'})
description = description_tag.text.strip() if description_tag else "No description found"
return description
except requests.exceptions.RequestException as e:
print(f"Error fetching {cve_id}: {e}")
return "No description found"
# CSV 파일 생성 및 갱신 함수
def save_to_csv(data, filename="cve_vulnerabilities.csv"):
columns = ["index", "cve_number", "description"]
df = pd.DataFrame(data, columns=columns)
if os.path.exists(filename):
existing_df = pd.read_csv(filename)
df = pd.concat([existing_df, df], ignore_index=True)
df.to_csv(filename, index=False)
print(f"Data saved to {filename}")
# 기존 CSV 파일에서 CVE 목록 로드
def load_existing_cves(filename="cve_vulnerabilities.csv"):
if os.path.exists(filename):
df = pd.read_csv(filename)
return set(df['cve_number']), len(df)
return set(), 0
# 메인 코드
def main():
data = []
filename = "cve_vulnerabilities.csv"
# 기존 CSV 파일에서 중복된 CVE 번호 확인
existing_cves, last_index = load_existing_cves(filename)
# 새로 추가할 CVE 번호 범위 설정 (예제: CVE-2023-0050부터 CVE-2023-0200까지)
cve_ids = [f"CVE-2023-{i:04d}" for i in range(1,1000)]
for cve_id in cve_ids:
# 이미 수집된 CVE 번호는 건너뛰기
if cve_id in existing_cves:
print(f"Skipping {cve_id}, already exists in the CSV.")
continue
# CVE description 가져오기
description = fetch_cvedetails_description(cve_id)
last_index += 1
data.append([last_index, cve_id, description])
# 서버 과부하를 방지하기 위해 잠시 대기
time.sleep(1)
# CSV 파일로 저장 (기존 데이터에 추가)
save_to_csv(data, filename)
# 코드 실행
if __name__ == "__main__":
main()
기존 cve 설명이 있는 csv 파일을 로드하는데 만약 없다면 새로 만들고
있다면 중복 cve 값은 제외하고 추가하는 코드입니다.
이런식으로 저장됩니다.
※ 고도화된 코드
ctrl + c 로 중단할때에도 저장!
중복으로 저장되는 것 방지 코드!
import os
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# CVE description 가져오기
def fetch_cvedetails_description(cve_id):
print(f"Fetching {cve_id} from web")
url = f"https://www.cvedetails.com/cve/{cve_id}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
try:
response = requests.get(url, headers=headers, timeout=10)
if response.status_code != 200:
print(f"Failed to fetch {cve_id}, Status Code: {response.status_code}")
return "No description found"
soup = BeautifulSoup(response.text, 'html.parser')
description_tag = soup.find('div', {'id': 'cvedetailssummary'})
description = description_tag.text.strip() if description_tag else "No description found"
return description
except requests.exceptions.RequestException as e:
print(f"Error fetching {cve_id}: {e}")
return "No description found"
# CSV 파일 생성 및 갱신 함수
def save_to_csv(data, filename="cve_vulnerabilities.csv"):
if not data:
print("No new data to save.")
return
columns = ["index", "cve_number", "description"]
df = pd.DataFrame(data, columns=columns)
if os.path.exists(filename):
existing_df = pd.read_csv(filename)
df = pd.concat([existing_df, df], ignore_index=True)
df.to_csv(filename, index=False)
print(f"Data saved to {filename}")
# 기존 CSV 파일에서 CVE 목록 로드
def load_existing_cves(filename="cve_vulnerabilities.csv"):
if os.path.exists(filename):
try:
# 파일을 다양한 인코딩 방식으로 읽기 시도
df = pd.read_csv(filename, encoding='utf-8')
except UnicodeDecodeError:
print("UTF-8 decoding failed, trying ISO-8859-1...")
df = pd.read_csv(filename, encoding='ISO-8859-1') # 대안 인코딩 방식 시도
return set(df['cve_number']), len(df)
return set(), 0
# 메인 코드
def main():
data = []
filename = "cve_vulnerabilities.csv"
# 기존 CSV 파일에서 중복된 CVE 번호 확인
existing_cves, last_index = load_existing_cves(filename)
# 새로 추가할 CVE 번호 범위 설정 (예제: CVE-2023-0900부터 CVE-2023-0905까지)
cve_ids = [f"CVE-2023-{i:04d}" for i in range(5, 50)]
try:
for cve_id in cve_ids:
# 이미 수집된 CVE 번호는 건너뛰기
if cve_id in existing_cves:
print(f"Skipping {cve_id}, already exists in the CSV.")
continue
# CVE description 가져오기
description = fetch_cvedetails_description(cve_id)
# 유효한 description만 추가
if description != "No description found":
last_index += 1
data.append([last_index, cve_id, description])
except KeyboardInterrupt:
print("\nProcess interrupted by user. Saving progress...")
finally:
# 새롭게 추가된 데이터가 있는 경우에만 CSV 파일로 저장
if data:
save_to_csv(data, filename)
print("Process completed. Data saved.")
# 코드 실행
if __name__ == "__main__":
main()
만능 gpt..
(참고로 csv 파일을 보면 특정 cve-num은 저장되지 않는데 이는 description이 없어서 그렇다)
보면
31 32 가 없는데
이렇게 없을 경우는 추가가 안된다.
'Ⅲ. 정보보안' 카테고리의 다른 글
파이썬 해킹 입문(기본 준비) (2) | 2024.12.08 |
---|---|
CTF XOR 문제 만들기 (0) | 2024.11.25 |
gpt 한테 코드 추상화(AST) 를 작성해달라고 요청을 했다. (0) | 2024.11.12 |
linevul + deepdfa 사전 준비 방법 (최종) (0) | 2024.11.06 |
deepdfa linevul 오류 해결 (1) | 2024.11.05 |