이번에는 앞서 했던 식별과 인증 동시 / 분리 처리에 Hash 처리를 한 로직에서 살펴보겠다.
select * from member where id = 'user' and pw = md5('user_pass')
식별과 인증을 동시에 하는 case에 md5 Hash처리만 한 것이다.
md5 digest는 이제 안전성이 떨어져서 보안이 중요한 곳에 쓰긴 어렵지만 예제로 간단하니 사용했다! 해시는 내일 정리해서 올릴 예정
이곳에서의 SQLi는 그냥 식별 인증 동시 처리할 때와 크게 다르지 않다. 비밀번호에 해시함수만 적용했을 뿐 나머지는 달라진 것이 없기 때문에 logic error를 이용하거나 comment를 이용해서 우회가 가능하다.
차이가 있다면 비밀번호에는 해시가 적용되니 비밀번호 부분에서는 인젝션이 불가능해진다.
비밀번호는 대부분 해시나 다른 암호화 방법을 사용해서 보호하니 그 점은 참고!
식별과 인증을 분리해서 하는 case에서의 해시처리는 조금 방법이 달라진다.
select id, pass from member where id = 'user'
if ( db_pass == hash( 'md5',in_pass )) // in_pass는 입력받은 pw, db_pass는 query 결과로 나온 pw!
로그인 성공!
else
로그인 실패
이런 식의 가벼운 예시를 들어보면 저번에 우회하기 위해 사용했던 bypass문은 통하지 않는다. 해시 처리되기 때문이다.
그래서 if문에서 비교를 할 때 서로 해시되어 있는 값을 비교하게 하기 위해 bypass문에 md5 해시 함수를 추가한다.
id에 x' union select 'admin',md5('123')#
pw에 123 입력
같은 해시 함수로 처리된 값을 비교하게 되므로 우회할 수 있게 된다.
'SQL Injection > SQL Injection' 카테고리의 다른 글
Union Based SQLi (0) | 2024.06.13 |
---|---|
식별과 인증 동시/분리 처리 + Hash 실습 파트 (0) | 2024.06.11 |
식별과 인증을 분리해서 검사하는 로직에서의 SQLi - 2 (1) | 2024.06.11 |
식별과 인증을 분리해서 검사하는 로직에서의 SQLi - 1 (0) | 2024.06.11 |
식별과 인증을 동시에 하는 로그인 로직에서의 SQLi (+Access Control) (0) | 2024.06.10 |