들어가기에 앞서, sql injection 공격에 대해 알아보도록 하자!!
sql injection은 웹 사이트의 보안상 허점을 이용해 특정 sql 쿼리문을 전송하여 공격자가 원하는 데이터베이스의 중요한 정보를 가져오는 해킹 기법을 의미합니다. 대부분 클라이언트가 입력받은 데이터를 제대로 필터링하지 못하는 경우에 발생합니다.

blind sql injection
blind sql injection 공격은 쿼리의 결과를 참과 거짓으로만 출력하는 페이지에서 사용되는 공격으로, 출력 내용이 참과 거짓밖에 없어서 이를 이용해 데이터베이스의 내용을 추측하여 쿼리를 조종하는 공격입니다.

얼핏 보면 sql injection 공격과 비슷하나, blind sql injection은 쿼리 결과를 오로지 참, 거짓으로만 출력한다는 점에서 조금 다릅니다.
blind sql injection 실제 취약점 사례
링크텍스트
해커원 사이트에서 제보된 바에 따르면, 공식 소니 웹사이트의 로그인 형식이 blind sql injection에 취약하다는 걸 발견했다고 합니다. blind sql injection을 사용하여 데이터베이스(db)에서 xp_cmdshell 기능의 활성화가 가능했고, 시스템 명령(system command)을 실행할 수 있었습니다. 그런 다음 DNS-based exfiltration을 통해 시스템 명령의 출력을 얻을 수 있었습니다. 이 외에도 blind sql injection에 취약한 웹사이트가 여러 군데 존재합니다.
링크텍스트
링크텍스트
blind sql injection with conditional responses
먼저, port swigger에 접속해서, blind sql injection with conditional responses 문제로 들어가 봅시다.
Access the lab을 누르면 어느 한 사이트에 들어가게 됩니다. 여기서 우리는 administrator 유저의 비밀번호를 알아낼 것입니다.
버프 슈트를 이용해 알아봅시다. 버프 슈트에서 Proxy에 들어가 인터셉트를 켜서 패킷을 받고, repeater로 보내 쿠키를 수정해 봅시다.
쿠키값을 조금 수정해서 intruder로 보내봅시다. 그 후 쿠키의 초록색으로 줄쳐져 있는 부분(a)에 add를 눌러봅니다. 그러면 이상한 기호? 같은게 추가되어 있습니다 그 상태에서, Payload 칸으로 가 봅시다.
먼저, Payload칸에서 Payload Options에 비밀번호에 들어갈 만한 암호(영어, 숫자)를 미리 작성해서 추가하고, (Pro버전에서는 리스트를 활용하여 번거롭게 할 필요가 없어용..ㅎ)
다시 Positions창에 돌아와서 쿠키에 (password,1,1)을 적은 후 start attack을 눌러봅시다. 그러면
이 창이 뜰텐데, 여기서 1로 표시된 값이 비밀번호를 이루는 암호 중 1번째 암호라는 의미입니다.
계속해서 (password,2,1), (password,3,1).....이렇게 계속 1이 표시된 값을 알아가다가, 20번째를 마지막으로 그 이후부터는 1의 값이 뜨지 않습니다. 즉, 그 이후부터는 암호가 없다는 의미로 비밀번호는 20자리라는 것을 알 수 있습니다. 사실, 굳이 21번째 돌려봐서 암호의 자릿수를 확인할 필요 없이 LENGTH를 이용해 비밀번호의 자릿수를 알 수 있으나, 이것은 일단 넘어가도록 하겠습니다...😗😗
아무튼 20번동안 돌려서, administrator의 비밀번호를 알아냈으니, 알아낸 비밀번호를 가지고 로그인을 해 봅시다
과연 될까...?
짜잔~😎😎성공했습니다!!