본문 바로가기
Web Hacking/LOS (sql injection)

Lord of SQL Injection 4단계, orc 풀이

by 코뮤(commu) 2019. 10. 29.
728x90
반응형

 

3단계 고블린에 이어 4단계 orc 풀이를 들어가겠다.

사실 이 문제는 blind injection을 이용해 푸는 문제인데, 나는 잘 몰라서 인터넷의 힘을 빌렸다.

다른 사람들은 blind injection을 쉽게 푸는 프로그램을 파이썬으로 작성하던데 나는 파이썬을 몰라서

노가다로 풀었다.

 

 

 

문제를 푸는데 핵심적인 역할을 하는 쿼리문부터 살펴보겠다.

쿼리문의 조건문을 보면 id='admin'이고, 우리가 임의로 변경할 수 있는 변수인 pw가 있다.

 

 

if (($result['pw']) && ($result['pw'] == $_GET['pw'])) solve ("orc");

 

 

문제를 해결하려면 데이터베이스에 id가 admin 인 pw값을 우리가 알아야한다.

자, 문제는 그걸 어떻게 알 수 있느냐!

다음 아래의 과정을 천천히 따라가다보면 해결된다.

 

 

 

 


 

<이용되는 함수>

 

1. ascii() : 입력받은 인자를 아스키 코드 10진수로 변환하는 함수

2. length() : 문자열의 길이를 반환한다.

3. substring(문자열, 시작위치, 길이) : 문자열의 시작위치에서 잘라낼 문자 개수를 지정하여 반환하는 함수

  ex) substr('1234',2,2)= 23

 

 

 

 

<비밀번호 유추과정>

 

1. 패스워드 길이 확인 (length 활용)

   - ?pw=9999' or id='admin' and length(pw)=1(길이)%23

   - ?pw=9999' or id='admin' and length(pw)=2(길이)%23 

   - ?pw=9999' or id='admin' and length(pw)=3(길이)%23 ...

 

id가 admin이고 length가 (길이)인 값을 찾아내는 과정이다.

만약 length의 값이 참이 된다면

 

 

이 조건문이 실행될 것이다.

 

 

2. 패스워드의 첫번째 글자부터 유추

    - 조건: id='admin' and ascii (substr(pw,1,1))> 원하는 숫자

        -> id가 admin이고 해당 아이디의 비밀번호 첫번재 글자에서 한 글자를 추출하고

            아스키코드 10진수로 변환한 값이 원하는 숫자보다 크다는 구문이다. 이런 식으로 범위를 좁혀나간 이후

        -> ?pw=1' or id='admin' and ascii(substr(pw,1,1))=50%23 이런 식으로 pw를 유추해 나간다.

 

 

 

더보기

pw의 길이는 8이라는 것을 찾아냈다!

 

 

 

첫 글자는 아스키코드 50.

 

 두번째 글자는 아스키 코드 57.

 

 

 

세번째 글자는 아스키코드 53

 

 

네번째 아스키코드 100

 

 

 

 

다섯번째 아스키코드 53

 

 

 

 

여섯번째 아스키코드 56

 

 

 

일곱번째 아스키코드 52

 

 

 

여덟번째 아스키코드 52

 

 

따라서 char(50,57,53,100,53,56,52,52)     ->    295d5844

 

데이터베이스안에 들어있는 pw값은 295d5844 이다.

 

 

 

 

 

 

 

 

 

728x90
반응형