HxD 에디터를 이용해 디스크에 임의의 파일을 생성해보자.

우선 디스크관리자를 실행하고 다음과 같이 FAT32라는 이름의 vhd를 하나 생성한다.

디스크의 크기는 200MB, 디스크 포맷은 VHD, 디스크 유형은 고정크기로 한다.

디스크가 만들어지면 위와 같이 파티션 형식을 MBR로 디스크를 초기화한다.

해당 디스크에 볼륨을 위와 같이 설정하여 생성한다.


우선 HxD 에디터로 파일을 생성하기 위해서는 FAT32 파일시스템 구조에 대해 알아야 한다.

FAT32 파일시스템 구조는 이전 블로그를 참고하길 바란다.


다음 파일을 한번 생성해보자.

- 파일명 : hack.txt

- 파일위치 : 루트 디렉터리

- 파일내용 : this file is created by hacktool

- 파일크기 : 20bytes

- 파일생성 시간 : 2000.12.31 23:59:59

- 파일수정 시간 : 1999.9.30 15:30:12

- 파일접근 날짜 : 1998.11.10


이를 위해 수정해야 하는 것은 다음과 같다.

> FSINFO에서 다음 사용할 클러스터 확인 및 수정

> Directory Entry 수정

> FAT 수정


우선 HxD 에디터를 관리자권한으로 열고 다음과 같이 [기타설정]-[디스크 열기]를 클릭해 생성한 하드디스크2를 선택한다. 이때 [읽기전용으로 열기]에 체크를 해제한다.


* [기타설정]-[디스크 열기]를 이용해 vhd를 열었을 경우 해당 vhd가 연결되어 있는 상태이기 때문에 vhd를 수정할 수가 없다. 따라서 vhd를 인식하지 못하도록 MBR 파티션 테이블에서 파티션 타입을 '00'으로 설정한 뒤 디스크 관리자를 새로고침하면 해당 vhd가 연결해제된다. 이 상태로 작업을 한 뒤 vhd를 인식하기 위해 수정한 MBR 파티션 테이블을 복구하고 디스크 관리자를 새로고침해야 한다.


* [기타설정]-[디스크 이미지 열기]를 이용할 경우 해당 vhd를 분리한 뒤 작업을 하면 된다.


필자는 [기타설정]-[디스크 열기]를 이용했기 때문에 다음과 같이 MBR 파티션 테이블 값을 변경한다.


디스크 관리자를 새로고침하면 다음과 같이 FAT32 vhd가 인식되지 않는다.


위의 MBR 캡처화면의 ①을 통해 VBR의 위치가 '80 00 00 00'으로 128임을 알 수 있다.

해당 위치로 가면 다음과 같은 화면을 볼 수 있다.

이를 분석하면 다음과 같다.

① : SP( 클러스터 당 섹터 수 ) : 4

② : RS( 예약 섹터 ) : 6,646

③ : Hidden Sector : 128

④ : FAT Size : 773


이를 통해 다음을 계산할 수 있다.

- FAT 1의 시작 위치 : 128( Hidden Sector ) + 6,646( RS ) : 6,774

- FAT 2의 시작 위치 : 6,774 + 773( FAT 1 Size ) = 7,547

- 루트 디렉터리 시작 위치 : 7,547 + 773( FAT 2 Size ) = 8,320


파일의 시작 위치를 알기 위해 FSINFO 부분을 보면 다음과 같다.

* FSINFO는 VBR+1 위치에 있다.

① : 남은 클러스터 수

② : 다음 사용할 클러스터 번호


이를 통해 다음 사용할 클러스터는 6임을 알 수 있다.

파일의 시작위치는 다음과 같이 계산할 수 있다.

- ( 6  - 2( 예약 클러스터의 수 ) ) * 4( 클러스터 당 섹터 수 ) + 8,320( 루트 디렉터리 시작 위치 ) = 8,336


지금까지 확인한 내용을 보면 다음과 같다.

- FAT 1 위치 : 6,774

- 루트디렉터리 위치 : 8,320

- 파일의 시작 위치 : 8,336


이를 이용해 파일을 한번 만들어 보자.

먼저 실제 데이터가 들어가는 8,336 섹터에 다음과 같이 데이터를 넣는다.

루트 디렉터리에 파일에 대한 정보를 기입한다.

* 파일에 대한 정보를 계산하는 법은 이전 포스트를 참고하길 바란다.

FAT 1 정보를 다음과 같이 수정한다.

