response 패킷도 데이터를 변경할 수 있다
result : fail -> ok로 바꿀 수 있음
script 태그로 감싸진 javascript 코드도 response에서 변경할 수 있음
intercept is on 잡아서
Do intercept -> do response ~~ 클릭하기
브루트 포스 문제
취약점:
로그인 인증 횟수를 제한하고 있지 않음
**유명한 프록시 툴
burp suite - GUI 방식
fiddler (window에서만 돌아감)
-> 쓰기 어려움
mitmproxy - CLI 방식
** SQL
** DB : 엑셀 그 자체임
database
ex : 이름 컬럼 / 전화번호 컬럼 / email 컬럼
SELECT id FROM member
column : 열
row : 행
2행 3열에 해당
SELECT 문
select [컬럼 이름] from [테이블 이름]
select 이름 , 전화번호 from member
하면 두개의 컬럼을 가져와줌
(_) 조건 관리 <- 중요
select [컬럼 이름] from [테이블 이름]
where (조건)
(컬럼이름 = 데이터)
where id='normaltic'
조건을 여러개 둘 수 있음
연산자 두개
and 연산자 => 두 가지 모두 참이어야 함
or 연산자 => 둘 중에 하나만 참이면 가능
-------------------------------------------------------------------------------
** 로그인 인증 과정!
> 식별
: 많은 데이터 중에서 특정한 데이터를 가려내는 것
식별 정보 : ID
-> 중복되면 X
> 인증
: 그 사람이 맞는 지 확인
인증 정보 : 비밀번호, OTP 등등등
1) 식별 & 인증 동시 CASE
normaltic / qqqq
select * from member
where id='normaltic' and pas='qqqq'
if (그 결과가 존재하면) {
로그인 성공
} else {
로그인 실패
}
2) 식별, 인증 분리 CASE
select pass from member
where id='';
if (db_pass == user_pass) {
로그인 성공
} else {
로그인 실패
}
어떤 경우가 더 안전할까?
정답은 똑같이 안전함
** SQL Injection
> SQL 질의문을 삽입하는 공격
-> 그래서 뭘 할 수 있는데?
데이터 추출
인증 우회
데이터 변조
내가 로그인 창에 id가 normaltic 치고 비밀번호에 1234를 치면
서버에서 select * from member where id='normaltic' and pass '1234' 가 실행됨
ID : mario' # 그럼 id에 작은 따옴표를 넣으면 어떻게 될까?
select * from membere where id='' and pass=''
#은 mysql에서 주석임
ID : mario'# 은
select * from member where id='mario' #' and pass='' 여기는 주석 처리됨
가 실행되면서 따옴표의 짝 과 # 주석처리 때문에
mario 데이터 값을 뽑아낼 수 있음
-------------------------------------------------------------------------------------------------------------
SQL Injection : 로그인 인증 우회.
1) 식별 & 인증 동시
select * from member
where id='' and pass=''
주석 : mario'#
or 구문 이용1 : mario' or '1'='1
-> mario 정보만 나옴
or 구문 이용2 : mario' or '1'='1'#
-> 모든 정보가 다 나옴
으로 or 구문 사용가능
or 구문1 마지막에 작은 따옴표는 일부러 없는거임
select * from member
where id='mario' or '1'='1' and pass='sfe'
이거 실행하면 mario 정보만 나옴
왜?
or 와 and 에는 연산 우선 순위가 있음
그래서 사실상
select * from member
where id='mario' or ('1'='1' and pass='sfe')
and가 먼저 실행되는 것
괄호부분은 pass가 틀림으로써 거짓으로 판명나고
앞에 있는 조건만 가지고 id값을 추출함
따옴표를 안 쓰고 '1'='1'이 아니라 1=1로 써도 되지만
작음 따옴표 짝을 맞추기 위해서 써주는 게 좋음
그리고 위 사진의 경우는 fake의 id로 로그인 하게됨
2 ) 식별 & 인증 분리!
union 이라는 구문을 알아야함
union
-> 데이터를 연결해서 출력.
-> select 2개 쓸 수 있게 한다!
(select ~~~~~~) union (select ~~~~~~)
union 구문 활용
x' union select 'normaltic','qqqq','1111','2222' # 입력
그럼 처음에는 normaltic이라는 id가 새로 추가된 것처럼
로그인이 되고
그 다음은 원래 DB에 있던 normaltic의 세션ID를 가지게 되므로
개인정보나 여러 관련 정보를 다 볼 수 있다
update도 사용할 수 있지만 실제 데이터가 바뀌어버리므로
피해자가 알게될 수 있음
대신 위 방법을 쓰려면 컬럼이 몇 개 호출되는지를 알아야함
로그인 우회를 할 때 id 쿼리문과 pass 쿼리문사이가 개행처리가
되어있을 수도 있음 그럴 때는 or 구문을 못쓸 수도 있고
필터링처리가 되어있어서 or 구문을 못 쓸 수도 있음
그리고 Login Bypass를 할 때는 제일 처음Burp Suite를 이용해서 오고가는 패킷을 분석한 다음Repeater를 통해서 mario'# 같은 구문을 날려보는 것이편리함
그리고 로그인 과정을 분석할 때mario' and '1'='1' 로 보내보면302 Found가 떴을 때 select * from memberwhere id= '' and pass='' 로 이루어져있는 거라고 생각할 수 있음mario' and '1'='1' 에서and '1'='1' 이라는 항상 참이 되는 구문은항등원 역할을 함 이것으로 서버 쿼리문의 and를 파악했음
그리고 같이 수업들으시는 분이x' union select 'normaltic2', 'qqqq', '1111', '2222', '3333', '4444' #라고 입력했는데1111로 로그인 되었다고 한다질문을 남겼는데 강사님이 대답을 흐리신걸 보니 중요한 개념이 있나보다왜 그럴까?
'해킹 > Web Hacking' 카테고리의 다른 글
[7주차] 해킹 스터디 정리 - Reflected XSS, DOM XSS (0) | 2023.05.13 |
---|---|
[6주차] 해킹 스터디 정리 - SQL Injection 복습, XSS (0) | 2023.05.04 |
[5주차] 스터디 정리 - Blind SQL Injection, 대응 방안 (0) | 2023.04.27 |
[4주차] 스터디 정리 - Union Based, Error Based SQL Injection (0) | 2023.04.20 |
[2주차] 해킹 스터디 정리 - 쿠키,세션,세션ID,Burp Suite 사용법 (0) | 2023.04.06 |