-
webhacking.kr 2번 [500p]$ 웹 해킹 $/webhacking.kr 2019. 4. 9. 23:24
해당 화면이 첫 문제를 들어가면 보이는 화면 입니다.
일단 소스코드부터 확인 하겠습니다.
주석으로 시간이 있습니다.
목차의 BOARD를 들어가 보면 oldzombie의 이름으로 게시물이 하나 있는데 password가 걸려 있습니다. 그 외에 아무것도 찾지 못했습니다.
그렇다면 주어진 2가지를 가지고 문제를 접근 해야 하는데 쿠키 값을 보니
Time 이라는 쿠키 값이 있습니다.
SQL Injection을 통해서 확인해 보도록 하겠습니다.
↓거짓 일 때
거짓일때 <!--2070-01-01 09:00:00--> 입니다.
↓참 일 때
참 일 때 <!--2070-01-01 09:00:01--> 입니다.
그렇다면 해당 데이터베이스 테이블 명을 통해서 password의 길이를 찾을 수 있습니다.
하지만 테이블 명을 아무리 찾아도 없었는데 아는 분께서 예전에는 힌트로 줬다고 하셔서 받아 왔습니다.
bbs 페이지의 테이블 명 : FreeB0aRd
admin 페이지의 테이블 명 : admin
그렇다면 쿠키 값 에다가 sql 구문을 이용해서 길이를 알아보겠습니다.
만약 값이 참이라면 <!--2070-01-01 09:00:01-->이 나올 것 입니다.
↓길이가 8일때 소스코드
거짓이네요 9 10 등등 계속 해보겠습니다.
↓길이가 9일때 소스코드
FreeB0aRd의 password의 길이는 9였습니다.
그렇다면 admin의 password의 길이도 구해보겠습니다.
↓길이가 10일때 소스코드
이제 FreeB0aRd와 admin의 password 길이를 알았으니
Password를 알아보겠습니다.
↓ python2로 작성된 FreeB0aRd의 password 구하는 소스코드
코드를 작성하지 않고 일일이 하나씩 넣어 볼 때
and (select ascii(substring(password,1,1)) from FreeB0aRd) = 97
의 형식으로 33부터 126번 까지 보내야 합니다.
ascii()는 문자열의 제일 왼쪽 문자를 ascii 코드로 변환해 줍니다.
예) ascii('abc') => a의 문자를 ascii 코드로 변환.
substring()는 지정된 숫자를 기준으로 지정된 자리만큼 문자열을 자릅니다.
예) substring(문자열, 시작 인덱스, 길이)
and (select ascii(substring(password,1,1)) from FreeB0aRd) = 97 를 해석해 보자면
substring으로 password의 첫번째를 기준으로 1자리를 자른 값을 ascii코드로 변환하여 그 값이 97(아스키코드 값)과 같은지 비교한다.
이 처럼 (1,1) (2,1) (3,1) 이런 형식으로 모든 자리의 password를 찾는 방법도 있다.
admin manual이라는 파일이 있네요 다운 받아 보겠습니다.
manual.html이 있는데 암호가 걸려있습니다..
아까 admin페이지 에서도 로그인 창이 있었습니다. 그래서 거기를 로그인 하면 압축파일의 password를 알 수 있을 것 같습니다.
위의 소스코드에서 from FreeB0aRd에서 from admin으로만 바꿔서 하시면 됩니다.
admin페이지를 로그인 하니까 다음과 같이 출력되었습니다.
매뉴얼 password를 가지고 압축해제를 시켜보겠습니다.
패스워드가 나오네요
위의 패스워드를 인증해주면 Clear!
'$ 웹 해킹 $ > webhacking.kr' 카테고리의 다른 글
webhacking.kr 5번 [300p] (0) 2019.04.09 webhacking.kr 4번 [150p] (0) 2019.04.09 webhacking.kr 3번 [350p] (0) 2019.04.09 webhacking.kr 1번 [200p] (0) 2019.04.09 회원가입 (0) 2019.04.09