▶ SQLI(SQL Injection)

 

- 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여

  데이터베이스가 비정상적인 동작을 하도록 조작하는 행위

 

▶ 코드 분석 

 

from core.libs import insert_to_params_urls // URL 입력 함수

 

from wordlists import sqli_payloads,sql_err // 페이로드 전달 함수

페이로드 전달해주고 오류 확인해주는 함수로 보임

 

from urllib.parse import urlparse // URL 구문 분석 함수

URL 6개의 구성 요소로 구문 분석하여 6개 항목 네임드 튜플 반환

 

from re import findall // 문자열 패턴 찾아주는 함수

 

from queue import Queue // queue 사용하기 위해 import

 

from threading import Thread // thread 다루기 위해 사용

 

 

 

def start(op,http):  op와 http 받아와서 시작

    for method in op['methods']:

        for payload in sqli_payloads: 전송된 데이터들 한 줄씩 받아오기

            n = insert_to_params_urls(op['url'],payload) 해당 url과 payload 함수로 전송

※ def insert_to_params_urls(url,text,single=True,debug=False):

        u = list()

        try:

            if len(url.split('?')) >= 1: url에서 '?'라는 문자로 나눈 개수가 1보다 크거나 같으면

                for param in url.split('?')[1].split('&'): 위에서 나눈 값에서 '&'라는 문자로 문자열 나누기

                     u.append(url.replace(param,param + text))

                      param 값을 param에 text를 더해준 값으로 바꿔준 후 list에 요소 추가

            return remove_dups(u) 리스트 반환

        except Exception as e: 예외처리 오류가 발생하면 해당 블록 수행

            if debug:

                print(f'[insert_to_params_urls] {e}')

            return list()

 

            for url in n:

                if method == 'GET': 만약 method가 GET 방식이라면 해당 method 값 반환

                                          send 함수로 연결되고 method방식과 url 전송

                    r = http.send(method,url)

                else: 아니면 url에서 '?' 문자로 나눠주고 url쿼리의 URL 항목을 튜플 형태로 분석하여 반환

                    r = http.send(method,op['url'].split('?')[0],body=urlparse(url).query)

                for s,v in sql_err.items(): item() 함수 이용하여 method, url, params, payload, match 한번에 반환

                    hmm = findall(v,r.content.decode('utf-8')) findall() 함수 이용(정규표현식에 해당)

                                                                          문자열 중 패턴과 일치되는 모든 부분을 찾아내는 함수

                    for i in hmm: 해당하는 값을 찾았다면 요소 반환

                        if i:

                           return {

                                    'method':method,

                                    'url':url.split('?')[0],

                                    'params':urlparse(url).query,

                                    'payload':payload,

                                    'match':v

                                    }

            return {}

 

 

 

def main(opts,r):

    c = start(opts,r) start 함수 호출

    if c:

        print(f'''[SQLI] {c["url"]} 반환값 있다면 url 출력

\tParams: {c["params"]}

\tMethod: {c["method"]}

\tPayload: {c["payload"]}

\tMatch: {c["match"]}

''')

 

'2021-1 STUDY > Web Programming Study' 카테고리의 다른 글

scant3r_SSTI  (0) 2021.05.05
Web Scanner  (0) 2021.04.11
Python  (0) 2021.03.27

+ Recent posts