티스토리 뷰

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

42단계 소스코드이다.

id와 pw를 파라미터로 받고 에러를 출력해주며 메타데이터와 시간 기반 주입을 하지 못하게 필터링되어있다.
주석은 5번째 칼럼을 해킹해야 한다고 알려준다.

pw가 result쿼리의 '4'와 같으면 문제는 해결이 된다.

그리고 이번 문제 또한 에러를 출력해준다.

이 문제도 여러 시도를 했지만 모두 실패했다.

그래서 또 인터넷을 참고했다...

이번 문제의 해결은 group by 절에 가장 큰 지분이 있다.

바로 알아보자.

이번 문제의 칼럼의 수는 5개이다. (6 이상에서는 에러 페이지를 호출한다.)

이제 group by 절을 사용할 때이다.

group by는 레코드 조회 시 각 레코드를 하나의 그룹으로 묶어서 표현해준다.

다만 조건에 맞게 사용이 되지 않을 경우 칼럼명을 하나씩 노출해준다.

이를 이용해 이번 문제를 해결할 수 있는 result ['4']를 알 수 있다.

group by를 사용하기 위해서는 하나의 칼럼명 정도는 알아야 하는데, 이는 문제에서 알 수 있기에 생략한다.

쿼리: ?id='group by id,pw--+

 

prob_revenant. 칼럼명 형식으로 에러를 출력하여 다음 칼럼의 이름을 알려주고 있다. 이를 계속 반복해보자.

5번째에서 정상 페이지를 출력시켰다. 그리고 모든 칼럼의 이름을 알아냈다.

이제 result ['4']의 값을 찾아 pw에 입력시켜주면 된다.

쿼리: ?id=admin%27and%201>"9604b0c8"--+-

에러 출력으로 인해 9604b0c8의 칼럼 값이 표출되었다.

 

문제 해결

시행착오

1. 에러 기반에서 group by 칼럼명으로 칼럼의 이름을 계단적으로 알 수 있다. ex) group by id --+-

2. mssql에서 에러 기반 공격을 할 때 문자열을 int형으로 변환 시 에러를 출력하고 싶다면 <,>,=등이 정상적으로 에러를 표출해준다.

댓글