SQL Injection 식별/인증 Hash처리(인증 우회)
해킹에 대한 인식이 이전보다 많이 높아진 지금은 아마 웬만한 사이트들 비밀번호는 저장할 때 해시 처리해서 보관하고 있을 것이다. 또한, 비밀번호를 암호화해서 보관하지 않으면 법적으로도 문제 된다고 알고 있다.
이전에 인증 우회 공부할 때 식별 인증 동시, 분리 방식 두 가지를 했는데 오늘은 그 두 방식에 비밀번호를 해쉬 처리하는 로그인 방식에 대해서 인증 우회를 테스트를 해볼 것이다.
일단 가장 많이 쓰인다는 2가지 해시들을 간단하게 알아보았다.
MD5
MD5 (Message-Digest algorithm 5) MD5는 메시지 축약 알고리즘으로써, 파일 무결성 검사 용도로 많이 쓰이고 있습니다.
128bit의 해쉬를 제공하며, 암호 와와 복호화를 통하여 보안용 도로도 많이 쓰입니다. 하지만 암호화 결함이 발견되어 보안 용도로 사용할 때에는 SHA와 같은 다른 알고리즘을 사용하는 것이 권장되고 있다고 합니다.
SHA
SHA (Sechre Hash Standard) SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음이다. 여러 종류가 존재하며 그중 SHA-256은 SHA 함수들 중 가장 많이 쓰이며, TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용되고 있습니다.
테스트를 해보기 위한 웹에는 SHA256을 사용하였다.
해쉬 처리방법
$변수명 = hash( "sha256" , 비밀번호 )
* 테스트 1 ( 식별/인증 동시 방식에 비밀번호 해시 처리 )
아래 글과 인증방식은 동일하며 입력받은 비밀번호만 위의 코드로 해시 처리하였다.
SQL Injection ( 인증 우회 ) 식별/인증 동시방식
SQL Injection의 개념 SQL 인젝션은 코드 인젝션의 한 기법으로 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 하거나 필요한 정보를 획득하기 위해 하는 공격방
albin.tistory.com
식별 인증 동시 방식에 사용했던 ' or '1 , ' or '1와 ' or 1=1# 두 가지를 테스트해보았는데, 'or'1 이 비밀번호 변수로 들어가면서 해시 처리되어서 인지 실패했으며, ' or 1=1# 은 sql문 뒤쪽을 모두 주석처리해버려서 인증 우회가 가능하였다.
* 테스트 2 ( 식별/인증 분리 방식에 비밀번호 해시 처리 )
아래 글과 인증방식은 동일하며 입력받은 비밀번호만 위의 코드로 해시 처리하였다.
SQL Injection ( 인증 우회 ) 식별/인증 분리방식
이전 글( 식별/인증 동시 방식 )과 다르게 유저가 입력한 아이디에 대한 패스워드를 가져와 코드 안에서 if 문으로 비교하였다. 동시 방식에서 사용했던 ' or '1 , ' or '1 우회방법을 대입해보니
albin.tistory.com
식별 인증 동시 방식에 사용했던 ' or '1 , ' or '1와' or 1=1# 두 가지를 테스트해보았는데, 디비에서 조회해온 비밀번호로 코드상에서 비교하기 때문에 두 개다 우회가 불가능했으며, 위의 글에서처럼 union을 통해서 인증 우회를 하려 하였으나
실패하였다.
유니온 select 뒤에 주입시킨 1과 비밀번호 입력한 1을 비교하는 곳에서 비밀번호로 입력한 값은 바로 해쉬 처리되어 버리기 때문에 if 문을 통과하지 못하는 것 같다.
이후에 sha256으로 변환된 데이터를 갖게 된다면 ' union select 해쉬된데이터#으로 다시 도전해 봐야겠다.
그러나 이 방법으로 우회가 된다고 하더라도, 내가 개발했기 때문에 sha256으로 변환한 것을 알기 때문에 sha256 데이터로 다시 우회를 시도해 볼 생각을 할 수 있는 것이지, 다른 곳이었다면 해쉬 방식마다 데이터를 가지고 대입해봐야 하므로 힘들어 보인다. 또 이전에 잠시 사용했던 password_hash는 시간마다 해시 값이 변하기 때문에 우회가 더 어려울 것 같다.
지금 까지 네 가지 케이스별로 인증 우회를 테스트해봤는데 해시 처리하는 게 훨씬 보안적으로 강력해 보이며, 인증 방법을 식별과 분리시키는 것이 좋아 보인다.
참조
https://ktko.tistory.com/entry/비밀번호와-Hash해시
비밀번호와 Hash(해시)
비밀번호와 Hash(해시) 잦은 개인정보 유출 사고로 보안이 이슈되면서 개인정보와 패스워드에 대한 보안이 철저해지고 있습니다. 또한 현재 핀테크 관련된 개발을 하게 되면서 알고 있던 내용을
ktko.tistory.com