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

[보안]PHP 해킹하기 #4 업로드 취약점

퓨틱 | 2009.10.18 01:04 | 조회 15525

이번 강좌는 지난번의 강좌들과 다르게, 약간의 배경 지식이 필요합니다.
(꼭 필요한건 아닙니다만, 보다 원활한 응용과 사용을 위해서는 배경지식이 꼭 필요합니다,
게다가 이번 강좌는 조금의 배경 지식이 있으신 분 기준으로 강좌를 진행합니다)

필요한 배경지식으로는,
기초적인 PHP 실력
입니다.

참고로, 이 강좌는 PHP를 기준으로 설명되어집니다.

그럼 이제 강좌를 시작하겠습니다.

-------------------------------------------------------------

지금까지의 강좌는, 홈페이지 자체를 해킹한다기 보다는 보다 해킹에 도움을 주거나(다운로드 취약점)
DB에 접근 및 쿼리를 보내는 행동을 할 수 있는 기법(SQL Injection)을 다뤘습니다.

허나 이번 강좌는 드디어 홈페이지 해킹을 할 수 있는 방법에 대해 알려주는 강좌입니다.

PHP의 함수 중, system()이라는 함수가 존재합니다.
이 함수는 자신이 올라가 있는 서버에서 원하는 명령을 실행할 수 있는 함수입니다.

아래는 cmd.php의 소스 입니다.
system($cmd);
?>

위의 소스는,
cmd인자의 값을 system함수로 서버에서 실행시켜주는 함수입니다.
위와 같이 system()함수를 사용해서 서버에서 자신이 원하는 명렁을 실행할 수 있도록 하는 php 파일을,
웹 쉘(Web Shell)이라고 하며, 홈페이지를 대상으로 하는 웹해킹의 최종목적은 보통 웹 쉘의 획득입니다.
업로드 취약점의 경우 웹쉘 획득의 가장 기본적인 방법입니다.

웹 쉘을 자기가 직접 위의 cmd.php처럼 만들어서 따내는 방법도 있겠지만,
그런 식으로 할 경우 상당히 기능이 미약합니다. 그래서 보통은 자신이 직접 웹 쉘을 써서 사용하기보다는,
다른 사람이 만든 기능이 뛰어난 쉘을 사용하는 경우가 대부분입니다.

웹 쉘중 유명한 쉘은 2가지가 있습니다.
첫번째는 r57shell, 두번째는 c99shell입니다.
두 쉘의 가장 큰 차이점은 디자인이라고 볼 수 있습니다.

r57쉘은 콘솔적이고, c99쉘은 그래픽적입니다.
r57쉘은 c99shell에 비해 전체적인 기능이 많고, 기능이 보다 뛰어납니다. 하지만 c99쉘에 비해 DB접근이 어렵고, 사용하기가 조금 힘듭니다

c99쉘의 경우, r57쉘에 비해 손쉽게 DB에 접근을 할 수가 있으며, r57쉘에 비해 사용이 용이합니다. 그러나 r57쉘에 비해 기능이 약간 쪼달리는 감이 조금 있습니다.
r57쉘은 해당 경로의 파일 목록을 얻는 것 과 다른 디렉토리로 디렉토리 이동, 파일 내용 읽기 등의 행동을 위해 명령어로 삽질을 해야하지만, c99쉘의 경우 간단하게 클릭 몇번만으로 디렉토리 이동 및 파일 내용읽기, 파일 목록을 받아 올 수가 있습니다. 또한, DB의 경우 r57쉘의 경우 SQL 명령어를 사용해서 힘들게 삽질해야하지만, c99쉘은 간단하게 클릭 몇번으로 DB를 보거나 덤프할수 있습니다.

이 두가지 쉘 중, 보통 대다수의 사람은 r57쉘을 사용합니다.(php 쉘에 대해 검색해보아도 대부분 r57쉘에 대해 나옵니다, c99쉘은 잘 알려지지 않았기 때문이지요) 하지만 저는 여러분께 c99쉘을 추천드리고 싶습니다. c99쉘은 r57쉘에 비해 기능이 부족하지만, 보통 웹해킹 시에 필요한 모든 것들을 수록하고 있습니다.
(저 역시 c99쉘을 애용합니다)

이 두가지 쉘은 아래 첨부파일을 통해 받으실 수 있습니다.

이제 쉘이 뭔지도 알겠고, 가지고도 있겠다. 이제 쉘을 획득할 차례만 남았습니다.
쉘은 어떻게 획득해야할까요?

기본적으로는, 아래와 같은 구조를 지닙니다.

웹 쉘의 업로드 -> 웹 쉘이 업로드 되어있는 주소로 접근 후, 실행

구조를 보시면 상당히 간단하다는걸 아시게 될 것 입니다.

한번 쉘을 아무 사이트에나 업로드를 시도해 보십시오,
아마 업로드가 되지 않을것입니다.
왜냐하면 대부분의 사이트에서는 웹 쉘의 획득을 막기 위해, php,asp 등 서버 스크립트 파일의 업로드를 막아 놓았기 때문입니다. 그럼 어떻게 해야 웹 쉘을 획득 할 수 있을까요? 확장자가 php인 녀석을 업로드를 할 수 없는데...

-------------------------------------------------------------


어떤식으로든 우리는 php파일을 업로드했다고 칩시다,

두번째 문제로는 이제 우리는 그 php파일이 업로드 된 경로를 알아내야합니다.

http://hack.com/upload/shell.php
처럼 업로드 된 위치를 친절하게 알려주는 사이트도 있지만,

