촬리의늘솔길

XSS 본문

✍~2022/web보안

XSS

리촬리 2021. 7. 7. 17:23

공통
- 사용자 입력은 일단은 txt로 받으면 좋겠음(나중에 GUI에 입력 받은 정보를 txt에 저장하고 읽어오는 방식)
- 공격 패턴은 일단 가이드 기준으로 가능한 부분을 진행하는 것이 기본이며, 나중에 여유되면 추가 패턴을 넣기 쉽게 txt에서 읽어오는 방식이 좋음
- 양호/취약을 판별하는 방법이 어떤 패턴이 가능한지 먼저 고려해보고 정 힘들면 확인필요로 판별하고 기본정보들을 제공하면 됨
- 점검결과 대쉬보드에 표시될 정보들을 고려해야 함(기본적으로 취약인 경우에 요청URL과 파라미터, 모든 경우에 해당 스크린샷 표시)
- 스크린샷 등은 공통되기 때문에 추후 별도로 진행해도 됨, 요청URL과 파라미터는 출력할 수 있도록 우선 구현 필요함
- 로그인이 필요한 항목의 경우에는 쿠키나 세션 정보 입력이 필요함, 일부 세션/쿠키 관련 항목에서 로그인 정보를 입력받아 서버에서 세션을 내려받아 적용시키는 것을 구현하여 범용적으로 사용하면 좋을 듯
- 취약한 케이스를 보여줄 수 있는 테스트 대상 웹사이트가 준비되어야 함
- 코드를 구현할 때 함수화 시켜서 진행하는 연습하기, 각 항목모듈을 나중에 통합시킬때에 대한 고려도 하면서 구현하기

 

11. XSS
- 입력 : 페이지 URL과 파라미터
- 먼저 response 메시지에 <와 >가 &lt와 &gt로 치환되어나타나는지를 확인 -> 치환되었으면 양호
- 그 다음 치환 안되었으면 파라미터에 공격구문 넣어서 요청 보내 확인 (대표 케이스로 가이드에 있는 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 메시지에 <와 >가 &lt와 &gt로 치환되어나타나는지를 확인 -> 치환되었으면 양호
    #치환 안되었으면 파라미터에 공격구문 넣어서 요청 보내 확인
    #케이스에 따라 판별하는 방법을 다르게 해야함 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개

 

728x90

'✍~2022 > web보안' 카테고리의 다른 글

약한문자열강도 중간점검  (0) 2021.08.04
python 새롭게 알게된것(1)  (0) 2021.08.04
중간 점검  (0) 2021.07.22
약한문자열, 정보누출  (0) 2021.07.07
경로추적/파일다운로드  (0) 2021.07.07