;

당신은 내가 할 워드 캠프에가는 즐길 경우,당신은 아마 이미 들었어요:”워드 프레스 암호 해싱은 안전하지 않습니다”,또는 가장 기술적 인 버전:”…왜냐하면 그것은 기반이기 때문이다.”

사실이든 아니든,강력한 암호 해싱은 워드프레스와 같은 대규모 생태계에 매우 중요합니다. 그래서,해싱 시스템에 대해 자세히 살펴 처음부터 워드 프레스 해시를 해독하려고하기로 결정!

워드 프레스 암호 해시 이해

나는 인터넷 검색을 시작했고 대부분의 정보가 일반적이고 혼란 스럽다는 것을 발견했다. 그러나 실제로 구체적인 것은 없습니다.

나는 가정으로부터 시작하여 다른 접근 방식을 취하기로 결정했다.:

해싱은 단방향 프로세스이지만 워드 프레스는 암호 입력을 데이터베이스에 저장된 해시와 일치하는 사용자를 인증 할 수 있습니다.

거기에서 코드를 검사하기 시작했고 첫 번째 흥미로운 기능을 발견했습니다.wp_check_password($password,$hash)이 기능은 일반 텍스트 암호를 해시와 비교하고 일치하는 경우 참입니다.

1// presume the new style phpass portable hash.
2if ( empty( $wp_hasher ) ) {
3 require_once ABSPATH . WPINC . '/class-phpass.php';
4 // By default, use the portable hash from phpass.
5 $wp_hasher = new PasswordHash( 8, true );
6}
7
8$check = $wp_hasher->CheckPassword( $password, $hash );
9
10/** This filter is documented in wp-includes/pluggable.php */
11return apply_filters( 'check_password', $check, $password, $hash, $user_id );

코드를 살펴보면 기본적으로 마법이 일어나는CheckPassword,crypt_privateencode64로 빠르게 이동합니다.

긴 이야기 짧은,crypt_private($password, $stored_hash)저장된 해시와 비교되기 전에 암호를 다시 해시합니다. 일치하는 경우 암호가 올바르고 인증이 계속됩니다. 즉,이 함수를 사용하여 해시를 해독 할 수도 있습니다.

해시 해부학

이 워드 프레스 해시입니다:

1$P$BnPVO4gP9JUMSAM1WlLTHPdH6EDj4e1

단순화를 위해,우리는 사이트가 가장 일반적인 설정입니다 최신 휴대용 해시,>5 를 사용 가정합니다.

처음 3 자$P$는 우리가 가지고있는 종류의 오 해시를 시스템에 알려주는 아이디입니다.

문자 번호 3(0 부터 계산)은 입력 문자열을 처리해야 하는 횟수를 결정하는 데 사용됩니다.

4 에서 12 까지의 문자nPVO4gP9은 해싱 전에 암호에 추가 된 임의의 문자열 인 소금을 사용하여 더 임의성을 부여합니다. 암호가 관리자 인 경우 예를 들어,다음 해시됩니다.

해시JUMSAM1WlLTHPdH6EDj4e1의 나머지 부분은 문서화되지 않은encode64함수에서 전달 된 솔트+암호에 의해 생성 된 실제 임의성입니다.이 함수는 입력 문자열에 대해 일부 비트 연산을 수행하고 22 문자 출력을 반환합니다.

그렇게 명확하지 않습니까? 나와 함께 스틱.

지금까지 우리는 알고 있습니다:

  • 해시의 첫 번째 부분은 고정 아이디
  • 두 번째는 카운터로 사용되는 단일 문자이며,고정
  • 세 번째는 암호에 묶여 소금
  • 마지막은 인코딩으로 처리 된’소금+패스’에 의해 생성 된 무작위입니다.
1

그래서,우리는 논리를 다시 쓸 수 있습니다-소금+암호 해시 엑스 배 및 인코딩에서 전달 64-사전 또는 브루 포스 공격을 수행하고 해시의 동일한’마지막 부분’을 얻으면 성공적인 해시 균열이 될 것입니다!

실제 시나리오에서는 해커가 암호 관리자에서 종종 생성되는 임의의 암호 대신 재사용 할 가능성이 높기 때문에 약한 암호를 찾는 데 더 관심이 있습니다.

