▶ 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 |