허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
https://webhacking.kr/challenge/web-02/
webhacking.kr의 2번 문제를 살펴보면 제한된 영역, IP를 기록하고 있다는 메시지를 확인할 수 있습니다. 해당 문제의 단서를 찾기 위해 한번 살펴보도록 하겠습니다.
첫 번째 단서 - 주석 처리되어 있는 시간값이 현재 시간으로 표시
두 번째 단서 - admin.php
쿠키값 확인 시 PHPSESSID, time 값을 확인할 수 있으며, 여기서 특이한 점은 time 값이 숫자로 표시되어 있다는 점을 알 수 있습니다. (타임스탬프의 유닉스 값으로 표시되고 있음)
타임스탬프(timestamp) 또는 시간 표기는 특정한 시각을 나타내거나 기록하는 문자열입니다.
타임스탬프의 예:
Tue 01-01-2009 6:00
2005-10-30 T 10:45 UTC
2007-11-09 T 11:20 UTC
Sat Jul 23 02:16:57 2005
1256953732 (유닉스 시간)
(1969-07-21 T 02:56 UTC) –
07:38, 11 December 2012 (UTC)
타임스탬프 변환사이트를 통해 확인해 보면 주석처리되어 있던 시간 부분과 일치 하는것을 알 수 있습니다.
첫 번째 단서는 유닉스에서 사용되는 타임스탬프 값인 것을 확인하였습니다. 그럼 두 번째 단서인 admin.php를 확인해 보겠습니다.
admin.php 페이지를 확인해 보면 패스워드를 입력하라는 메시지와 제출 버튼이 보입니다. 여기서 SQL Injection 공격을 시도해 보았지만 패스워드를 잘못 입력하였다는 알림 창을 확인할 수 있었습니다.
LOS 문제에서 보았던 소스코드중 해당 부분을 통하여 패스워드를 검증하고 있는 것 같습니다.
if(($result['pw']) && ($result['pw'] == $_GET['pw']))
그럼 이제 우리는 패스워드를 찾아야 하기 때문에 첫 번째 단서인 쿠키값을 확인해 보도록 하겠습니다.
time 쿠키값 뒤에 and 1=1를 입력하였더니 시간 값이 바뀐 것을 확인할 수 있었습니다.
time 쿠키값 뒤에 and 1=0를 입력하였더니 시간 값이 바뀐것을 확인할 수 있었습니다.
참 : 2070-01-01 09:00:01
거짓 : 2070-01-01 09:00:00
여기서 참인 값과 거짓값을 입력하였을때 반환되는 값이 다르므로 해당 값을 통하여 blind sql injection이 가능할 수도 있다고 추측할 수 있습니다. 그럼 blind sql injection 공격을 시도해 보겠습니다.
첫 번째로 DB의 길이를 알아내야 합니다.
bWAPP DB를 통해 먼저 예시로 들어 보면 bWAPP의 DB 이름은 bwapp인 것을 확인하였고, length(database())=1; 쿼리를 통하여 DB의 길이가 1인지 쿼리를 하면 0 (거짓) 반환되고, length(database())=5; 쿼리를 통하여 DB의 길이가 5인지 쿼리 하였을 때는 1(참)을 반환하는 것을 확인할 수 있습니다.
여기서는 DB의 이름을 알아내야 하기 때문에, 데이터베이스의 길이가 몇글자인지 먼저 확인을 먼저 해보도록 하겠습니다.
and length(database())=1
and length(database())=2
and length(database())=3
...
이렇게 값을 올리면서 확인을 할수도 있지만 길이가 길어지면 그만큼 시간도 오래 걸리므로 LOS에서 만들어 두었던 파이썬 코드를 활용해 보도록 하겠습니다. 사실 코드를 짜는 방법은 여러 가지 방법들이 있습니다. 여기에 나와 있는 코드는 정답은 아니며 더 정교하고 간단히 짤 수 있는 점 참고해 주시기 바랍니다.
DB 길이 확인 (DB Length 6글자)
파이썬 코드
코드에 대한 설명은 [LOS] Lord of the SQL Injection - orc 해당 글을 참고해 주시기 바랍니다.
두번째 DB의 이름 확인
bWAPP DB를 예시로 DB의 첫 번째 글자가 "a"인지, "b"인지 쿼리를 하였을 때의 값입니다.
DB 이름 확인 (DB Name chall2)
파이썬 코드
세번째 DB의 테이블 이름 확인
bwapp DB의 테이블 항목
bwapp DB의 테이블 중 첫 번째 테이블 이름이 "a"로 시작하는지 "b"로 시작하는지 확인
chall2 DB의 테이블 확인
admin_area_pw, log 테이블 확인
파이썬 코드
네번째 DB 테이블의 컬럼 확인
bWAPP DB의 users 테이블의 첫 번째 컬럼값이 "a"인지 "i"인지 확인
chall2 DB admin_area_pw 테이블의 컬럼 확인
pw 컬럼 확인
다섯 번째 정보 확인
bWAPP DB의 users 테이블의 login, password 컬럼을 확인하였고, substr을 통하여 password 컬럼의 첫 번째 글자가 무엇인지 확인
chall2 DB admin_area_pw 테이블의 pw컬럼의 정보 확인
kudos_to_beistlab 확인
파이썬 코드
참고
https://ko.wikipedia.org/wiki/%ED%83%80%EC%9E%84%EC%8A%A4%ED%83%AC%ED%94%84
'Code::War Game > webhacking.kr' 카테고리의 다른 글
[Wargame] Webhacking.kr old-01 문제 (0) | 2022.12.19 |
---|