전체 : 4,150,784 명
어제 : 0 명
오늘 : 0 명

[보안]PHP 해킹하기 #3 다운로드 취약점

퓨틱 | 2009.10.18 01:01 | 조회 12760
이번에 소개해드릴 취약점은 제목에서도 볼수있으시다시피, 다운로드 취약점입니다.

SQL Injection때도 그랬듯, 우선 강좌를 시작하기전에 다운로드 취약점에 대해 간단하게 개념 정리를 해보겠습니다.

다운로드 취약점은, 다운로드 시에 파일 이름을 직접적으로 인자로 받아 파일을 다운로드 할 시에 일어날 수 있는 취약점입니다.
여러가지에 사용 될 수 있는 취약점입니다만, 보통은 다음과 같은 이유로 쓰입니다.
1. 파일을 업로드시켰는데, 그 파일이 어디에 업로드 되었는지를 알려고 할때
2. 다운로드 취약점을 이용해서 php등의 서버 파일의 소스를 알아내려고 할때(서버 스크립트 파일의 소스를 파악하게 되면 해킹이 보다 쉬워집니다. 구조를 모르는 상태에서 무작정 덤비는 것보다 구조를 아는 체로 덤비는데 아무래도 유리하겠죠?)

일단 이 강좌에서의 목적은 파일이 어디에 업로드 되었는지를 파악하는 것으로 두고 강좌를 시작 하겠습니다.

이제 간단한 예를 들어보겠습니다.

http://hackme.com/download.php?filename=test.zip

아마 여러분들은 위와 같은 방식을 기본으로 하여 다운로드 동작을 수행하는 사이트를 본 적이 있으실 껍니다. (없으시면 말구요~)

저 위의 주소는 아마도, test.zip이라는 파일을 다운로드 할 수 있는 주소일 겁니다.
쉽게 말해서, filename의 인자로 넘어온 값을 다운로드 받는다는 것이죠.

그렇다면 우리는 test.zip이라는 놈을 siku.zip으로 바꾼다면, siku.zip이라는 파일을 받을 수 있을겁니다 (siku.zip파일이 있다면요~ 만약 없다면 파일이 없다고 오류가 뜨겠죠?ㅎ)

지금쯤이면 다운로드 취약점이 뭔지 감이 잡히시는 분들이 계실겁니다.
물론 안잡히시는 분들도 계시겠지요. 하지만 괜찮습니다, 이제 곧 이 글을 보시는 모든 분들이 다운로드 취약점에 대해 아시게 될겁니다.

저기 위의 주소에서, download.php가 하는 역할은 파일을 다운로드 하는 것이지요?
아마 우리가 알고자 하는, 파일이 어디에 업로드 되어있는지도 download.php에 쓰여져 있을 것입니다.
따라서, 우리는 파일이 업로드 되어있는 위치를 알기 위해서는 download.php의 소스를 알아 내야합니다.
하지만 어떻게 알아내야할까요? filename의 인자를 download.php로 바꿔봤자 업로드 된 경로에서 download.php라는 파일을 찾는데 말입니다.
아마도 download.php는 파일이 업로드되는 폴더보다 한단계 상위에 있을 겁니다.
(대부분의 사이트가 그렇습니다)

쉽게 말해, 우리는 한단계 상위 경로의 파일을 다운로드해야합니다.
무슨 방법을 써야 가능할까요?

간단합니다. 상대경로라는 놈을 쓰시면 됩니다.
아마도 상대 경로가 뭔지 모르시는 분들은 없으실 겁니다.
상대경로 중 가장 유명한 놈은 아마 ../ 일껍니다.
../의 역할이 무엇입니까?
../의 역할은 현재 경로보다 상위로 이동하는 것입니다.

요놈을 이용하면, 현재 경로보다 한단계 상위로 가서, 원하는 파일을 다운로드 받을 수 있다는 겁니다.

