-
Authentication Bypass - Login Bypass 2wargame/segfault 2024. 6. 16. 14:17
이번 문제의 목표는 normaltic2로 로그인에 성공하는 것이다. 테스트용으로 주어진 계정의 id와 password는 다음과 같다.
# id: doldol # password: dol1234
해당 아이디로 로그인해서 웹사이트를 살펴본 결과 Login Bypass1과 다르지 않았으므로 웹페이지 분석은 생략한다.
로그인 우회 가능성 확인
(302코드: 로그인 성공, 200코드: 로그인 실패)를 의미한다. 자세한 내용은 Login Bypass1에서 확인하라.
UserId에 doldol' and '1'='1 을 입력했음에도 로그인이 정상적으로 되었기 때문에 로그인 우회가 가능할 것으로 판단된다.
로그인 우회
먼저 식별/인증 동시 케이스 중에서, 개행X, 해쉬X, 괄호X이며 내부에 single quote(')를 사용하며 id가 먼저 앞에 오는 sql문이라고 가정하고 문제를 풀어본다. 먼저 정상적으로 주어진 계정을 이용해, 로그인 우회가 가능한지 알아봐야한다. 그리고 내가 sql문에 적은 table이름과 column이름은 모두 내가 임의적으로 가정한 것이다.
$sql = "SELECT * FROM member WHERE id='___' and pass='___'" # 만약 normaltic2, wrongpass를 입력한다면 다음과 같다. $sql = "SELECT * FROM member WHERE id='normaltic2' and pass='wrongpass'"
이제 목표인 normaltic2로 로그인을 시도해보겠다. Password에는 아무데이터나 넣어도 된다.
결과는 당연히 로그인 실패.
그렇기에 만약 이 로직 케이스라면 통하는 id에 normaltic2' or '1'='1 을 입력해보겠다.
하지만 이번에도 로그인에 실패를 했다. 로그인 인증우회가 가능한데 normaltic2' or '1'='1이 실패했다면 앞서 가정한 로그인 로직이 아니거나 or이 필터링되고 있을 수도 있다.
만약 or이 필터링되고 있다고 가정하면, 식별/인증 동시이면서 id가 먼저 오고 괄호X, 개행X인 경우에 사용할 수 있는 normaltic2' #을 사용했을 때는 로그인에 성공을 해야하고, 만약 실패하면 로그인 로직이 틀린 것이다.
$sql = "SELECT * FROM member WHERE id='___' and pass='___'" # 만약 normaltic2' #, wrongpass를 입력한다면 다음과 같다. $sql = "SELECT * FROM member WHERE id='normaltic2'#' and pass='wrongpass'" # #뒤에 있는 것들은 주석처리되어 # 결국 인식되는 것은 SELECT * FROM member WHERE id='normaltic2' 이 된다.
로그인에 성공했다!
로그인 로직이 예상한대로지만 or이 필터링 되고 있다고 판단할 수 있다.
flag도 획득했다.
만약 or 대신에 'OR', 'Or', 'oR' 을 넣었을 때는 어떻게 되는지 궁금해서 다시 진행보았다.
결과는 다음과 같다. 'or', 'OR' 을 사용했을 때는 필터링되어서 로그인 우회에 실패했으나
'Or'와 'oR'을 사용했을 때는 로그인 우회에 성공한 것으로 보아 'or'와 'OR' 키워드 차단이 확실하다고 판단된다.
'wargame > segfault' 카테고리의 다른 글
Authentication Bypass - Secret Login (0) 2024.06.16 Authentication Bypass - Login Bypass 5 (0) 2024.06.16 Authentication Bypass - Login Bypass 4 (0) 2024.06.16 Authentication Bypass - Login Bypass 3 (1) 2024.06.16 Authentication Bypass - Login Bypass 1 (1) 2024.06.16