골랑을 사용하여 인코딩 64 재 작성

나는 매우 빠르기 때문에 골랑과 함께 가기로 결정했고,우리는 큰 암호 사전을 계산하기 위해 모든 속도가 필요합니다.

워드프레스 암호화 절차에서와 마찬가지로 스크립트는 해시를 받아 소금을 분리한 다음 암호(소금+패스)를 구성하여 사전에서 모든 암호를 시도하고 여러 번 해싱합니다.

1itoa64 := "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
2hashloop := 1 << strings.Index(itoa64, string(hash)); // char n. 4 in the hash

이 기능은 이미 바이트 값을 가지고 있기 때문에 골랑에서는 필요하지 않습니다:

1itoa64 & 0x3f]

이 시점에서,나는 우리가 심지어 전체 문자열을 찾을 필요가 없다는 것을 깨달았다. 그것은 전체 암호를 일치하고 스크립트가 더 수행 할 수있는 몇 가지 문자를 일치 충분하다! 그래서,해싱 프로세스의 특성 때문에,만약 문자 엔.0 / 4 / 8 … 일치,입력으로 전달 된 암호가 정확합니다.

그리고 붐,우리는 해시를 깨뜨 렸습니다:

1wphashcrash '$P$BnPVO4gP9JUMSAM1WlLTHPdH6EDj4e1' Dev/wphashcrash/dict.txt
2$P$BnPVO4gP9JUMSAM1WlLTHPdH6EDj4e1 admin
32020/05/30 12:44:15 Executed in 0.000221

현재 스크립트는 하나의 암호 해시 만 입력으로 가져오고 암호 사전의 경로 만 가져옵니다.

나는 이미 가지고 좋은 것 몇 가지 개선 추가 정보에 설명하고 아마 미래에 추가 할 것입니다.

당신이 정말로 싶어 해시의 목록을 해킹하려고하면,당신은 그것을 포크하거나 루프에 대한 배쉬에 스크립트를 래핑 할 수 있습니다.

보안 고려 사항

이 시점에서 공격자가 워드 프레스 사이트의 데이터베이스에 액세스하면 기본적으로 모든 약한 암호를 해독 할 수 있다는 것이 분명합니다.

이 불행한,특히 때문에:워드 프레스 생태계는 프리랜서의 작업을위한 거대한 영역이며,임시 요구를 위해 생성 된 오래된/사용되지 않는 워드 프레스 관리자 및 계정을 찾는 것이 매우 일반적이다

이 마지막 점은 사용자 열거와 결합 된 워드 프레스 일반적인 문제,도난/전당포 관리자 자격 증명을 사용하여 데이터베이스에 액세스 할 수 있도록 문을 열어 둡니다.

이 외에도 많은 웹 사이트에서 사용자 경험을 해치지 않기 위해 강력한 암호를 적용하지 않으며 언급 된 점에 대한 직접적인 경험이 있습니다.

웹 사이트가 손상되면 약한 해시가 저장되면 공격자가 다른 사이트의 다른 사용자 계정을 손상시킬 수 있습니다.

해결책이 있습니까?

내 연구는 그렇게 멀리 가지 않았다,난 단지 워드 프레스 해시를 중단하는 방법을보고 싶어.이 플러그인은 암호를 처리하는 데 필요한 모든 핵심 기능을 대체하고 있습니다:

  • 2018 년 11 월 1 일-2018 년 11 월 1 일-2018 년 11 월 1 일-2018 년 11 월 1 일-2018 년 11 월 1 일-2018 년 11 월 1 일-2018 년 11 월 1 일-2018 년 11 월 1 일-2018 년 11 월 1 일-2018 년 11 월 1 일()

물론 개발자로서 자신의 솔루션을 작성할 수는 있지만 대규모 채택을 목표로 핵심 수준에서 해결해야 할 문제라고 생각합니다.

최종 참고

해시 캣과 존 더 리퍼와 같은 해시를 해독하는 많은 도구가 있지만,이 연구의 범위는 워드 프레스 해시 구조를 이해하고 처음부터 크래킹하는 것입니다.

읽어 주셔서 감사합니다.

프랑스

Write a Comment

이메일 주소는 공개되지 않습니다.