모의해킹 스터디/Week6
[CTF] Login Bypass 2 풀이
protruser
2024. 5. 26. 19:22
0. 문제 설명
normaltic2 로 로그인하자!
현재 우리의 계정은 다음과 같다. [ID/PW] : doldol / dol1234
1. 풀이
이 문제는 여러번 시도 하지 않고 주석 처리 과정에서 바로 풀 수 있었다.
id = 'doldol'#을 입력하여 쿼리의 남은 부분이 주석 처리 되는지 확인 하였고, 비밀번호는 무작위 입력값을 넣어주었다.
식별 / 인증 동시 로직에 계행이 없을 경우, 이 쿼리는 바로 로그인이 되는데
위의 그림처럼 바로 doldol 이라는 계정으로 로그인이 되는 것을 확인하였다.
따라서 주어진 문제(normaltic2 로 로그인하자!)의 정답을 알아내기 위해서는 doldol 대신에 normaltic2를 넣으면 쉽게 정답을 얻을 수 있었다.
2. 로그인 로직
식별 / 인증 동시 로직
"SELECT * FROM users WHERE id='$id' and pass='$pass'";
먼저 Login Bypass2의 로직은 식별 / 인증 동시 로직이다. $id 입력란에 normaltic1'#를 입력하여 뒷 부분을 주석 처리하면 쉽게 정답을 얻을 수 있었다.
하지만 로직을 직접 구현하는 과정이 약간 까다로웠는데, 이 SQL 구문에서는 이상하게도 order by가 적용이 안되고, limit 함수도 적용이 안됐다.
구현한 로그인 로직이 확실하지는 않지만 result가 여러개인지 확인하는 조건절과 order by가 들어갈 경우 오류를 출력하는 코드가 들어가있다고 생각하였다.
$query = "SELECT * FROM users WHERE id='$id' and pass='$pass'";
$result = mysqli_query(DB(), $query);
// order by 사용시 오류 출력 추가
if (mysqli_num_rows($result) > 1 ) {
echo ' error ';
} else {
$row = mysqli_fetch_array($result);
}
정답을 푸는 과정까지는 쉬웠으나 로그인 로직은 계속 고민해보아야 할 부분인 것 같다.