http://hack.com/download.php?filename=shell.php
http://hack.com/download.php?id=3
처럼 자체적인 다운로드 php를 짜서 다운로드만 가능하게 하는 사이트도 있습니다.

첫번째의 경우, 전에 소개했던 다운로드 취약점으로 업로드된 경로를 알아내서 쉘을 실행할 수가 있습니다.
두번째의 경우는 까다롭습니다. 두번째 같은 경우로 다운로드 될 시에는 업로드 경로를 알아내는 방법으로는 보통 아래와 같습니다.

이미지 파일을 하나 업로드 합니다.
만약 이미지 파일이
http://hack.com/upload/image.jpg
http://hack.com/upload/img/image.jpg
이런식으로 업로드 되게되면, 우리는 업로드되는 경로를 획득할 수가 있습니다.
그러나...
http://hack.com/img/image.jpg 처럼 이미지 업로드 폴더 자체가 따로 존재하거나,
http://hack.com/download.php?id=5 처럼 이미지 파일도 다운로드 받게되어있으면,
이미지 업로드로 업로드 경로를 파악하는것은 불가능합니다.

이런 경우에는, 업로드를 통한 해킹을 포기하거나, 추측되는 업로드 폴더명을 다 찔러봐서 확인해보는 노가다 방법이 있습니다.

이로서 업로드 취약점에 관한 강좌를 끝마치도록 하겠습니다.

twitter facebook me2day 요즘
음 참고로 cy 확장자가 참 인상적이있습니다.(이건 위에서 말씀하신데로 ..

음 참고로 cy 확장자가 참 인상적이있습니다.(이건 위에서 말씀하신데로 너무나도 많네요.)

그리고 위치를 파악하는 방법은, http://hack.com/download.php?id=5 같은 경우에는 페이지를 다시 열어보면 가능한 경우가 있더군요. 아 또한가지는 확장자를 파일.txt.php 로 업로드할 경우 강제로 파일.jpg 로 변경하는 경우도 있고 파일명을 예상하지 못하는 이름으로 변경하는 경우도있었습니다. 또한가지는 일반 이미지 파일과 mp3 또는 txt 등 좀더 다양한 확장자로 확인하시면 의외로 위치를 막아놓지 않은 확장자가 있더군요(확장자 별로 분리해서 뷰어해주는 경우).

그리고 떠 나아가 기껏, 실행이되도, db관련 부분이 암호화가 되어있는 난감한 일도 있었네요...

감사합니다. 강좌 재밌네요.^^

10.19 14:22 | 레인커뮤니케이션님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다. 만들때 참고해야겠네요 ㅇㅅㅇ..ㅠ

감사합니다. 만들때 참고해야겠네요 ㅇㅅㅇ..ㅠ

10.27 19:05 | Avanzar님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다... 잘 읽어습니다....

감사합니다... 잘 읽어습니다....

11.02 00:09 | 카카롯트님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
Good!

Good!

11.26 18:44 | 권상훈님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
취약점에 대해 잘 보았습니다. 취약한 부분을 필터링할 수 있는 PHP 코..

취약점에 대해 잘 보았습니다.

취약한 부분을 필터링할 수 있는 PHP 코드를 있었으면 ;;

02.02 03:10 | SoFTX님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
오 이런게 있었군요...

오 이런게 있었군요...

02.20 15:45 | 피닉스님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
만약에 특정 확장자를 막을 때도 예를들어 .php 파일의 ..

만약에 특정 확장자를 막을 때도

예를들어 .php 파일의 업로드를 막을때,

.Php, .pHp, .phP 의 방식도 서버에서는 php 파일로 인식을 하므로 주의해야합니다.

03.18 11:37 | eloi님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
좋은 의견들인것 같네요.^^ 참고로 php 일 경우에는 강제..

좋은 의견들인것 같네요.^^

참고로 php 일 경우에는 강제로 실행이 안되고 다운로드로 인식하게 만들기도 합니다만,

해보니 이런경우에는 html 이 오히려 먹혀버리더군요..

그리고 또 한가지는 파일명.jpg.php 도 방법이구요. .cy 파일 가능하경우가 있구요.

또한가지는 파일의 내부 code 의 첫번째 줄을 읽어서 확인하는 방법도 있습니다.^^

03.25 17:33 | 레인커뮤니케이션님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
첫번째 줄을 읽는 경우에는 첫째줄을 공백으로 처리해버리거나 hello! ..

첫번째 줄을 읽는 경우에는

첫째줄을 공백으로 처리해버리거나

hello! i\'m pyutic!

PHP SCRIPT

?>

...로 우회가 가능할성 싶네요

의 존재를 체크하는것도 좋은 방법일듯~~

03.27 21:28 | 퓨틱님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
오감사합니다. ㅋ

오감사합니다. ㅋ

06.12 19:09 | 가다나라마바사하자차카타파하아야어여오요님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다 잼있어요 ㅋ
감사합니다 잼있어요 ㅋ
08.03 11:53 | 쿄규님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
.htaccess 를 이용해서 파일 액세스 해줘서 읽는방법도 ..

.htaccess 를 이용해서 파일 액세스 해줘서 읽는방법도 괜찮은거같네요

12.27 11:56 | Hexinic님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
재밋네요 ㅋㅋ
재밋네요 ㅋㅋ
12.22 14:05 | 김동현0님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
This is the common tool to leech your se..
This is the common tool to leech your server info
02.20 17:08 | tianxi님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
댓글쓰기 - 로그인한 후 댓글작성권한이 있을 경우 이용하실 수 있습니다.

비밀번호 확인

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