agencies

exploit-db 검색 및 파싱 본문

Ⅰ. 프로그래밍

exploit-db 검색 및 파싱

agencies 2024. 9. 18. 21:23

 

오늘은 특정 키워드를 exploit-db에 검색하고,

도출된 검색 결과를 가져오는 파이썬 프로그래밍을 진행했습니다.

 

※ pip 설치 내용

1. selenium

2. beautifulsoup4

3. requests

 

소스코드

#버전 0.2


from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import time

import requests

# exploit-db 검색
test = input("keyword: ")


# ChromeOptions
chrome_options = Options()
#chrome_options.add_argument('--headless')  # 브라우저 UI 없이 실행
chrome_options.add_argument('--disable-gpu')  # GPU 사용 비활성화

# 웹 드라이버 객체 생성 + 10초 대기
driver = webdriver.Chrome(options=chrome_options)
driver.implicitly_wait(10)

# exploit-db URL
url = 'https://www.exploit-db.com/'
driver.get(url)


#robots
headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"}

try:
    # 검색바 요소 찾기
    time.sleep(1)
    search_box = driver.find_element(By.CSS_SELECTOR, 'input[type="search"]')

    # 검색진행
    time.sleep(1)
    search_box.send_keys(test)

    time.sleep(1)
    search_box.send_keys(Keys.RETURN)


    # 페이지의 HTML 콘텐츠
    num = 1
    while True:
        time.sleep(1)
        page_source = driver.page_source

        # BeautifulSoup을 사용하여 페이지 파싱
        soup = BeautifulSoup(page_source, 'html.parser')


        a_tags = soup.find_all('a')

        for a_tag in a_tags:
            href = a_tag.get('href')
            text = a_tag.get_text(strip=True)

            if '/exploits/' in href:
                print(f'Text: {text}\nHref: {href}\n')
                testurl = (f"https://www.exploit-db.com{href}")
                #print(testurl)
                testres = requests.get(testurl,headers=headers)
                testsoup = BeautifulSoup(testres.text,'html.parser')

                #제목
                in_title = testsoup.find(class_='card-title text-secondary text-center')
                in_title = in_title.get_text(strip=True)
                print('제목:',in_title)



                #print(testsoup)







                # 모든 info-title 요소를 찾기
                info_titles = testsoup.find_all(class_='info-title')
                info_ary = []


                #모든 stats-title 요소 찾기
                stats_titles = testsoup.find_all(class_='stats-title')
                stats_ary = []
            
                
                for info_title in info_titles:
                    title_text1 = info_title.get_text(strip=True)
                    info_ary.append(title_text1)

                for stats_title in stats_titles:
                    title_text2 = stats_title.get_text(strip=True)
                    stats_ary.append(title_text2)


                    
                print(info_ary)
                print(stats_ary)





        # Next 버튼 찾기
        next_button = driver.find_element(By.CSS_SELECTOR, 'li.paginate_button.page-item.next a.page-link')

        # Next 버튼 클릭
        if next_button:
            next_button.click()
            time.sleep(2)
            num+=1

        print("=====================================================================================")

        print('현재페이지 : %d'%num)





        
except:
    print('몹시 끝')

 


이렇게 log4j를 입력하면,

 

 

위와같이 창이 나타나고,

 

 

목록을 읽어오고 (1페이지)

목록에 해당되는, 세부 내용(cve edb-id 등)을 불러옵니다.

 

 

만약 2페이지가 있다면 위와 마찬가지로 동작하고, 마지막 페이지까지 진행합니다. 

'Ⅰ. 프로그래밍' 카테고리의 다른 글

파이썬 프로그래밍 (이미지 실행파일)  (3) 2024.11.05
CVE 검색 및 파싱  (0) 2024.09.20
[CodeUp] 1425 : 자리 배치  (0) 2024.04.16
[CodeUp] 1420 : 3등 찾기  (0) 2024.04.16
[CodeUp] 1416 : 2진수 변환  (0) 2024.04.16