공통
- 사용자 입력은 일단은 txt로 받으면 좋겠음(나중에 GUI에 입력 받은 정보를 txt에 저장하고 읽어오는 방식)
- 공격 패턴은 일단 가이드 기준으로 가능한 부분을 진행하는 것이 기본이며, 나중에 여유되면 추가 패턴을 넣기 쉽게 txt에서 읽어오는 방식이 좋음
- 양호/취약을 판별하는 방법이 어떤 패턴이 가능한지 먼저 고려해보고 정 힘들면 확인필요로 판별하고 기본정보들을 제공하면 됨
- 점검결과 대쉬보드에 표시될 정보들을 고려해야 함(기본적으로 취약인 경우에 요청URL과 파라미터, 모든 경우에 해당 스크린샷 표시)
- 스크린샷 등은 공통되기 때문에 추후 별도로 진행해도 됨, 요청URL과 파라미터는 출력할 수 있도록 우선 구현 필요함
- 로그인이 필요한 항목의 경우에는 쿠키나 세션 정보 입력이 필요함, 일부 세션/쿠키 관련 항목에서 로그인 정보를 입력받아 서버에서 세션을 내려받아 적용시키는 것을 구현하여 범용적으로 사용하면 좋을 듯
- 취약한 케이스를 보여줄 수 있는 테스트 대상 웹사이트가 준비되어야 함
- 코드를 구현할 때 함수화 시켜서 진행하는 연습하기, 각 항목모듈을 나중에 통합시킬때에 대한 고려도 하면서 구현하기
11. XSS
- 입력 : 페이지 URL과 파라미터
- 먼저 response 메시지에 <와 >가 <와 >로 치환되어나타나는지를 확인 -> 치환되었으면 양호
- 그 다음 치환 안되었으면 파라미터에 공격구문 넣어서 요청 보내 확인 (대표 케이스로 가이드에 있는 5개 공격패턴 우선 적용 - 힘들면 <script>와 <img>만 우선)
- 케이스에 따라 판별하는 방법을 다르게 해야함 alert를 쓰는 경우와 안쓰고 다른 구문(onerror나)을 쓰는 경우 등
#메모장읽고 수정
import requests
from bs4 import BeautifulSoup
#url =http://127.0.0.1:8001/dvwa/vulnerabilities/xss_r/
#1. main함수: url과 파라미터 입력받기
def main():
url = input("url입력하시오:")
param = input("파라미터 입력하시오:")
save_txt(url,param)
pattern_load(url,param)
return 0
#텍스트파일에저장
def save_txt(url,param):
f=open("url.txt","w")
f.write(url)
f.close()
f2 = open("param.txt","w")
f2.write(param)
f2.close()
return 0
# 헤더세팅
def set_header():
f = open("cookie.txt", 'r')
line=f.readline()
f.close()
return line
#. 크롤링함수
def gethtml(res):
req = requests.get(res)
html = req.text
soup = BeautifulSoup(html, 'html.parser')
print(soup)
return soup
#3.공격 로드 함수:url+파라미터
def pattern_load(url,param):
f = open("pattern_2.txt",'r',encoding='UTF8')
pattern = f.readline()
while pattern:
res,data = check_request(url,param,pattern)
gethtml(res)
f.close()
#4. 점검요청함수
def check_request(url,param,pattern):
header = {'Cookie' : set_header()}
data = {'param' : 'pattern'}#여기에..대입이 되긴할까?
response = requests.post(url=url, headers=header, data=data)
res = response.url
status = response.status_code
return res,data
#4.1 공격구문 파라미터에 넣어서 돌리기
#4.1 공격결과 확인
#점검결과 함수 :db에 <script></script> ==> 취약
#먼저 response 메시지에 <와 >가 <와 >로 치환되어나타나는지를 확인 -> 치환되었으면 양호
#치환 안되었으면 파라미터에 공격구문 넣어서 요청 보내 확인
#케이스에 따라 판별하는 방법을 다르게 해야함 alert를 쓰는 경우와 안쓰고 다른 구문(onerror나)을 쓰는 경우 등
#url은 71줄
if __name__ == "__main__":
main()
#참고https://blog.naver.com/takudaddy/222269347187
#공격패턴 https://owasp.org/www-community/xss-filter-evasion-cheatsheet
더 해야할것
url + 파라미터 = 공격구문 붙여야함 . 지금 post방식으로 하긴했는데 이게 된건지 모르겠음
실행해서
1. html코드에서 태그가 필터링 되었는지 .find로 찾기
2.공격구문포함된 url이 실행되는지,
- alert일때
- img태그일때
나머지 3개
'✍2021,2022 > web보안' 카테고리의 다른 글
약한문자열강도 중간점검 (0) | 2021.08.04 |
---|---|
python 새롭게 알게된것(1) (0) | 2021.08.04 |
중간 점검 (0) | 2021.07.22 |
약한문자열, 정보누출 (0) | 2021.07.07 |
경로추적/파일다운로드 (0) | 2021.07.07 |