위의 주소로 예를 들면,
http://hackme.com/download.php?filename=test.zip 를,
http://hackme.com/download.php?filename=../download.php 로 바꿈으로써, 우리는 download.php의 소스를 알아 낼 수있고, 그와 동시에 파일이 어디 업로드 되어있는지를 알아 낼 수 있다는 말입니다.
(만약 다운로드 역할을 하는 php가 업로드 폴더보다 한단계 상위가 아닌, 두단계 상위에 있다고 하면 아래처럼 ../를 하나 더 붙혀주면 되겠지요.
http://hackme.com/download.php?filename=../../download.php)

이로써 다운로드 취약점 강좌를 끝내겠습니다.
참고로 이 취약점은, download.php에서 파일 경로의 .. 문자열을 빈 문자로 치환해버림으로써 아주 간단히 막을 수 있습니다만, 국내 대부분의 사이트들은, ..를 따로 체크해서 치환하지 않습니다..

다음 강좌는 업로드 취약점이 되겠습니다.
이 취약점은 웹 해킹의 꽃이라고 부를 수 있을 만큼, 웹 해킹에서 가장 중요한 파트이자
가장 강력한 기법입니다.

twitter facebook me2day 요즘
좋은 강좌 감사드립니다. 좋은 정보 얻었네요. 저도 홈피 만들때 신경..

좋은 강좌 감사드립니다.

좋은 정보 얻었네요.

저도 홈피 만들때 신경 써야겠네요.^^;;

10.18 13:47 | two3213님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
페이지 직접접속을 막는것도 한가지의 방법일듯

페이지 직접접속을 막는것도 한가지의 방법일듯

10.18 14:06 | COOLSOFT님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
좀더 간략하게 말하면, 단독파일 실행을 막는다는 의미, 맞나요?

좀더 간략하게 말하면, 단독파일 실행을 막는다는 의미, 맞나요?

10.19 14:25 | 레인커뮤니케이션님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
좋은 정보 감사드립니다.

좋은 정보 감사드립니다.

11.18 20:59 | 상진군님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
좋은 정보 감사합니다

좋은 정보 감사합니다

01.04 22:07 | 빵꾸똥꾸님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
오.. 단순하면서도 멋진 방법입니다 ㅎ

오.. 단순하면서도 멋진 방법입니다 ㅎ

02.20 15:15 | 피닉스님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
이런방법으로 etc/passwd 까지 접근하는게 가능하죠 ㅋ

이런방법으로 etc/passwd 까지 접근하는게 가능하죠 ㅋ

03.18 11:35 | eloi님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다. ㄷㄷ

감사합니다. ㄷㄷ

06.12 19:08 | 가다나라마바사하자차카타파하아야어여오요님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
아직 많이들 취약하죠 ㅋ
아직 많이들 취약하죠 ㅋ
12.22 14:03 | 김동현0님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
댓글쓰기 - 로그인한 후 댓글작성권한이 있을 경우 이용하실 수 있습니다.

비밀번호 확인

댓글 등록시에 입력했던 비밀번호를 입력해 주세요.
10개(1/1페이지)
rss
PHP
번호 제목 작성자 작성일 조회
10 [다이어리]페이지 불법링크 막기사진첨부파일[18] 레인커뮤니케이션 2009.09.28 11708
9 [다이어리]한글 초성검색을 해보자(ex. ㄱ자만 또는 ㄴ자만 검색)사진첨부파일[8] 레인커뮤니케이션 2009.09.08 12789
8 [다이어리]검색 광고 통계및 차단 프로그램 제작-1(기획)[3] 레인커뮤니케이션 2009.09.05 9994
7 [고급]유튜브 API들 이용하기사진[5] COOLSOFT 2010.02.12 12420
6 [기초]유용한 mysql_fetch_array를 써보세요. 레인커뮤니케이션 2010.08.25 11689
5 [기초][보안]PHP 해킹하기 #EX1 PHP.* 취약점[18] 퓨틱 2009.10.20 10222
4 [기초][보안]PHP 해킹하기 #4 업로드 취약점사진[14] 퓨틱 2009.10.18 15699
>> [기초][보안]PHP 해킹하기 #3 다운로드 취약점[9] 퓨틱 2009.10.18 12761
2 [기초][보안]PHP 해킹하기 #2 SQL Injection[21] 퓨틱 2009.10.18 11045
1 [기초][보안]PHP 해킹하기 #1 NULL Byte Injection[16] 퓨틱 2009.08.31 13672
처음페이지이전 10 페이지1다음 10 페이지마지막페이지