Sql Injection Segfault ctf Secret Login 문제

 

 

Secret Login

관리자 계정으로 로그인하자! 그런데… 관리자 계정이 뭔지 모른다..!?

현재 우리의 계정은 다음과 같다. [ID/PW] : doldol / dol1234

 

 

 

 

burp suite로 헤더를 보니 post 방식으로 아이디 비밀번호를 보내고 있었다.

 

 

 

doldol’ and ‘1’=’1 / dol1234′ and ‘1’=’1  아이디와 비밀번호에 이렇게 넣어서 성공한 상태에서 관리자 계정을 모르니

모든 조건이 참이 되도록 아이디와 비밀번호에 ‘or ‘1’=’1을 보내보았다. 성공했다.

그리고 보통 관리자는 첫 번쨰 계정이기 때문에 그렇게 찾아야 하니 아이디 아무렇게 적고 비밀번호에만 ‘ or ‘1’=’1

 

 

 

SELECT * FROM users WHERE username = '$username' AND password = '$password'

이렇게 서버 스크립트에서 sql 문을 이렇게 준비했다고 가정하면

 

 

 

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1'

‘1’=’1 은 항상 참이고 or로 둘 중 하나만 맞아도 되기 때문에 아이디와 비밀번호 몰라도 무시하고 로그인이 가능하다.

그러면 보통 데이터베이스에서 첫 번째에 있는 행의 값을 보내준다.

 

 

 

login_acc라는 유저가 나왔다. 관리자 계정이 아니었다.

보통 관리자는 첫 번째 계정이지만 아닐 수도 있었다.

 

 

 

 

' OR '1'='1' LIMIT 1 OFFSET 1--

그래서 limit로 행 1개 불러오고 offset 1으로 두 번째 행을 불러와 보았다.

or 앞쪽은 모두 참 이 되게 하였고 –로 뒤쪽은 주석 처리하여 아이디나 비밀번호 아무 곳이나 넣으면 된다.

 

 

 

 

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다