웹 해킹 책을 샀는데 적을 알아야 전쟁에서 승리할 수 있다고 합니다.
즉, 상대의 정보를 파악하는게 해킹의 첫걸음이랍니다.
정보를 수집하는 방법은 다양하지만 우선 whois를 사용하는 방법이 있습니다.
웹사이트들은 도메인을 등록할 때 정보를 제공해야하는데 그 정보를 열람할 수 있는게 바로 whois입니다.
pip install pyhton-whois
파이썬 모듈도 있으니 설치해서 사용가능합니다.
import whois
information = whois.whois(url or ip)
사용 방법도 비교적 간단합니다. whois 함수에 url 혹은 ip 같이 탐색가능한 정보를 넘겨주면 정보를 조회할 수 있습니다.
그리고 정보 수집을 위해서 스캐너를 구현해볼 수도 있습니다.
제가 말하는 스캐너가 하는 역할은 해당 도메인의 리소스를 탐색하는 일을 합니다.
만약 사이트에 접속했을 때 버튼이나 링크 같은 것들을 클릭해 해당 사이트의 다른 page로 이동할 수 있을겁니다.
이런 page들로 이동가능한 링크들을 수집하는 것도 정보 수집입니다.
로직은 간단합니다.
스캔하고 싶은 사이트에 http get 요청을 보내서 html 소스를 response로 받는다.
=> html 정보를 BeautifulSoup 같은 구문분석 기능으로 분석하여 a 태그만 따로 추출한다.
=> a 태그의 집합에서 href 속성이 가르키는 url을 추출한다.
import requests
from bs4 import BeautifulSoup, SoupStrainer
response = requests.get(domain)
content = response.content
results = set()
links = BeautifulSoup(content, features="html.parser", parse_only=SoupStrainer("a"))
for link in links :
href = link["href"]
if domain not in path and href != "http" :
results.add(domain + href)
else :
results.add(href)
이런 식으로 간단하게 구현해봤습니다. domain을 통해서 해당 사이트의 main 화면의 html 소스를 받아올테고 그 메인 화면에서 이동 가능한 페이지들의 url을 수집했습니다.
메인화면에서 수집한 다른 page들의 링크들을 수집한 뒤, 다시 수집한 링크들에 같은 로직을 반복하여 더 많은 링크들을 얻어올 수 있습니다. 메인 화면에서 이동한 페이지에서 메인 화면에 없는 새로운 링크들을 만날 수도 있으니까요.
이런 로직을 구현할 때는 수집한 href 속성이 가르키는 곳이 page의 링크인지 단순 리소스인지 구분할 필요가 있습니다.
if (
path.startswith("#")
or path.startswith("javascript")
or path.startswith(".jpg")
or path.startswith(".png")
or path.startswith(".css")
or path.startswith(".js")
) :
continue
이런 식으로 만약 href가 가르키는 곳이 jpg나 png라면 그건 웹 페이지가 아니라 단순한 페이지 자원이기 때문에 수집 대상에서 제외시켜줘도 된다는 뜻입니다.
오늘은 몸 컨디션이 안좋아서 여기까지만 적습니다.
이만.
출처 : 파이썬 해킹 레시피 - YES24
'프로그래밍 > 컴알못 공부' 카테고리의 다른 글
컴알못의 SQL 공부 (트랜잭션) (0) | 2022.01.07 |
---|---|
컴알못의 SQL 공부 (내장함수, 프로시저, 트리거, 사용자정의함수) (0) | 2022.01.06 |
컴알못의 SQL 공부 (DDL, DCL) (0) | 2022.01.05 |
컴알못의 SQL 공부 (2) (0) | 2022.01.04 |
컴알못의 SQL 공부 (0) | 2022.01.03 |
댓글