* FAT 1 정보에 대한 내용은 이전 포스트를 참고하길 바란다.

FSINFO에 대한 정보를 다음과 같이 수정한다.

* 클러스터 하나를 사용했기 때문에 FSINFO에 반영해 주어야한다.

정보를 모두 변경했다면 MBR에서 수정한 파티션 타입을 FAT32로 다시 변경해 준다.

저장을 한 뒤에 디스크 관리에서 새로고침을 누르면 다음과 같이 FAT32 볼륨이 연결이 된다.

파일 탐색기를 이용해 FAT32 볼륨에 들어가 보면 다음과 같이 HACK.TXT 파일이 생성된 것을 볼 수 있다.

FTK Imager를 이용해 해당 디스크를 보면 다음과 같이 정보와 저장된 데이터를 볼 수 있다.

* 파일 탐색기에서 HACK.TXT 파일의 속성을 보게 되면 접근 날짜가 현재로 변경이 된다. 그렇기 때문에 FTK Imager를 이용해 속성들을 보아야 정확하게 확인할 수 있다.

* 데이터를 보면 실제 입력했던 데이터가 모두 출력되지 않는다. 그 이유는 파일의 크기를 20 bytes로 했기 때문에 20 bytes까지만 확인할 수 있다.

Posted by Imp3rio
Wargame/webhacking2017. 5. 5. 00:29

webhacking.kr 사이트의 18번 문제를 보면 다음과 같다.

SQL Injection 문제이고 index.phps 페이지를 제공해 주었다.

index.phps 페이지를 보면 다음과 같다.

no라는 변수를 받아서 여러가지 문자를 필터링한다.

id='guest'이고 전달받은 no변수의 값에 대해 challenge18_table에 있을 경우 해당 id를 변수 q에 저장한다.

q의 값이 admin이면 문제가 풀리는 것 같다.

일단 id가 admin 이어야하기 때문에 기존 where문을 이용하면 안될 것 같다.

즉, id='guest' and no=$_GET[no] 이 조건을 무효화 시켜야 한다.

그러기 위해서 no 값에 0을 넣으면 true and false가 되기 때문에 무효시킬 수 있다.

그리고 나서 admin의 no값을 찾아야 하는데, 페이지만 봐서는 알 수가 없다.

일단 1을 넣으면 다음과 같은 화면을 볼 수 있다.

guest의 no 값이 1인것을 알 수 있다.

chellenge18_table에 어떤 데이터들이 들어 있는지 모르지만 guest의 no 값이 1이기 때문에

admin의 no 값은 2일 확률이 높다.

no=0%0Aor%0Ano=2를 입력해보면 문제가 풀린다.

'Wargame > webhacking' 카테고리의 다른 글

[webhacking.kr] 23번 문제  (0) 2017.06.09
[webhacking.kr] 24번 문제  (0) 2017.06.08
[webhacking.kr] 17번 문제  (0) 2017.05.04
[webhacking.kr] 16번 문제  (0) 2017.05.04
[webhacking.kr] 15번 문제  (0) 2017.05.04
Posted by Imp3rio
Wargame/webhacking2017. 5. 4. 23:43

webhacking.kr 사이트의 17번 문제를 보면 다음과 같다.

14번 문제와 유사한 것 같다.

일단 페이지 소스를 보면 다음과 같다.

unlock 변수에 엄청나게 복잡한 수식이 들어있다.

이를 계산해서 입력을 해야 되는 것 같다.

계산기를 이용해서 사칙연산에 맞춰 계산을 시도해도 된다.

하지만 필자는 디버깅을 통해 값을 알아내도록 하겠다.

페이지 소스에서 디버거 부분을 들어가면 다음과 같은 화면을 볼 수 있다.

sub() 함수가 있는 부분에 중단점을 걸고 아무 값이나 넣고 버튼을 누르면 아래와 같이 unlock의 값을 확인할 수 있다.

확인한 값을 따로 적어 놓고 해당 값을 입력창에 넣어 버튼을 누르면 다음과 같이 Password를 알 수 있다.

Password 값을 제출하면 17번 문제가 풀린다.

'Wargame > webhacking' 카테고리의 다른 글

[webhacking.kr] 24번 문제  (0) 2017.06.08
[webhacking.kr] 18번 문제  (0) 2017.05.05
[webhacking.kr] 16번 문제  (0) 2017.05.04
[webhacking.kr] 15번 문제  (0) 2017.05.04
[webhacking.kr] 14번 문제  (0) 2017.05.04
Posted by Imp3rio